ken*_*der 9 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);
Run Code Online (Sandbox Code Playgroud)
当手机放在我的桌子上时,我得到的读数大约为90-100dB.
我检查了这个链接,我在那里看到的表显示:
吸尘器 - 80dB
大型管弦乐队 -
最大级别的98dB 随身听 - 100dB
摇滚音乐会前排 - 110dB
现在,无论我的办公室看起来是一个响亮的办公室,它都不是最高级别的随身听.
我在这里应该做些什么来获得正确的读数?因为看起来我的iPhone的麦克风非常敏感.它是iPhone4S,如果它有所作为.
忘记我之前的回答了。我找到了一个更好的解决方案(如果我错了,请纠正我)。我认为我们都想要实现的是分贝 SPL,但averagePowerChannel 方法为我们提供了麦克风的输出电压。分贝 SPL 是表示比率的对数单位。我们需要将该输出转换为声压级分贝,这并不容易,因为为此您需要参考值。换句话说,您需要 DB SPL 值以及相应的电压值。您还可以尝试通过将结果与 decibel Ultra 等应用程序进行比较来估计它们。开门见山:你需要的公式如下:
SPL = 20 * log10(referenceLevel * powf(10, (averagePowerForChannel/20)) * range) + offset;
Run Code Online (Sandbox Code Playgroud)
您可以将referenceLevel 设置为5。这在我的iPhone 上给出了良好的结果。averagePowerForChannel 是从averagePowerForChannel 方法中获得的值:方法和range 表示范围的上限。我将其设置为 160。最后,offset 是一个偏移量,您可以添加该偏移量以进入您想要的区域。我这里加了50。
不过,如果有人对此有更好的解决方案。这会很棒!