iPhone - AVAudioPlayer - 将分贝级别转换为百分比

时间:2009-10-02 22:37:39

标签: iphone core-audio avaudioplayer formula decibel

我想更新使用AudioQueue播放音频文件的现有iPhone应用程序。级别(peakPowerForChannel,averagePowerForChannel)是0.0f到1.0f的线性形式。

现在我喜欢使用更简单的类AVAudioPlayer,它工作正常,唯一的问题是现在以分贝为单位,而不是从-120.0f到0.0f的线性。

有没有人将公式转换回0.0f和1.0f之间的线性值?

由于

汤姆

3 个答案:

答案 0 :(得分:12)

几个Apple示例使用以下公式将分贝转换为线性范围(从0.0到1.0):

double percentage = pow (10, (0.05 * power));

其中power是从各种电平表方法或函数中获得的值,例如AVAudioPlayer的averagePowerForChannel:

答案 1 :(得分:4)

数学背后的线性和对数值转换:

<强> 1。线性到分贝(对数):

decibelValue = 20.0f * log10(linearValue)

注意:日志是基数10

假设百分比形式的线性值范围从[0(最小体积)到100(最大体积)]那么体积的一半(50%)的分贝值

decibelValue = 20.0f * log10(50.0f/100.0f) = -6 dB

全量:

decibelValue = 20.0f * log10(100.0f/100.0f) = 0 dB

完全静音:

decibelValue = 20.0f * log10(0/100.0f) = -infinity 

<强> 2。线性分贝(对数):

LinearValue = pow(10.0f, decibelValue/20.0f)

答案 2 :(得分:2)

Apple在SpeakHere示例中使用了一个查找表,该表从dB转换为电平表上显示的线性值。

我在一个小例程中塑造了他们的计算;见here