Я пытаюсь реализовать автоматическую функцию записи голоса, аналогичную приложению 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];
Теперь я могу обнаруживать входной сигнал, поступающий от аудиомагнитофона, и я могу анализировать звуковой буфер.
Буфер преобразуется в значение с плавающей точкой, и если он увеличивается на определенную величину, предполагается, что в фоновом режиме есть некоторый звук, и запись начинается. Но проблема в том, что приложение начинает записывать все фоновые шумы, включая звуки вентилятора /AC.
Может ли кто-нибудь помочь мне с анализом буфера для обнаружения человеческого голоса? Или есть ли другие альтернативные способы обнаружения человеческого голоса на входе аудиомагнитофона?
Спасибо заранее,