Я пытаюсь рассчитать уровень громкости от микрофона на Android. Я использовал AudioRecord для получения необработанных данных с микрофона, а также выполнил некоторую нормализацию и вычислил децибел после этого. Но результат неправильный. Значения децибел, которые я получил, не были устойчивыми и не могут отражать звук. Например, даже когда я хлопал в ладоши, значение децибела не отражало звук. Как мне изменить код или Что делать, если я хочу рассчитать громкость от микрофона в режиме реального времени? Большое спасибо.Рассчитать уровень громкости от микрофона на андроиде
recorder = new AudioRecord(AudioSource.MIC, iSampleRate, AudioFormat.CHANNEL_IN_MONO, AudioFormat.ENCODING_PCM_16BIT, iAudioBufferSize);
iBufferReadResult = recorder.read(buffer, 0, iAudioBufferSize);
for (int i = 0; i < buffer.length-1; i++)
{
ByteBuffer bb = ByteBuffer.wrap(buffer, i, 2);
int isample = bb.getShort();
double dsample =(double) isample/32768.0;
sum += (dsample*dsample);
double rms = Math.sqrt(sum/(buffer.length*0.5));
double decibel = 20*Math.log10(rms);
sum = 0;
}
}
Цель может быть обнаружить изменение звука Enviroment только на основе громкости. Как мне это сделать? Благодарю. – Foreverniu
Я думаю, что вы проверяете громкость в управлении аудио – DjHacktorReborn
Я пока не работал с микрофоном, но я бы предположил, что ваш расчет всегда дает тот же результат. Предположим, что нет шума, тогда у вас будет много образцов на 50%, что будет 0, если числа действительно подписаны. С другой стороны, когда есть звук, у вас будет много образцов с одинаковой положительной и отрицательной амплитудой, что также добавит до 0. Я бы сказал, что вам нужно принимать только абсолютные значения, например. устранить знак, если вы действительно получаете положительные и отрицательные числа? –