我使用了 AVAudioRecorder 和 AVAudioSession,它们以分贝为单位提供了 0(非常响亮)到 -160(接近静音)范围内的值。在应用程序中,我必须为从 iPhone 麦克风接收的实时音频测量绘制 A 级 iedB(A) 曲线。
我正在执行以下程序 -
从 AVAudioRecorder 获取 dB 值
NSDictionary* recorderSettings = [NSDictionary dictionaryWithObjectsAndKeys: [NSNumber numberWithInt:kAudioFormatAppleIMA4],AVFormatIDKey, [NSNumber numberWithInt:44100],AVSampleRateKey, [NSNumber numberWithInt:1],AVNumberOfChannelsKey, [NSNumber numberWithInt:8],AVLinearPCMBitDepthKey, [NSNumber numberWithBool:NO],AVLinearPCMIsBigEndianKey, [NSNumber numberWithBool:NO],AVLinearPCMIsFloatKey, nil]; float dbValue = [self.recorder averagePowerForChannel:0]; //which returns a dB value in 0 to -160 range
获得一个正的dB值,float posdBValue = dbValue+160; 例如,如果 dbValue=-100,则 posdBValue = -110+160 = 50dB
通过为不同的 1/3 倍频程频带添加 A 加权来计算 dB(A) 值 A 加权值参考 - http://personal.cityu.edu.hk/~bsapplec/single.htm
- 31.5Hz 时的 dB(A) = 50 -39.4 = 10.6;
- 40 Hz 时的 dB(A) = 50 -34.6 = 15.4
- 50 Hz 时的 dB(A) = 50 -30.2 = 19.8
在图表上绘制 dB(A) 值与频率带的关系
问题 1. 这是从分贝中找出 dB(A) 值的正确方法吗?2. 应该使用 FFT 吗?如果是,FFT 在哪里以及如何适合计算?3. 基于从averagePowerForChannel方法返回的单个 dB 值,我是否必须为 24 个倍频程频带中的所有中心频率计算不同的 dB 值?如果是,如何?4. 任何人都可以提出解决方案、开源库、iPhone 代码参考吗?
我完全不知所措。我觉得我错过了一些东西。请帮忙!我现在只需要弄清楚计算和逻辑。谢谢你。