1
我有一個我創建的AudioRecord功能,對於錄製的分鐘,我想獲得以分貝爲單位的平均音量。我無法弄清楚如何做到這一點。我甚至無法確定AudioRecord對象是否在緩衝區數組中記錄了數據的完整分鐘。Android AudioRecord - 如何獲得一分鐘的平均音量
這是我到目前爲止的代碼,有人可以幫我調整它嗎?我試圖找到一種方法在網上做,但我還沒有找到任何東西。
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()'爲此目的取絕對值。默認的Android的'.getMaxAmplitude()'也做到這一點,並返回絕對值 – OBX
謝謝你的答案和建議! – mino