]> diplodocus.org Git - flac-archive/blobdiff - flac2mp3
perltidy -bt=2 -pt=2 -nvc
[flac-archive] / flac2mp3
index c1e09445d77cf83db9bb0c098928d747305cb901..c8e9d11313f2c40447be7697273d493154bde2e0 100755 (executable)
--- a/flac2mp3
+++ b/flac2mp3
@@ -58,110 +58,81 @@ use FindBin;
 require "$FindBin::Bin/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 %a = @_;
-    my $quoted_flac = quote($a{flac});
-
-    say('if metaflac --export-picture-to=flac2mp3.cover.$$ ', $quoted_flac, '; then');
-    say('    pic_options="--ti flac2mp3.cover.$$"');
-    say('fi');
+    my $mp3 = shift;
+    my $flac = shift;
+    my $tags = shift;
 
     # 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($a{artist}),
-             '--tl',
-             quote($a{album}),
-             '--tn',
-             quote($a{track}),
-             '--tt',
-             quote($a{title}),
-             '--ty',
-             quote($a{date}),
-             '$pic_options',
-             (map { ('--tv', quote("TPE2=$_")) } @{$a{albumartist}}),
-             (map { ('--tv', quote("TPOS=$_")) } @{$a{discnumber}}),
-             '-',
-             quote(
-                 mangle_for_file_name(
-                     join(' ',
-                          $a{artist},
-                          $a{album},
-                          (map { sprintf('%02d', $_) } @{$a{discnumber}}),
-                          $a{track},
-                          $a{title},
-                     ))
-                 . '.mp3'
-             )
-        ));
-    say('unset pic_options');
-    say('rm -f flac2mp3.cover.$$');
-}
-
-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
+    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($tags->{title}),
+            '--ty',
+            quote($tags->{date}),
+            '$pic_options',
+
+            #(map { ('--tv', quote("TPE2=$_")) } @{$albumartist}),
+            (map { ('--tv', quote("TPOS=$_")) } @{$tags->{discnumber}}),
+            '-',
+            quote($mp3),
+        )
+    );
 }
 
 sub main {
-    for my $fn (@_) {
-        my ($tags) = read_tags_metaflac($fn);
-        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 net time i need them
-            flac2mp3(
-                artist => $artist,
-                album => $album,
-                date => $date,
-                discnumber => $discnumber,
-                track => $tracknumber,
-                title => $title,
-                flac => $fn,
+    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,
+        );
+        say('unset pic_options');
     }
+    say('rm -f flac2mp3.cover.$$');
 
     return 0;
 }
 
 if (!caller) {
-    exit(main(@ARGV))
+    exit(main(@ARGV));
 }
 
 1;