从音频文件输入中检测人声

Tim*_*son 28 android android-audiorecord

我正在尝试实现自动录音功能,类似于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];
Run Code Online (Sandbox Code Playgroud)

现在我能够检测来自录音机的语音输入,我可以分析音频缓冲区.

缓冲区被转换为浮点值,如果它增加一定量,则假设背景中有一些声音并开始录制.但问题是该应用程序开始记录所有背景噪音,包括风扇/交流管声音.

任何人都可以帮我分析缓冲区来检测人声吗?或者还有其他方法可以从录音机输入中检测人声吗?

提前致谢,

msh*_*msh 9

语音检测并不那么简单.有几种算法,其中一些是公布的,例如GSM VAD.有几个开源VAD库可用,其中一些在这里讨论


Fai*_*mon 1

处理输入的方法是使用专门的库来消除噪音。

例如,http://audacity.sourceforge.net可以消除噪音。

只要您已经描述了噪声的主要类型,您就应该只剩下语音了。

在从用户捕获之前以及用户结束捕获之后收集采样数据是值得的,因为这将提供当时环境中的噪声样本。如果每个用户面临独特的背景噪音挑战,这非常有用。

  • audacity 不是 Android 库。 (6认同)