]> diplodocus.org Git - flac-archive/blobdiff - flac2mp3
Restore some VERSION support.
[flac-archive] / flac2mp3
index 5115b723b287d98a6026835598db268a07616f60..4dbb9278e99abe4704c4b4bf72f5b53c6fae0df3 100755 (executable)
--- a/flac2mp3
+++ b/flac2mp3
@@ -55,94 +55,87 @@ 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[
-        disc_tags
-        read_tags
-        mangle_for_file_name
-        quote
-    ]);
+      track_tags
+      read_tags_metaflac
+      mangle_for_file_name
+      quote
+      two_digits
+    ]
+);
 
 sub flac2mp3 {
-    my $quoted_flac = quote(shift);
+    my $mp3 = shift;
+    my $flac = shift;
     my $tags = shift;
-    my ($album, $artist, $date, $discnumber) = disc_tags($tags);
-
-        # TODO resurrect whole-disc FLAC?
-        # Stupid hack: only a single-track file should have the
-        # TRACKNUMBER tag, so use it if set for the first pass through
-        # the loop.  At the end of the loop, we'll set $track for the
-        # next run, so this continues to work for multi-track files.
-                # if track == None:
-                #     track = 1
-                # else:
-                #     track = int(track)
-
-    my $tracknumber = epg::flac::archive::tags::one(TRACKNUMBER => $tags);
-    my $title = epg::flac::archive::tags::one(TITLE => $tags);
-    # TODO restore PARTNUMBER and VERSION next time i need them
 
-    say('metaflac --export-picture-to=flac2mp3.cover.$$', " $quoted_flac && pic_options=", '"--ti flac2mp3.cover.$$"');
+    my @version;
+    if (defined($tags->{version})) {
+        @version = ('(' . $tags->{version} . ')');
+    }
 
     # This is an old TODO; what's wrong with --ty ?
     # TODO: Look at TDOR, TDRL, TDRC for date.
-    say(join(' ',
-             'flac',
-             '-cd',
-             $quoted_flac,
-             '|',
-             'lame',
-             '--id3v2-only',
-             '--id3v2-latin1',
-             '--pad-id3v2-size', 0,
-             '--preset standard',
-             '--ta',
-             quote($artist),
-             '--tl',
-             quote($album),
-             '--tn',
-             quote($tracknumber),
-             '--tt',
-             quote($title),
-             '--ty',
-             quote($date),
-             '$pic_options',
-             #(map { ('--tv', quote("TPE2=$_")) } @{$albumartist}),
-             (map { ('--tv', quote("TPOS=$_")) } @{$discnumber}),
-             '-',
-             quote(
-                 mangle_for_file_name(
-                     join(' ',
-                          $artist,
-                          $album,
-                          (map { sprintf('%02d', $_) } @{$discnumber}),
-                          $tracknumber,
-                          $title,
-                     ))
-                 . '.mp3'
-             )
-        ));
-    say('unset pic_options');
+    say(
+        join(
+            ' ',
+            'flac',
+            '-cd',
+            quote($flac),
+            '|',
+            'lame',
+            '--id3v2-only',
+            '--id3v2-latin1',
+            '--pad-id3v2-size', 0,
+            '--preset standard',
+            '--ta',
+            quote($tags->{artist}),
+            '--tl',
+            quote($tags->{album}),
+            '--tn',
+            quote($tags->{tracknumber}),
+            '--tt',
+            quote(join(' ', $tags->{title}, @version)),
+            '--ty',
+            quote($tags->{date}),
+            '$pic_options',
+
+            #(map { ('--tv', quote("TPE2=$_")) } @{$albumartist}),
+            (map { ('--tv', quote("TPOS=$_")) } @{$tags->{discnumber}}),
+            '-',
+            quote($mp3),
+        )
+    );
 }
 
-sub read_tags_metaflac {
-    my $fn = shift;
-    open(my $fh, '-|', 'metaflac', '--no-utf8-convert', '--export-tags-to=-', $fn) || die("metalfac: $!");
-    my @result = read_tags($fh);
-    if (!close($fh)) {
-        if ($! == 0) {
-            die("metaflac exited $?")
-        }
-        die("close(metaflac): $!")
-    }
-    @result
+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 $fn (@_) {
-        my ($tags) = read_tags_metaflac($fn);
-        flac2mp3($fn, $tags);
+    for my $flac (@_) {
+        say('metaflac --export-picture-to=flac2mp3.cover.$$ ',
+            quote($flac), ' && pic_options="--ti flac2mp3.cover.$$"');
+
+        # 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.$$');
 
@@ -150,7 +143,7 @@ sub main {
 }
 
 if (!caller) {
-    exit(main(@ARGV))
+    exit(main(@ARGV));
 }
 
 1;