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

cra*_*mmy 4 iphone formula core-audio avaudioplayer decibel

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

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

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

谢谢

汤姆

inv*_*ame 12

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

double percentage = pow (10, (0.05 * power));
Run Code Online (Sandbox Code Playgroud)

这里power是价值,你从不同的电平表的方法或功能,如AVAudioPlayer的一赠averagePowerForChannel:


Sri*_*tha 7

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

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

decibelValue = 20.0f * log10(linearValue)
Run Code Online (Sandbox Code Playgroud)

注意:日志以 10 为底

假设以百分比形式表示的线性值从 [ 0 (min vol) 到 100 (max vol)] 那么一半体积(50%)的分贝值为

decibelValue = 20.0f * log10(50.0f/100.0f) = -6 dB
Run Code Online (Sandbox Code Playgroud)

完整音量:

decibelValue = 20.0f * log10(100.0f/100.0f) = 0 dB
Run Code Online (Sandbox Code Playgroud)

完全静音:

decibelValue = 20.0f * log10(0/100.0f) = -infinity 
Run Code Online (Sandbox Code Playgroud)

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

LinearValue = pow(10.0f, decibelValue/20.0f)
Run Code Online (Sandbox Code Playgroud)