[LAU] Gain and clipping wav -> lame

Martin Cracauer cracauer at cons.org
Thu Jul 25 18:21:50 UTC 2013


Does anybody know why wav files that do not have clipping would clip
when encoding them with lame?

I have a bunch of self-made clips that for various reasons don't have
enough gain.  I wrote a wav->wav conversion that determines maximum
gain (as in highest or lowest absolute value) and uses sox' volume
argument to boost.  Inspecting it with same gain tools and listening
to it shows the expected gain raise, but not clipping.

Then, when encoding in lame it gets clipped.  Lame warns about it and
the values have been boosted to the max.  When doing the boost, with
the same factor, directly in lame (feeding in the unboosted wav) I get
the same problem.  Very roughly a clip with 3% headroom ends up being
too high by 16%, or about a 20% boost.

What's going on? I assume there is something about mp3 encoding I
don't quite understand.

Is there anything more efficient that I can do about that doing one
lame run to get an appropriate boost value and then doing another
encoding pass?



Here are the stats of a boosted wav file and the resulting lame:

t02c02.tmp.wav_maxgain_tmp.wav:
Samples read:          36900960
Length (seconds):    384.385000
Scaled by:         2147483647.0
Maximum amplitude:     0.969208
Minimum amplitude:    -0.970673
Midline amplitude:    -0.000732
Mean    norm:          0.213396
Mean    amplitude:     0.000000
RMS     amplitude:     0.274775
Maximum delta:         1.675323
Minimum delta:         0.000000
Mean    delta:         0.193639
RMS     delta:         0.245325
Rough   frequency:         6820
Volume adjustment:        1.030



mp3:
Samples read:          36907776
Length (seconds):    384.456000
Scaled by:         2147483647.0
Maximum amplitude:     1.000000
Minimum amplitude:    -1.000000
Midline amplitude:    -0.000000
Mean    norm:          0.203464
Mean    amplitude:     0.000010
RMS     amplitude:     0.262007
Maximum delta:         1.636044
Minimum delta:         0.000000
Mean    delta:         0.185782
RMS     delta:         0.235408
Rough   frequency:         6863
Volume adjustment:        1.000
/opt/good-sox/bin/sox WARN sox: `-' input clipped 725 samples
/opt/good-sox/bin/sox WARN sox: `/tmp/cracauer/l.wav' output clipped
360 samples; decrease volume?

Encoding output:
lame -h -b 160 --replaygain-accurate --clipdetect t02c02.tmp.wav_maxgain_tmp.wav t02c02.tmp.wav_maxgain_tmp.mp3_tmp '&&' mv t02c02.tmp.wav_maxgain_tmp.mp3_tmp t02c02.tmp.wav_maxgain_tmp.mp3
+ sh
LAME version 3.96.1 (http://lame.sourceforge.net/)
Using polyphase lowpass filter, transition band: 18000 Hz - 18581 Hz
Encoding t02c02.tmp.wav_maxgain_tmp.wav to t02c02.tmp.wav_maxgain_tmp.mp3_tmp
Encoding as 48 kHz 160 kbps j-stereo MPEG-1 Layer III (9.6x) qval=2
    Frame          |  CPU time/estim | REAL time/estim | play/CPU |    ETA 
 16015/16018 (100%)|    0:22/    0:22|    0:22/    0:22|   17.121x|    0:00 
average: 160.0 kbps   LR: 2551 (15.93%)   MS: 13467 (84.07%)

Writing LAME Tag...done
ReplayGain: -9.1dB
WARNING: clipping occurs at the current gain. Set your decoder to decrease
         the  gain  by  at least 1.3dB or encode again using --scale <arg>
         (For   a   suggestion  on  the  optimal  value  of  <arg>  encode
         with  --scale 1  first)



-- 
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Martin Cracauer <cracauer at cons.org>   http://www.cons.org/cracauer/


More information about the Linux-audio-user mailing list