11

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);

電話を机の上に置いたときの測定値は、約 90 ~ 100dB です。

このリンクを確認したところ、そこに表示された表は次のことを示しています。

掃除機 - 80dB
大きなオーケストラ - 98dB
最大レベル
のウォークマン - 100dB ロックコンサートの最前列 - 110dB

さて、私のオフィスはうるさいように見えるかもしれませんが、最大レベルのウォークマンの近くではありません.

正しい測定値を得るためにここですべきことはありますか? 私のiPhoneのマイクは非常に敏感なようです。差をつけるならiPhone4Sです。

4

1 に答える 1

4

私の以前の答えを忘れてください。より良い解決策を見つけました(間違っている場合は修正してください)。私たち二人が達成したいのはデシベル SPL だと思いますが、averagePowerChannel メソッドはマイクの出力電圧を提供します。デシベル SPL は、比率を表す対数単位です。その出力をデシベル SPL に変換する必要がありますが、これには基準値が必要なため、簡単ではありません。つまり、DB SPL 値とそれに対応する電圧値が必要です。結果をデシベル ウルトラなどのアプリと比較して推定することもできます。要するに、必要な式は次のとおりです。

SPL = 20 * log10(referenceLevel * powf(10, (averagePowerForChannel/20)) * range) + offset;

referenceLevel を 5 に設定できます。これにより、iPhone で良好な結果が得られます。averagePowerForChannel は、メソッド averagePowerForChannel: メソッドから得られる値であり、範囲は範囲の上限を示します。私はそれを 160 に設定しました。最後に、offset は、必要な領域に入るために追加できるオフセットです。ここに50を追加しました。

それでも、誰かがこれに対するより良い解決策を見つけた場合。それは素晴らしいことだ!

于 2012-10-30T09:29:11.747 に答える