11

我正在尝试使用 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。

我检查了这个链接,我在那里看到的表格显示:

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

现在,尽管我的办公室看起来很吵,但它不在最大级别的随身听附近。

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

4

1 回答 1

4

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

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

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

不过,如果有人对此有更好的解决方案。那会很好!

于 2012-10-30T09:29:11.747 回答