File: //lib/liquidsoap/1.3.7/extract-replaygain
#!/usr/bin/perl -w
use strict ;
my $file = $ARGV[0] || die ;
my $mime;
sub test_mime {
if (!$mime) {
if (`which file`) {
$mime = `file -b --mime-type "$file"`;
}
}
return $mime;
}
sub use_replaygain {
my $out = `replaygain --no-album "$file" 2> /dev/null; replaygain --show "$file" 2> /dev/null` ;
$out =~ /Track gain (.*) dB$/m || die ;
print "$1 dB\n" ;
}
if (($file =~ /\.mp3$/i) || (test_mime() =~ /audio\/mpeg/)) {
if (`which mp3gain`) {
my $out = `mp3gain -q "$file" 2> /dev/null` ;
$out =~ /Recommended "Track" dB change: (.*)$/m || die ;
print "$1 dB\n" ;
} elsif (`which replaygain`) {
use_replaygain()
} else {
print STDERR "Cannot find mp3gain nor replaygain binaries!\n";
}
} elsif(($file =~ /\.m4a$/i) || (test_mime() =~ /audio\/x-m4a/)) {
if (`which replaygain`) {
use_replaygain()
} else {
print STDERR "Cannot find replaygain!\n";
}
} elsif (($file =~ /\.ogg$/i) || (test_mime() =~ /application\/ogg/)) {
if ((`which vorbisgain`) && (`which ogginfo`)) {
system("vorbisgain -q -f \"$file\" 2>/dev/null >/dev/null") ;
my $info = `ogginfo "$file"` ;
$info =~ /REPLAYGAIN_TRACK_GAIN=(.*) dB/ || die ;
print "$1 dB\n" ;
} else {
print STDERR "Cannot find vorbisgain or ogginfo!\n";
}
} elsif (($file =~ /\.flac$/i) || (test_mime() =~ /audio\/x-flac/)) {
if (`which metaflac`) {
my $info = `metaflac --show-tag=REPLAYGAIN_TRACK_GAIN "$file"` ;
$info =~ /REPLAYGAIN_TRACK_GAIN=(.*) dB/;
if (defined($1)) {
print "$1 dB\n" ;
} else {
system("metaflac --add-replay-gain \"$file\" \
2>/dev/null >/dev/null") ;
$info = `metaflac --show-tag=REPLAYGAIN_TRACK_GAIN "$file"` ;
$info =~ /REPLAYGAIN_TRACK_GAIN=(.*) dB/ || die "Error in $file" ;
print "$1 dB\n" ;
}
} else {
print STDERR "Cannot find metaflac!\n";
}
} else {
print STDERR "File format not supported...\n";
}