summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorP. J. McDermott <pjm@nac.net>2013-11-21 04:04:49 (EST)
committer P. J. McDermott <pjm@nac.net>2013-11-21 04:04:49 (EST)
commit15e7b17b2c60c440dc83236d1f21df68a203e12e (patch)
treea4babae075a97780700ea144d25adb99f9af13b7
parent08ea2cfea0ac18953bd3572cd28120456471d629 (diff)
downloadjamaldo-15e7b17b2c60c440dc83236d1f21df68a203e12e.zip
jamaldo-15e7b17b2c60c440dc83236d1f21df68a203e12e.tar.gz
jamaldo-15e7b17b2c60c440dc83236d1f21df68a203e12e.tar.bz2
Automatically set Vorbis comments.
-rwxr-xr-xjamaldo.pl54
1 files changed, 36 insertions, 18 deletions
diff --git a/jamaldo.pl b/jamaldo.pl
index 7d9e8f2..e1e94db 100755
--- a/jamaldo.pl
+++ b/jamaldo.pl
@@ -69,7 +69,6 @@ sub get_album
my $album_name;
my $dir;
my $i;
- my $control_fh;
my $track;
$url = "http://api.jamendo.com/v3.0/tracks/?client_id=" . CLIENT_ID
@@ -101,47 +100,66 @@ sub get_album
undef($album_name);
$i = 0;
- open($control_fh, ">", $dir . "/control");
for $track (@{$res_data->{"results"}}) {
printf(" Downloading track %d of %d...\n", ++$i,
$res_data->{"headers"}->{"results_count"});
- get_track($track, $audioformat, $dir, $control_fh);
+ get_track($track, $audioformat, $dir);
}
- close($control_fh);
}
sub get_track
{
- my ($track, $audioformat, $dir, $control_fh) = @_;
+ my ($track, $audioformat, $dir) = @_;
my $name;
+ my $audio_fname;
my $req;
my $res;
+ my %fields;
+ my $comments_fname;
+ my $comments_fh;
+ my $vorbis_field;
+ my $jamendo_field;
$name = $track->{"name"};
printf(" Title: %s\n", $name);
-
$name =~ s|/|-|g;
- $name = sprintf("%s/%02d - %s.%s", $dir, $track->{"position"}, $name,
- $audioformat);
+
+ $audio_fname = sprintf("%s/%02d - %s.%s",
+ $dir, $track->{"position"}, $name, $audioformat);
$req = HTTP::Request->new("GET", $track->{"audio"});
- $res = $ua->request($req, $name);
+ $res = $ua->request($req, $audio_fname);
if ($res->is_error()) {
printf(STDERR "Error: Server returned HTTP status code %s\n",
$res->code());
return undef;
}
- undef($name);
undef($req);
undef($res);
- printf($control_fh "Title: %s\n", $track->{"name"});
- printf($control_fh "Album: %s\n", $track->{"album_name"});
- printf($control_fh "Track number: %d\n", $track->{"position"});
- printf($control_fh "Artist: %s\n", $track->{"artist_name"});
- printf($control_fh "License: %s\n", $track->{"license_ccurl"});
- printf($control_fh "Date: %s\n", $track->{"releasedate"});
- printf($control_fh "\n");
- $control_fh->flush();
+ %fields = (
+ "TITLE" => "name",
+ "ALBUM" => "album_name",
+ "TRACKNUMBER" => "position",
+ "ARTIST" => "artist_name",
+ "LICENSE" => "license_ccurl",
+ "DATE" => "releasedate",
+ );
+
+ $comments_fname = sprintf("%s/%02d - %s.comments",
+ $dir, $track->{"position"}, $name);
+ open($comments_fh, ">", $comments_fname);
+ while (($vorbis_field, $jamendo_field) = each(%fields)) {
+ $jamendo_field = $track->{$jamendo_field};
+ $jamendo_field =~ s/\n/\\n/g;
+ $jamendo_field =~ s/\r/\\r/g;
+ $jamendo_field =~ s/\\/\\\\/g;
+ $jamendo_field =~ s/\0/\\0/g;
+ printf($comments_fh "%s=%s\n", $vorbis_field, $jamendo_field);
+ }
+ close($comments_fh);
+
+ system("vorbiscomment", "-w", "-R", "-e", "-c", $comments_fname,
+ $audio_fname);
}
main();