1
私が作成したAudioRecord機能があり、記録された分の平均音量をデシベル単位で取得したいのですが、私はこれを行う方法を理解することはできません。私は、AudioRecordオブジェクトがバッファ配列内に記録されたデータの完全な分を与えているかどうかは分かりません。Android AudioRecord - 1分間平均音量を取得する方法
これまでのコードはありますが、誰かがそれを適応させることができますか?私はそれをオンラインで行う方法を見つけようとしましたが、まだ何も見つかりませんでした。
Runnable mrHandlerRunnable = new Runnable() {
@Override
public void run() {
ar.stop();
short[] buffer = new short[minSize];
Log.d("LEN: " , ""+buffer.length);
ar.read(buffer, 0, minSize);
int max = Integer.MIN_VALUE;
int min = Integer.MAX_VALUE;
Double avg = 0.0;
for (short s : buffer)
{
if (Math.abs(s) > max)
{
max = Math.abs(s);
}
if (Math.abs(s) < min)
{
min = Math.abs(s);
}
avg = avg+Math.abs(s);
}
avg = avg/buffer.length;
ar.startRecording();
}
};
mrHandler.postDelayed(mrHandlerRunnable, 60000);
ありがとうございます!素晴らしい答え。私は推測しているbufferSize = bufferSize * 4;この場合、4秒を要するからでしょうか?私はまた、すべての例がMath.abs(amp)を取る理由を知っていますか? – mino
私が理解したところでは、振幅値は-32768〜32767の間にあるので、 'abs()'はこの目的のために絶対値をとります。デフォルトのアンドロイドの '.getMaxAmplitude()'もこれを行い、絶対値を返します – OBX
答えとアドバイスありがとう! – mino