iPhone SDK:AVAudioRecorder计量 - 如何将peakPowerForChannel从分贝变为百分比?

时间:2010-03-17 19:44:02

标签: iphone core-audio avaudiorecorder decibel

iPhone SDK中的AVAudioRecorder可用于获取通道的峰值功率和平均功率,单位为分贝。范围介于0db到160db之间。用于将其转换为0-10之间或可用于音频电平表的类似值的计算是什么?

2 个答案:

答案 0 :(得分:19)

范围从-160 dB到0 dB。您可能希望将其显示在-90 dB至0 dB的仪表中。将其显示为分贝实际上比作为线性音频电平更有用,因为分贝是对数刻度,这意味着它更接近于我们感知声音的声音大小。

也就是说,您可以使用它将分贝转换为线性:

linear = pow (10, decibels / 20);

反之亦然:

decibels = log10 (linear) * 20;

上述分贝的范围为负无穷大为零,线性为0.0至1.0。当线性值为0.0时,即-inf dB; 1.0处的线性为0 dB。

答案 1 :(得分:5)

Apple还实现了dB到线性幅度转换类MeterTable.cpp和MeterTable.h 在SpeakHere应用程序示例中查找它。

您可以使用他们的内联函数来计算“即时”值

inline double DbToAmp(double inDb);

OR

创建MeterTable实例以使用预先计算的查找表。这会将转换值存储在内存中,以便您的应用程序可以减少计算次数。

float ValueAt(float inDecibels);

注意:如果您同时进行了许多其他计算,或者您需要非常快速的处理,则可能需要查找表。