我正在尝试使用 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。
我检查了这个这个链接 http://www.physicsclassroom.com/class/sound/u11l2b.cfm我在那里看到的表格表明:
吸尘器 - 80dB
大型管弦乐队 - 98dB
随身听最大音量 - 100dB
摇滚音乐会前排 - 110dB
现在,尽管我的办公室可能看起来很吵,但它并不靠近最大音量的随身听。
我应该在这里做些什么来获得正确的读数吗?看来我的 iPhone 麦克风非常灵敏。如果它有什么不同的话,那就是 iPhone4S。
忘记我之前的回答了。我找到了一个更好的解决方案(如果我错了,请纠正我)。我认为我们都想要实现的是分贝 SPL,但averagePowerChannel 方法为我们提供了麦克风的输出电压。分贝 SPL 是表示比率的对数单位。我们需要将该输出转换为声压级分贝,这并不容易,因为为此您需要参考值。换句话说,您需要 DB SPL 值以及相应的电压值。您还可以尝试通过将结果与 decibel Ultra 等应用程序进行比较来估计它们。开门见山:你需要的公式如下:
SPL = 20 * log10(referenceLevel * powf(10, (averagePowerForChannel/20)) * range) + offset;
您可以将referenceLevel 设置为5。这在我的iPhone 上给出了良好的结果。 AveragePowerForChannel 是从方法averagePowerForChannel 中获得的值:方法和范围表示范围的上限。我将其设置为 160。最后,offset 是一个偏移量,您可以添加该偏移量以进入您想要的区域。我这里加了50。
不过,如果有人对此有更好的解决方案。这会很棒!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)