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

iPhone-AVAudioPlayer-将分贝级别转换为百分比,iphone,core-audio,avaudioplayer,formula,decibel,Iphone,Core Audio,Avaudioplayer,Formula,Decibel,我想更新一个现有的iPhone应用程序,它使用AudioQueue播放音频文件。水平(通道峰值功率、通道平均功率)在0.0f至1.0f之间呈线性 现在我喜欢使用更简单的AVAudioPlayer类,它工作得很好,唯一的问题是现在的音量单位是分贝,而不是-120.0f到0.0f之间的线性 有人有公式将其转换回0.0f和1.0f之间的线性值吗 谢谢 Tom几个苹果示例使用以下公式将分贝转换为线性范围(从0.0到1.0): 其中,power是您从各种液位计方法或功能之一获得的值,例如AVAudioPl

我想更新一个现有的iPhone应用程序,它使用AudioQueue播放音频文件。水平(通道峰值功率、通道平均功率)在0.0f至1.0f之间呈线性

现在我喜欢使用更简单的AVAudioPlayer类,它工作得很好,唯一的问题是现在的音量单位是分贝,而不是-120.0f到0.0f之间的线性

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

谢谢


Tom

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


其中,
power
是您从各种液位计方法或功能之一获得的值,例如AVAudioPlayer的
averagePowerForChannel:

Apple在其示例中使用一个查找表,将dB转换为液位计上显示的线性值


我在一个小程序中塑造了他们的计算;请参阅。

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

decibelValue = 20.0f * log10(linearValue)
LinearValue = pow(10.0f, decibelValue/20.0f)
1。线性到分贝(对数):

decibelValue = 20.0f * log10(linearValue)
LinearValue = pow(10.0f, decibelValue/20.0f)
注意:日志以10为基数

假设线性值的百分比范围为[0(最小体积)到100(最大体积)],则一半体积的分贝值为

完整音量:

decibelValue = 20.0f * log10(linearValue)
LinearValue = pow(10.0f, decibelValue/20.0f)
完全静音:

decibelValue = 20.0f * log10(linearValue)
LinearValue = pow(10.0f, decibelValue/20.0f)
2。分贝(对数)到线性:

decibelValue = 20.0f * log10(linearValue)
LinearValue = pow(10.0f, decibelValue/20.0f)

您可能应该在这个问题中添加核心音频标签,以便将来的读者更容易找到它。谢谢。我必须补充一点,你必须使用最小可测量值,而不是零。众所周知,20.log10(xmax/xmin)是动态范围的定义。因此。“听不见”级别实际上是动态范围,而不是-infty.
20.0
的相关性是什么?我对upvote感到非常惊讶,因为这是标准公式dB=20*log(lvl)…@Brethlosze您指的是相反的公式,OP要求dB->百分比。