iPhone SDK: AVAudioRecorder metering -- how to change peakPowerForChannel from decibel into percentage?

memmons picture memmons · Mar 17, 2010 · Viewed 8.4k times · Source

The AVAudioRecorder in the iPhone SDK can be used to get the peak and average power for a channel, in decibels. The range is between 0db to 160db. What is the calculation used to convert this into a scale between 0 - 10 or something similar that can be used for an audio level meter?

Answer

lucius picture lucius · Mar 21, 2010

The range is from -160 dB to 0 dB. You probably want to display it in a meter that goes from -90 dB to 0 dB. Displaying it as decibels is actually more useful than as a linear audio level, because the decibels are a logarithmic scale, which means that it more closely approximates how loud we perceive a sound.

That said, you can use this to convert from decibels to linear:

linear = pow (10, decibels / 20);

and the reverse:

decibels = log10 (linear) * 20;

The range for the above decibels is negative infinity to zero, and for linear is 0.0 to 1.0. When the linear value is 0.0, that is -inf dB; linear at 1.0 is 0 dB.