如何以正确的比例从iOS AVAudioRecorder中读取deciBels?

时间:2012-09-30 14:56:44

标签: iphone audio avaudiorecorder decibel

我正在尝试使用AVAudioRecorder在我的iOS应用中获取噪音级别。

我正在使用的代码是:

    [self.recorder updateMeters];
    float decibels = [self.recorder averagePowerForChannel:0]; 
    // 160+db here, to scale it from 0 to 160, not -160 to 0. 
    decibels = 160+decibels; 
    NSLog(@"Decibels: %.3f", decibels);

当手机放在我的桌子上时,我得到的读数大约是90-100dB。

我检查了这个this link,我在那里看到的表显示:

吸尘器 - 80dB
大型管弦乐队 - 98dB
最大级别的随身听 - 100dB
前排摇滚音乐会 - 110dB

现在,无论我的办公室看起来是一个响亮的办公室,它都不是最高级别的随身听。

我是否应该在这里做些什么来获得正确的读数?因为看起来我的iPhone的麦克风非常敏感。它是iPhone4S,如果它有所作为。

1 个答案:

答案 0 :(得分:3)

忘记我之前的回答。我想出了一个更好的解决方案(如果我错了,请纠正我)。我认为我们俩想要达到的是分贝SPL,但是meanPowerChannel方法为我们提供了麦克风的输出电压。分贝SPL是表示比率的对数单位。我们需要以分贝SPL转换输出,这不是那么容易,因为你需要参考值。换句话说,您需要DB SPL值和相应的电压值。您还可以通过将结果与decibel Ultra等应用进行比较来尝试估算它们。直截了当:你需要的公式如下:

SPL = 20 * log10(referenceLevel * powf(10, (averagePowerForChannel/20)) * range) + offset;

你可以将referenceLevel设置为5.这在我的iPhone上给了我很好的结果。 averagePowerForChannel是您从方法averagePowerForChannel获得的值:method和range表示范围的上限。我将其设置为160.最后,offset是您可以添加的偏移量,以进入您想要的区域。我在这里加了50。

但是,如果有人得到更好的解决方案。太棒了!