AVAudioRecorder と AVAudioSession を使用しました。これにより、0 (非常に大きな音) から -160 (無音に近い) の範囲のデシベル値が得られます。このアプリでは、iPhone のマイクから受信したリアルタイムのオーディオ測定値の A-rating 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 コードのソリューション、オープンソース ライブラリ、リファレンスを提案できる人はいますか?
私は完全に途方に暮れています。私は何かを逃していると感じています。助けてください!今のところ、計算とロジックを理解する必要があります。ありがとうございました。