X-Git-Url: https://diplodocus.org/git/flac-archive/blobdiff_plain/38d7bbebf8335dfc4735b7aa6a51f32e7543e1c9..1de330a82414d0c2013e614a04356ebfcfe22dec:/fa-flacd diff --git a/fa-flacd b/fa-flacd index 74c35ab..822f628 100755 --- a/fa-flacd +++ b/fa-flacd @@ -12,7 +12,7 @@ B [B<-jv>] B -B ID TRACKCOUNT OFFSET [OFFSET ...] LENGTH +B I =cut @@ -30,7 +30,7 @@ my @jobs; my @finished; sub verbose { - $verbose and map({ print(STDERR $_) } @_); + $verbose and print(STDERR $_) for @_; } # Return the ARTIST, ALBUM, and DATE followed by a list of all the @@ -41,7 +41,6 @@ sub get_tags { my $value; my $artist; my $album; - my $date; my @tags; verbose("Opening tags file $fn\n"); @@ -58,14 +57,11 @@ sub get_tags { } elsif (/^ALBUM=/) { $album = $value; verbose("ALBUM $album from $fn\n"); - } elsif (/^DATE=/) { - $date = $value; - verbose("DATE $date from $fn\n"); } } close(TAGS) or die("close($fn): $!"); - return ($artist, $album, $date, @tags); + return ($artist, $album, @tags); } # Process the fa-rip output in the directory DIR. @@ -73,15 +69,15 @@ sub flac { my $dir = shift; my $artist; my $album; - my $date; my @tags; + my $outfile; my $status; verbose("Renaming $dir/tags\n"); rename("$dir/tags", "$dir/using-tags") or die("rename($dir/tags, $dir/using-tags): $!"); - ($artist, $album, $date, @tags) = get_tags("$dir/using-tags"); + ($artist, $album, @tags) = get_tags("$dir/using-tags"); verbose("mkdir($artist)\n"); -d $artist or mkdir($artist) or die("mkdir($artist): $!"); @@ -89,8 +85,11 @@ sub flac { verbose("chdir($dir)\n"); chdir($dir) or die("chdir($dir): $!"); + $outfile = "$album"; + $outfile =~ s/\//_/g; + verbose("Running flac\n"); - $status = system('flac', '-o', "../$artist/$album.flac-tmp", + $status = system('flac', '-o', "../$artist/$outfile.flac-tmp", '--delete-input-file', '-V', '--cuesheet', 'cue', '--no-padding', '--best', map({ ('-T', $_) } @tags), @@ -106,15 +105,15 @@ sub flac { verbose("Cleaning up $dir\n"); unlink('using-tags') or die("unlink(using-tags): $!"); unlink('cue') or die("unlink(cue): $!"); - rename('toc', "../$artist/$album.toc") - or die("rename(toc, ../$artist/$album.toc): $!"); - rename('log', "../$artist/$album.log") - or die("rename(log, ../$artist/$album.log): $!"); + rename('toc', "../$artist/$outfile.toc") + or die("rename(toc, ../$artist/$outfile.toc): $!"); + rename('log', "../$artist/$outfile.log") + or die("rename(log, ../$artist/$outfile.log): $!"); chdir('..') or die("chdir(..): $!"); rmdir($dir) or die("rmdir($dir): $!"); - rename("$artist/$album.flac-tmp", "$artist/$album.flac") - or die("rename($artist/$album.flac-tmp, $artist/$album.flac): $!"); + rename("$artist/$outfile.flac-tmp", "$artist/$outfile.flac") + or die("rename($artist/$outfile.flac-tmp, $artist/$outfile.flac): $!"); return 0; } @@ -122,7 +121,7 @@ sub flac { sub reaper { my $pid; - while (($pid = waitpid(0, WNOHANG)) > 0) { + while (($pid = waitpid(-1, WNOHANG)) > 0) { push(@finished, [$pid, $?]); } @@ -201,7 +200,7 @@ MAIN: { $opts{'j'} = 4; $opts{'v'} = 0; if (not getopts('j:v', \%opts)) { - print("usage: flacd [-jN -v]\n"); + print(STDERR "usage: flacd [-jN -v]\n"); exit(2); } @@ -251,12 +250,11 @@ artist directory (and named by album) and the ID directory is removed. =head2 FA-RIP -B uses C to retrieve the disc ID and track -information. It creates a directory named by ID for storage of its -intermediate files. It passes the C output as -command-line arguments to B in the background. It then uses -C to create the "cue" file in the background. Finally, it -execs C to rip the CD to the "wav" file. +B uses C to create a directory for storage of its +intermediate files. It uses C to create the "cue" file and +then passes the number of tracks (from the "cue" file) as command-line +arguments to B. Finally, it execs C to rip +the CD to the "wav" file. In order for this CD to be processed by B, the user must create a "tags" file. This is usually done by renaming one of the @@ -264,26 +262,19 @@ candidate-tags files and deleting the others. =head2 FA-TAGS -B uses C (from the B package) to -populate candidate-tags files. These are numbered in the order of -entries read from CDDB, e.g. candidate-tags-1, candidate-tags-2, etc. -B also creates candidate-tags-0, which has the correct fields -for this CD (including correct number of TITLE= lines), but with all -fields blank. +B uses C to populate candidate-tags +files. These are numbered in the order of entries read from +MusicBrainz, e.g. candidate-tags-1, candidate-tags-2, etc. B +also creates candidate-tags-0, which has the correct fields for this +CD (including correct number of TITLE= lines), but with all fields +blank. -B expects the output of C as command-line -arguments. That is, the disc ID, number of tracks, list of track -offsets, and total length of the CD in seconds. +B requires the number of tracks as its sole argument. =head1 ENVIRONMENT =over 4 -=item CDDBURL - -B uses this to retrieve candidate Vorbis tags. Defaults to -"http://freedb.freedb.org/~cddb/cddb.cgi". - =item CDDEV B uses this to rip audio and save the cuesheet for a CD. It @@ -294,17 +285,10 @@ Linux, and NetBSD by default. =head1 AUTHORS -Written by Eric Gillespie . B contains -code from B, which bears the following notice: - -# Copyright (c) 1998-2001 Robert Woodcock -# Copyright (c) 2003-2004 Jesus Climent -# This code is hereby licensed for public consumption under either the -# GNU GPL v2 or greater, or Larry Wall's Artistic license - your choice. +Written by Eric Gillespie . -B is hereby licensed for public consumption under either -the GNU GPL v2 or greater, or Larry Wall's Artistic license - your -choice. +flac-archive is free software; you may redistribute it and/or modify +it under the same terms as Perl itself. =cut