私はかなり長い間探していましたが、Android のマイクから実際に SPL/db 値を取得する方法を見つけることができませんでした。
私が見つけたいくつかのスレッドや記事で、それについて議論したものは、それを非常に明白なことのように扱っていたので、誰でもできるはずであり、変換アルゴリズムを正しくすることにもっと関心がありました。
誰もこれを行う方法を知っていますか?
私はかなり長い間探していましたが、Android のマイクから実際に SPL/db 値を取得する方法を見つけることができませんでした。
私が見つけたいくつかのスレッドや記事で、それについて議論したものは、それを非常に明白なことのように扱っていたので、誰でもできるはずであり、変換アルゴリズムを正しくすることにもっと関心がありました。
誰もこれを行う方法を知っていますか?
他の関連アプリに取り組んでいて、調査をしているときに、このようなことを調べている人に役立つ情報に出くわしました。
ご覧のとおり、Androidスマートフォンのマイクは、0〜±32,400の値を返します。ほとんどの場合、コンサート、クラブ、機械的なノイズなど、2,000を超えるものは本当に大きな音です。「RelativeSilence」は約30です。ただし、これらの値の意味は相対的なものであり、電話ごとに異なります。隣り合って配置されている複数のデバイスは、マイクが含まれているため、異なる値を返します。値は少し異なる場合もあれば、大きく異なる場合もあります。
私のオフィスでいくつかの異なるAndroid搭載の電話をテストしたところ、同じ状況で一部のデバイスが他のデバイスの10倍の値を返すことがわかりました。これが、「ええ、デシベル値を取得できます。ここにサンプルコードがあります」と言った人がいない理由です。現実的には、信頼できる(そして簡単な)方法がないからです。
あるデバイスにアップロードした場合、たとえば30 dBを得ることができますが、別のデバイスは300dBを返します。明らかに、大規模な耳の保護がなければ、300dBの環境に人間はいないでしょう。値は相対値として取得する必要があります。それらが互いにどのように関係しているか。動的であろうとなかろうと、使用できる値を取得したい場合は、「キャリブレーション」が必須です。あなたから来ることができない確立されたベースラインがなければならず、それはあなたからの価値と比較されなければなりません。たとえば、前に述べたように、相対的な沈黙は約30である必要があります。
電話が比較的無音の環境で456を返す場合は、単純に自分の(30)を自分の(456)で割ると、電話から返される値を調整して、期待する値と一致するようにすることができます。 、およびこれらの値は、ある程度の信頼性のために使用できます。
これは私が過去数ヶ月の間に見つけたものです、私はそれが誰かを助けることを願っています。
最初に自動レベル コントロールを無効にする必要があります。ALC を使用せずにマイクからサンプルを録音する方法を知っているか、どこを調べればよいか知っていると思います。
それ以降は、基本的にはキャリブレーションと対数の大きさがすべてです。基本的に、周波数依存のキャリブレーションで乗算または畳み込みを行い、周波数範囲のすべてまたは一部で 10 * 対数マグニチュードを取得します。
次に、いくつかのキャリブレーション測定を行う必要があります。たとえば、制御された既知のsplのラボソースを周波数掃引し、結果の振幅対周波数を記録します(ゆっくり掃引すると、本質的に振幅対時間と同じになります)。放射対称位置にある優れた実験装置を使用して周波数全体で測定している広帯域擬似インパルス (電気火花、スターター ピストルなど) でヒットするか、最後の手段として、既知の物理的特性を使用します。ソースを使用して SPL を推定し、関心のある周波数全体で十分にフラットであることを願っています。
次に、修正を適用する方法について 2 つの選択肢があります。
1 つのオプションは、伝達関数を反転し、時間領域のインパルス応答を計算してから、それを入力信号とたたみ込むことによってデジタル フィルターとして使用し、周波数平坦性補正を適用することです。次に、単位時間あたりの結果の対数マグニチュードを取得して、広帯域 spl を決定できます。
または、入力データに対して FFT を実行して周波数スペクトルを生成し、それを周波数応答の逆数で乗算して、興味深いビン (の合計) の対数振幅を取得できます。
残念ながら、たとえ同じモデルであっても、デバイス間の大まかな一貫性以上のものを想定する理由はほとんどありません。
The open source app NoiseTube does this, including support for device specific calibration. Source code is available here. If you can access it I strongly recommend reading their article Participatory noise mapping works! An evaluation of participatory sensing as an alternative to standard techniques for environmental monitoring (available for pay).
Some highlights from the source:
Calculating Leq (see LEQ on Wikipedia)
A-weighing (see Weighting filter on Wikipedia)