#!/usr/bin/perl
sub framevol
{
my $frame=$_[0];
my $tmp="$$.cutmp3";
`mpg123 -q -w /tmp/$tmp\.wav -k $frame -n 2 $datei 2>&1 >/dev/null`; # aktuellen und
# folgenden Frame
# in WAV wandeln
open SOX,"sox -t wav /tmp/$tmp\.wav -t wav /dev/null stat 2>&1|";
while ($x=<SOX>)
{
#print "$x";
if ($x=~/^Maximum.+amplitude:.*([0-9]\.[0-9].*)/)
{
$vol=$1;
}
}
close SOX;
system("rm -f /tmp/$tmp\.wav");
return $vol;
}
sub refvol
{
my $tmp="$$.cutmp3";
`mpg123 -q -w /tmp/$tmp\.wav $datei 2>&1 >/dev/null`;
open SOX,"sox -t wav /tmp/$tmp\.wav -t wav /dev/null stat 2>&1|";
while ($x=<SOX>)
{
#print "$x";
if ($x=~/^Maximum.+amplitude:.*([0-9]\.[0-9].*)/)
{
$vol=$1;
}
}
close SOX;
system("rm -f /tmp/$tmp\.wav");
return $vol;
}
sub startframe
{
$frame=0;
while (framevol($frame)<($refwert/15)) # 1/15 des Maxwertes
{
$frame++;
if ($frame > ($frames-10))
{
die "Start nicht gefunden.";
}
}
if ($frame == 0)
{
$frame=1;
}
return $frame;
}
sub endframe
{
$backframes=0;
while (framevol($frames-$backframes)<($refwert/15)) # 1/15 des Maxwertes
{
$backframes++;
if ($backframes > ($frames-10))
{
die "Ending nicht gefunden.";
}
}
if ($backframes > 0)
{
$backframes--;
}
return $frames-$backframes;
}
$realdatei=$ARGV[0];
$datei=$$.".cutmp3";
rename $realdatei,$datei; # Temporaerdatei ohne Sonderzeichen anlegen
$frames=`mp3info -p %u $datei`;
print "Datei hat $frames Frames.\n";
$refwert=refvol;
print "Maximale Lautstaerke (1 = 100%) $refwert\n";
$startframe=startframe;
print "Ermittelter Startframe: $startframe\n";
$endframe=endframe;
print "Ermittelter Endframe: $endframe\n";
if ($startframe >= $endframe)
{
die "Es konnten keine sinnvollen Werte ermittelt werden.\n";
}
system("mp3asm -v -t -s $startframe -e $endframe -o $datei.final $datei ");
rename $datei.".final",$realdatei; # Temporaerdatei in endfueltige Datei umbennen
unlink $datei; # Temp.Datei wegraeumen