我想更新使用AudioQueue播放音频文件的现有iPhone应用程序。级别(peakPowerForChannel,averagePowerForChannel)是0.0f到1.0f的线性形式。
现在我喜欢使用更简单的类AVAudioPlayer,它工作正常,唯一的问题是现在以分贝为单位,而不是从-120.0f到0.0f的线性。
有没有人将公式转换回0.0f和1.0f之间的线性值?
由于
汤姆
答案 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)