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

mem*_*ons 8 iphone core-audio avaudiorecorder decibel

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

luc*_*ius 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.

  • 究竟什么是"20"在这里? (12认同)

小智 5

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

您可以使用他们的内联函数来"动态"计算值

inline double DbToAmp(double inDb);
Run Code Online (Sandbox Code Playgroud)

要么

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

float ValueAt(float inDecibels);
Run Code Online (Sandbox Code Playgroud)

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