return ($artist, $album, $discnum, @tags);
}
-sub bork_tags {
+sub track_tags {
my $h = shift;
my @result;
$outlog = "../$artist/$outfile.log";
@files = ("$artist/$outfile.flac");
} else {
- my %things;
- my @artist;
- my @bork;
+ # Go over @tags, store all [n] tags in a list keyed by n in
+ # %tracks_to_tags, store all ARTIST (not ARTIST[n]) tags in
+ # @disc_artist, and leave the rest in @tags.
+ my %tracks_to_tags;
+ my @disc_artist;
+ my @tmp;
for my $tag (@tags) {
if ($tag =~ /^([^[]+)\[(\d+)]=(.*)/) {
- push(@{$things{$2}->{$1}}, $3);
+ push(@{$tracks_to_tags{$2}->{$1}}, $3);
} elsif ($tag =~ /^ARTIST=/) {
- push(@artist, $tag);
+ push(@disc_artist, $tag);
} else {
- push(@bork, $tag);
+ push(@tmp, $tag);
}
}
- @tags = @bork;
+ @tags = @tmp;
- for my $tracknum (sort(map(int, keys(%things)))) {
- my $title = join(' ', map(split, @{$things{$tracknum}->{'TITLE'}}));
+ for my $tracknum (sort(map(int, keys(%tracks_to_tags)))) {
+ my $title = join(' ', map(split, @{$tracks_to_tags{$tracknum}->{'TITLE'}}));
$title =~ s|/|_|g;
- $outfile = join(' ',
- (defined($discnum)
- ? sprintf('%02d', $discnum)
- : ()),
- sprintf('%02d', $tracknum),
- $title);
- push(@files, "$outdir/$outfile.flac");
- $outfile = "../$outdir/$outfile";
-
- my @lartist;
- if (exists($things{$tracknum}->{'ARTIST'})) {
- @lartist = ();
+ $outfile = join('/',
+ $outdir,
+ join(' ',
+ (defined($discnum)
+ ? sprintf('%02d', $discnum)
+ : ()),
+ sprintf('%02d', $tracknum),
+ $title));
+
+ # If we have ARTIST[n] tags for this track, set
+ # @track_artist to the empty list; they will go in along
+ # with the other [n] tags.
+ my @track_artist;
+ if (exists($tracks_to_tags{$tracknum}->{'ARTIST'})) {
+ @track_artist = ();
} else {
- @lartist = @artist;
+ @track_artist = @disc_artist;
}
- run_flac(sprintf('track%02d.cdda.wav', $tracknum), undef, $outfile,
- @lartist,
- grep({ $_ !~ /^ARTIST=/ } @tags),
- bork_tags($things{$tracknum}));
- $outlog = "../$outdir/log";
+ run_flac(sprintf('track%02d.cdda.wav', $tracknum), undef,
+ "../$outfile",
+ @track_artist,
+ @tags,
+ track_tags($tracks_to_tags{$tracknum}));
+ push(@files, "$outfile.flac");
}
+ $outlog = "../$outdir/log";
}
verbose("Cleaning up $dir\n");
chdir('..') or die("chdir(..): $!");
if (-x "$dir/post-processor") {
- verbose(join(' ', 'Running', @files), "\n");
+ verbose(join(' ', "Running ./$dir/post-processor", @files), "\n");
system("./$dir/post-processor", @files);
unlink("$dir/post-processor") or die("unlink($dir/post-processor): $!");
}