5

我喜欢更新使用 AudioQueue 播放音频文件的现有 iPhone 应用程序。水平(peakPowerForChannel,averagePowerForChannel)是线性的,从 0.0f 到 1.0f。

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

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

谢谢

汤姆

4

3 回答 3

16

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

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

您从各种电平表方法或函数之一获得的值在哪里power,例如 AVAudioPlayer 的averagePowerForChannel:

于 2009-10-03T09:32:31.260 回答
7

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

1. 线性到分贝(对数):

decibelValue = 20.0f * log10(linearValue)

注意:对数以 10 为底

假设百分比形式的线性值范围从 [ 0 (min vol) 到 100 (max vol)] 那么一半音量(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)
于 2016-06-14T11:08:51.543 回答
2

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

我在一个小程序中塑造了他们的计算;看这里

于 2013-04-24T12:58:45.957 回答