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