Я пытаюсь реализовать функцию автоматической записи голоса, аналогичную приложению Talking Tom. Я использую следующий код для чтения ввода с аудиорекордера и анализа буфера:
float totalAbsValue = 0.0f;
short sample = 0;
numberOfReadBytes = audioRecorder.read( audioBuffer, 0, bufferSizeInBytes);
// Analyze Sound.
for( int i=0; i<bufferSizeInBytes; i+=2 )
{
sample = (short)( (audioBuffer[i]) | audioBuffer[i + 1] << 8 );
totalAbsValue += Math.abs( sample ) / (numberOfReadBytes/2);
}
// Analyze temp buffer.
tempFloatBuffer[tempIndex%3] = totalAbsValue;
float temp = 0.0f;
for( int i=0; i<3; ++i )
temp += tempFloatBuffer[i];
Теперь я могу обнаруживать голосовой ввод, исходящий от аудиорекордера, и анализировать аудиобуфер.
Буфер преобразуется в значение с плавающей запятой, и если оно увеличивается на определенную величину, предполагается, что на фоне есть какой-то звук и начинается запись. Но проблема в том, что приложение начинает записывать весь фоновый шум, включая звуки вентилятора/вентилятора переменного тока.
Может ли кто-нибудь помочь мне с анализом буфера для обнаружения только человеческого голоса? Или есть другие альтернативные способы обнаружения человеческого голоса со входа диктофона?
Заранее спасибо,