Hi experts.
I have started my small project - mp3 database for radio.
http://martini.pudele.com/radio/mp3_database/mp3_database.html
How do i normalize by peak [not RMS] and trim silences in begin and end of WAV files ?
Silences somewhere in middle of file i wanna leave untouched.
I wanna in first step detect MAX sample in whole WAV file.
For example we gotta MAX sample 10 000, then Apmliefier_coefficient will be 32 000/10 000 = 3,2 .
In second step i wanna trim silences at begin and below -80 dB [or 2 bit noise]
For this in same file each sample multiple by Apmliefier_coefficient , and see - result is over -80 dB or not.
If not, then first N samples will not written in trimmed file, but first sample that is over -80 dB [in any channel] ,
and all further samples written in new file.
Now we must just follow which sample [in any channel] is over -80 dB.
After write is complete, we can just truncate after last sample that was over -80 dB, and write header.
So far i have found SOX vanna reverse da file for end silence trim, and for each step produce tmp file.
Is here C API , program, script, way to do so what without any temporary files ?
I have written script for normalize, but what ir best way for normalize ?
What about mp3 and ogg automatic normalize and frames trim ?
Tnx in advance
Alf
====
#!/bin/bash
for i in *.wav; do
val=${i%.wav}
echo "** Check peak for $i **"
ampl=`sox "$i" -t wav /dev/null stat -v 2>&1`
waveaus=${i%.wav}.wave
wert1="1.1"; wert2=$ampl;
wahr=$(echo "$wert1 > $wert2" | bc)
if [ $wahr = 1 ]; then
echo " $wert1 > $wert2 , Do Nuthin"
else
echo " $wert1 <= $wert2 , Do process"
echo "** Amplifying volume by -=$ampl=- to fake a normalize $val.wav -- $waveaus"
ampl2=$(echo $ampl*0.9995 | bc -l)
echo "ampl2 = $ampl2"
sox -v $ampl2 "$i" -t wav "$waveaus"
fi
echo ""
done
----