]>
diplodocus.org Git - flac-archive/blob - fa-encode
5 B<fa-encode> - encode WAV files to FLAC
9 B<fa-encode> [B<-d> I<artist-directory>] B<input-directory>
11 I<artist-directory> defaults to the album B<ARTIST> in the tags file; one of
18 package epg
::flac
::archive
::encode
;
26 use lib
$FindBin::Bin
;
29 epg
::flac
::archive
::tags-
>import(
39 my ($tracknumber, $tags) = @_;
40 my $title = $tags->{TITLE
} // die('title required');
41 my @discnumber = @{$tags->{DISCNUMBER
} // []};
42 my @partnumber = @{$tags->{PARTNUMBER
} // []};
43 my @version = @{$tags->{VERSION
} // []};
45 (map { two_digits
($_) } @discnumber),
46 two_digits
($tracknumber),
47 mangle_for_file_name
(join('TODO multi-title?', @$title)),
48 # TODO more than one VERSION?
49 (map { mangle_for_file_name
($_) } @version),
56 my $input_directory = shift || pod2usage
();
57 my $fn = "$input_directory/tags";
58 open(my $fh, '<', $fn) || die("open($fn): $!");
59 my ($album, $tracks) = read_tags
($fh);
60 if (!defined($album->{ALBUM
}) || scalar(@{$album->{ALBUM
}}) != 1) {
61 die('exactly one ALBUM tag required')
63 my $album_tag = $album->{ALBUM
}->[0];
65 if (!defined($album->{ARTIST
}) || scalar(@{$album->{ARTIST
}}) != 1) {
66 die('exactly one ARTIST tag required')
68 my $artist = $album->{ARTIST
}->[0];
71 if (defined($album->{DATE
})) {
72 if (scalar(@{$album->{DATE
}}) != 1) {
73 die('one or zero DATE tags required')
75 $date = $album->{DATE
}->[0];
78 if (defined($album->{DISCNUMBER
})) {
79 if (scalar(@{$album->{DISCNUMBER
}}) != 1) {
80 die('one or zero DISCNUMBER tags required')
82 @discnumber = ($album->{DISCNUMBER
}->[0]);
85 my $dir = join('/', '..', mangle_for_file_name
($artist), mangle_for_file_name
($album_tag));
88 say('cd ', quote
($input_directory));
89 say('mkdir -p ', quote
($dir));
91 for my $track (@$tracks) {
93 if (!defined($track->{TITLE
}) || scalar(@{$track->{TITLE
}}) < 1) {
94 die("at least one TITLE required for track $tracknum")
96 $track->{ALBUM
} = $album->{ALBUM
};
97 $track->{TRACKNUMBER
} = [$tracknum];
98 if (!defined($track->{ARTIST
}) && defined($album->{ARTIST
})) {
99 $track->{ARTIST
} = $album->{ARTIST
};
101 if (defined($date)) {
102 $track->{DATE
} = [$date];
105 $track->{DISCNUMBER
} = \
@discnumber;
107 my $title = join(' ', @{$track->{TITLE
}});
112 {track_tags_from_disc
($album, $tracks, $tracknum)}
115 -e
$fn && die("cowardly refusing to clobber $fn");
116 my @pictures = ('--picture', quote
('3|image/jpeg|||cover.front.jpeg')); # TODO optional
117 my $tracknum_s = two_digits
($tracknum);
121 '--delete-input-file',
129 ('-T', quote
($name . '=' . $_))
131 } sort(keys(%$track))),
132 "track$tracknum_s.cdda.wav"
135 say('rm tags cover.front.jpeg');