У меня есть функция 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()' принимает абсолютное значение для этой цели. По умолчанию '.getMaxAmplitude()' android 'также делает это и возвращает абсолютное значение – OBX
Спасибо за ответ и совет! – mino