2

AVAudioRecorder と AVAudioSession を使用しました。これにより、0 (非常に大きな音) から -160 (無音に近い) の範囲のデシベル値が得られます。このアプリでは、iPhone のマイクから受信したリアルタイムのオーディオ測定値の A-rating iedB(A) 曲線をプロットする必要があります。

次の手順を実装しています-

  1. 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
    
  2. 正の dB 値を取得します。 float posdBValue = dbValue+160; たとえば、dbValue=-100 の場合、posdBValue = -110+160 = 50dB

  3. 異なる 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
  4. グラフに dB(A) 値と周波数帯域をプロットします。

質問 1. これは、デシベルから dB(A) 値を見つける正しい方法ですか? 2. FFT を使用することになっていますか? はいの場合、FFT は計算のどこにどのように適合しますか? 3. averagePowerForChannelメソッドから返された単一の dB 値に基づいて、24 オクターブ バンドのすべての中心周波数に対して異なる dB 値を計算する必要がありますか? はいの場合、どのように?4. iPhone コードのソリューション、オープンソース ライブラリ、リファレンスを提案できる人はいますか?

私は完全に途方に暮れています。私は何かを逃していると感じています。助けてください!今のところ、計算とロジックを理解する必要があります。ありがとうございました。

4

1 に答える 1