この関数の戻り値は、オーディオの振幅を表す 0 から 32767 までの整数でなければなりません。
ただし、テスト後、非常に小さな音声でも最大値 (32767) に到達するのは非常に簡単です。たとえば、赤ちゃんの泣き声は (32767) の振幅を出力します。しかし、少しの声でも (32767) 振幅が出力されます。
この関数の戻り値をどのように管理すればよいですか?
ご協力ありがとうございました。
この関数の戻り値は、オーディオの振幅を表す 0 から 32767 までの整数でなければなりません。
ただし、テスト後、非常に小さな音声でも最大値 (32767) に到達するのは非常に簡単です。たとえば、赤ちゃんの泣き声は (32767) の振幅を出力します。しかし、少しの声でも (32767) 振幅が出力されます。
この関数の戻り値をどのように管理すればよいですか?
ご協力ありがとうございました。
センサー/マイク/デコーダーが 0 から 100 の範囲で応答するとすると、 0 は 0 にマップされ、 100 は 32767 にマップされます。
ScaleConstant = 32767/100
50 の出力の場合:
value = 50*ScaleConstant
お使いのデバイスは音に敏感なようです。私はこのコードをAndroidで以前に問題なく実装していました。別のデバイスでテストして、問題が解決しないかどうか、またはコードに問題があるかどうかを確認することをお勧めします。
getMaxAmplitude() 関数は、0 から +32767 までの値を返します。これは、音圧の尺度としての騒音の大きさの推定値です。おおよその値を dB で取得するには、android で次のコードを使用できます。これは、数式を直接解釈したものです。
20 * Math.log10(mediaRecorderObject.getMaxAmplitude())
これにより、おおよその dB 値が返されます。
私がお勧めするもう 1 つのことは、電話でアプリケーションを調整することです。アプリケーションが起動する前に、サイレント環境で録音を行うことができます。そのため、2 つの異なる電話で実行されているアプリケーションがサイレント環境での録音に対して 4000 と 6000 の値を示している場合は、アプリケーションに適した倍率を追加できます。