2

この関数の戻り値は、オーディオの振幅を表す 0 から 32767 までの整数でなければなりません。

ただし、テスト後、非常に小さな音声でも最大値 (32767) に到達するのは非常に簡単です。たとえば、赤ちゃんの泣き声は (32767) の振幅を出力します。しかし、少しの声でも (32767) 振幅が出力されます。

この関数の戻り値をどのように管理すればよいですか?

ご協力ありがとうございました。

4

2 に答える 2

0

センサー/マイク/デコーダーが 0 から 100 の範囲で応答するとすると、 0 は 0 にマップされ、 100 は 32767 にマップされます。

ScaleConstant = 32767/100 

50 の出力の場合:

value = 50*ScaleConstant
于 2013-02-08T07:54:04.470 に答える
0

お使いのデバイスは音に敏感なようです。私はこのコードをAndroidで以前に問題なく実装していました。別のデバイスでテストして、問題が解決しないかどうか、またはコードに問題があるかどうかを確認することをお勧めします。

getMaxAmplitude() 関数は、0 から +32767 までの値を返します。これは、音圧の尺度としての騒音の大きさの推定値です。おおよその値を dB で取得するには、android で次のコードを使用できます。これは、数式を直接解釈したものです。

20 * Math.log10(mediaRecorderObject.getMaxAmplitude())

これにより、おおよその dB 値が返されます。

私がお勧めするもう 1 つのことは、電話でアプリケーションを調整することです。アプリケーションが起動する前に、サイレント環境で録音を行うことができます。そのため、2 つの異なる電話で実行されているアプリケーションがサイレント環境での録音に対して 4000 と 6000 の値を示している場合は、アプリケーションに適した倍率を追加できます。

于 2016-06-08T21:10:31.897 に答える