我想更新这是使用AudioQueue用于播放音频文件,现有的iPhone应用程序。 水平(peakPowerForChannel,averagePowerForChannel)是线性的形式0.0F至1.0F。
现在,我喜欢用简单的类AVAudioPlayer它工作得很好,唯一的问题是,现在是在分贝水平,不是线性从-120.0f为0.0f。
有没有人一公式将其转换回为0.0f和1.0F之间的线性值?
谢谢
汤姆
我想更新这是使用AudioQueue用于播放音频文件,现有的iPhone应用程序。 水平(peakPowerForChannel,averagePowerForChannel)是线性的形式0.0F至1.0F。
现在,我喜欢用简单的类AVAudioPlayer它工作得很好,唯一的问题是,现在是在分贝水平,不是线性从-120.0f为0.0f。
有没有人一公式将其转换回为0.0f和1.0F之间的线性值?
谢谢
汤姆
几个例子苹果使用以下公式将分贝转换为线性范围(从0.0到1.0):
double percentage = pow (10, (0.05 * power));
其中, power
是你的各种液位计的方法或功能,如AVAudioPlayer的一赠价值averagePowerForChannel:
的线性和对数值变换后面数学:
1.线性到分贝(对数):
decibelValue = 20.0f * log10(linearValue)
注:日志基地10
假设在从[0(最小体积)至100(最大体积)],则decibelValue 的体积的一半 (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)
苹果使用查找表他们SpeakHere从分贝转换为一个电平表显示的线性值的样本。
我模塑它们在小程序计算; 看到这里 。