#!/usr/bin/perl # TODO - take a playlist in, copy all from that? # assumes flac files are all in pwd. use strict; use Audio::FLAC::Header; use MP3::Info; my @fields = qw/TITLE ARTIST ALBUM YEAR COMMENT GENRE TRACKNUM COMPOSER/; my ($tno, $f, $m, $srcpath, $src, $dst, $flac,@dst); die "Usage: $0 playlist.m3u" unless $ARGV[0] =~ /\.m3u/; $srcpath = ($ARGV[0] =~ /(.*)\/\w+\.\w+/)[0]; open (M3U, shift @ARGV) || die "Can't open playlist"; open (FLACU, '>playlist.txt') || die "Can't write new playlist"; while () { chop; next if /^\s*#/; $tno++; if ( ! ($m = get_mp3tag($src = "$srcpath/$_"))) { warn "Can't get tag for $_"; next; } $dst = 'track' . sprintf("%02d", $tno) . '.cdda.flac'; if ($flac = Audio::FLAC::Header->new($dst)) { $f = $flac->tags() ||die "Can't get flac tags - $!"; for (@fields) { $$f{ucfirst(lc($_))} = $$m{$_} if length $$m{$_}; } $$f{'Tracknumber'} = delete $$f{'Tracknum'}; $flac->write() || warn $!; $src =~m/([^\/]+)(?:.mp3)$/; if (length $1) { rename $dst, "$1.flac"; print FLACU "$1.flac\n"; push @dst, "$1.flac"; } } else { warn "Couldn't get header for $f"; } } system('metaflac','--add-replay-gain',@dst);