9

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

4

2 回答 2

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。

于 2010-03-21T16:10:20.813 回答
5

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

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

inline double DbToAmp(double inDb);

或者

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

float ValueAt(float inDecibels);

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

于 2010-06-19T01:17:06.053 回答