use warnings;
use FindBin;
-# TODO eval hack
-eval {
- require "$FindBin::Bin/flac2mp3";
- #require "$FindBin::Bin/tags.pl";
-};
+use lib $FindBin::Bin;
+
+require 'flac2mp3';
+require 'tags.pl';
epg::flac::archive::tags->import(
qw[
track_tags
two_digits
]);
+sub filename {
+ my $tags = shift;
+ mangle_for_file_name(
+ join(' ',
+ (map { two_digits($_) } @{$tags->{DISCNUMBER} // []}),
+ (map { two_digits($_) } @{$tags->{TRACKNUMBER} // []}),
+ @{$tags->{TITLE}},
+ @{$tags->{VERSION} // []},
+ @{$tags->{PARTNUMBER} // []},
+ )
+ ) . '.mp3';
+}
+
sub plan_flac {
my $workdir = shift;
my $path = shift;
my $tags = shift;
- my %track = track_tags($tags);
- $track{flac} = $path;
- $track{filename} = mangle_for_file_name(
- join(' ',
- (map { two_digits($_) } @{$track{discnumber}}),
- two_digits($track{tracknumber}),
- $track{title},
- )) . '.mp3';
- $track{dir} = join('/', $workdir, mangle_for_file_name($track{album}));
- \%track
+ (
+ tags => {track_tags($tags)},
+ flac => $path,
+ filename => filename($tags),
+ dir => join('/', $workdir, mangle_for_file_name(@{$tags->{ALBUM}})),
+ )
}
sub plan {
my $workdir = shift;
- map { plan_flac($workdir, @$_) } @_
+ map { {plan_flac($workdir, @$_)} } @_
}
# if @layout is partially on disk, return the portion that remains to be written
));
for my $mp3 (@layout) {
say('mkdir -p ' . $mp3->{dir});
- epg::flac::archive::mp3::flac2mp3(join('/', $mp3->{dir}, $mp3->{filename}), $mp3->{flac}, $mp3);
+ epg::flac::archive::mp3::flac2mp3(join('/', $mp3->{dir}, $mp3->{filename}), $mp3->{flac}, $mp3->{tags});
}
my @output;
use v5.12;
use warnings;
-use File::Temp;
use FindBin;
-require "$FindBin::Bin/tags.pl";
+use lib $FindBin::Bin;
+
+require 'tags.pl';
epg::flac::archive::tags->import(
qw[
track_tags
);
}
+sub filename {
+ my $tags = shift;
+ mangle_for_file_name(
+ join(' ',
+ @{$tags->{ARTIST}},
+ @{$tags->{ALBUM}},
+ (map { two_digits($_) } @{$tags->{DISCNUMBER} // []}),
+ (map { two_digits($_) } @{$tags->{TRACKNUMBER} // []}),
+ @{$tags->{TITLE}},
+ @{$tags->{VERSION} // []},
+ @{$tags->{PARTNUMBER} // []},
+ )
+ ) . '.mp3';
+}
+
sub main {
for my $flac (@_) {
say('metaflac --export-picture-to=flac2mp3.cover.$$ ',
quote($flac), ' && pic_options="--ti flac2mp3.cover.$$"');
- my %tags = track_tags(read_tags_metaflac($flac));
- flac2mp3(
- mangle_for_file_name(
- join(' ',
- $tags{artist},
- $tags{album},
- (map { two_digits($_) } @{$tags{discnumber}}),
- two_digits($tags{tracknumber}),
- $tags{title},
- )
- )
- . '.mp3',
- $flac,
- \%tags,
- );
+
+ # TODO multi-track
+ my ($tags) = read_tags_metaflac($flac);
+ flac2mp3(filename($tags), $flac, {track_tags($tags)});
say('unset pic_options');
}
say('rm -f flac2mp3.cover.$$');
use v5.12;
use warnings;
-use Test::More tests => 6;
+use Test::More tests => 14;
use FindBin;
require 'tags.pl';
epg::flac::archive::tags->import('track_tags_from_disc');
require 'fa-encode';
+require 'fa-mp3cd';
+require 'flac2mp3';
is epg::flac::archive::encode::filename(
3,
VERSION => ['12 inch remix'],
},
];
+
is epg::flac::archive::encode::filename(
1, {epg::flac::archive::tags::track_tags_from_disc($album, $tracks, 1)},
),
),
'04-testing_both_and_with_leading_0-live-04.flac',
'PARTNUMBER with leading 0 and VERSION';
+
+#
+# fa-mp3cd
+#
+
+is epg::flac::archive::mp3::cd::filename(
+ {
+ epg::flac::archive::tags::track_tags_from_disc($album, $tracks, 1),
+ TRACKNUMBER => [1]
+ }
+ ),
+ '01_Care_4.mp3',
+ 'fa-mp3cd PART goes into filename, PARTNUMBER ignored';
+
+is epg::flac::archive::mp3::cd::filename(
+ {
+ epg::flac::archive::tags::track_tags_from_disc($album, $tracks, 2),
+ TRACKNUMBER => [2]
+ }
+ ),
+ '02_silence.mp3',
+ 'fa-mp3cd parens in track title omitted';
+
+is epg::flac::archive::mp3::cd::filename(
+ {
+ epg::flac::archive::tags::track_tags_from_disc($album, $tracks, 3),
+ TRACKNUMBER => [3]
+ }
+ ),
+ '03_Murder_Machines_12_inch_remix.mp3',
+ 'fa-mp3cd VERSION goes into filename';
+
+is epg::flac::archive::mp3::cd::filename(
+ {
+ epg::flac::archive::tags::track_tags_from_disc($album, $tracks, 4),
+ TRACKNUMBER => [4]
+ }
+ ),
+ '04_testing_both_and_with_leading_0_live_04.mp3',
+ 'fa-mp3cd PARTNUMBER with leading 0 and VERSION';
+
+#
+# flac2mp3
+#
+
+is epg::flac::archive::mp3::filename(
+ {
+ epg::flac::archive::tags::track_tags_from_disc($album, $tracks, 1),
+ TRACKNUMBER => [1]
+ }
+ ),
+ 'Marillion_An_Hour_Before_It-s_Dark_01_Care_4.mp3',
+ 'flac2mp3 PART goes into filename, PARTNUMBER ignored';
+
+is epg::flac::archive::mp3::filename(
+ {
+ epg::flac::archive::tags::track_tags_from_disc($album, $tracks, 2),
+ TRACKNUMBER => [2]
+ }
+ ),
+ 'Marillion_An_Hour_Before_It-s_Dark_02_silence.mp3',
+ 'flac2mp3 parens in track title omitted';
+
+is epg::flac::archive::mp3::filename(
+ {
+ epg::flac::archive::tags::track_tags_from_disc($album, $tracks, 3),
+ TRACKNUMBER => [3]
+ }
+ ),
+ 'Marillion_An_Hour_Before_It-s_Dark_03_Murder_Machines_12_inch_remix.mp3',
+ 'flac2mp3 VERSION goes into filename';
+
+is epg::flac::archive::mp3::filename(
+ {
+ epg::flac::archive::tags::track_tags_from_disc($album, $tracks, 4),
+ TRACKNUMBER => [4]
+ }
+ ),
+'Marillion_An_Hour_Before_It-s_Dark_04_testing_both_and_with_leading_0_live_04.mp3',
+ 'flac2mp3 PARTNUMBER with leading 0 and VERSION';
use Test::Differences;
use Test::Exception;
-require './tags.pl';
-require './fa-mp3cd';
+use FindBin;
+
+use lib "$FindBin::Bin/../..";
+
+require 'fa-mp3cd';
my @Rising = (
{ title => ['Tarot Woman'] },
use Test::Differences;
-require './tags.pl';
-require './fa-mp3cd';
+use FindBin;
+
+use lib "$FindBin::Bin/../..";
+
+require 'fa-mp3cd';
my @Rising = (
{ TITLE => ['Tarot Woman'] },
dir => './Rising',
flac => '1.flac',
filename => '01_Tarot_Woman.mp3',
- artist => 'Rainbow',
- album => 'Rising',
- date => '1976-05-17',
- discnumber => [],
- tracknumber => 1,
- title => 'Tarot Woman',
+ tags => {
+ artist => 'Rainbow',
+ album => 'Rising',
+ date => '1976-05-17',
+ discnumber => [],
+ tracknumber => 1,
+ title => 'Tarot Woman',
+ }
},
{
dir => './Rising',
flac => '2.flac',
filename => '02_Run_With_the_Wolf.mp3',
- artist => 'Rainbow',
- album => 'Rising',
- date => '1976-05-17',
- discnumber => [],
- tracknumber => 2,
- title => 'Run With the Wolf',
+ tags => {
+ artist => 'Rainbow',
+ album => 'Rising',
+ date => '1976-05-17',
+ discnumber => [],
+ tracknumber => 2,
+ title => 'Run With the Wolf',
+ }
},
],
[epg::flac::archive::mp3::cd::plan('.', @Rising)];
dir => 'a/b/fakeal',
flac => 'file.flac',
filename => '01_faket.mp3',
- artist => 'fakear',
- album => 'fakeal',
- date => 0,
- discnumber => [],
- tracknumber => 1,
- title => 'faket',
+ tags => {
+ artist => 'fakear',
+ album => 'fakeal',
+ date => 0,
+ discnumber => [],
+ tracknumber => 1,
+ title => 'faket',
+ }
}
],
[
dir => '/a/b/fakeal',
flac => 'file.flac',
filename => '01_faket.mp3',
- artist => 'fakear',
- album => 'fakeal',
- date => 0,
- discnumber => [],
- tracknumber => 1,
- title => 'faket',
+ tags => {
+ artist => 'fakear',
+ album => 'fakeal',
+ date => 0,
+ discnumber => [],
+ tracknumber => 1,
+ title => 'faket',
+ }
}
],
[