我正在尝试使用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);
当手机坐在我的 table 上时,我得到的读数约为90-100dB。
我检查了这个this link,在那看到的表显示了:
吸尘器-80dB
大型乐团-98dB
随身听最大音量-100dB
摇滚音乐会前排-110dB
现在,但是我的办公室似乎声音很大,它不在最高级别的随身听设备附近。
我在这里应该做些什么以获得正确的读数?好像我的iPhone的麦克风非常灵敏。如果有所作为,那就是iPhone4S。
最佳答案
忘了我以前的答案。我想出了一个更好的解决方案(如果我做错了,请纠正我)。我认为我们两个人都想实现的是分贝SPL,但是averagePowerChannel方法为我们提供了麦克风的输出电压。分贝SPL是指示比率的对数单位。我们需要以分贝SPL转换该输出,这并不容易,因为为此您需要引用值。换句话说,您需要一个DB SPL值以及与之对应的电压值。您还可以尝试通过将结果与分贝Ultra等应用程序进行比较来估计它们。直截了本地:您需要的公式如下:
SPL = 20 * log10(referenceLevel * powf(10, (averagePowerForChannel/20)) * range) + offset;
您可以将referenceLevel设置为5。这在我的iPhone上给我很好的效果。 averagePowerForChannel是您从averagePowerForChannel方法获得的值:method和range表示范围的上限。我将其设置为160。最后,偏移量是可以添加到所需区域的偏移量。我在这里加了50。
不过,如果有人对此有更好的解决方案。这会很棒!