我正在尝试实现自动录音功能,类似于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];
现在,我能够检测来自录音机的语音输入,并可以分析音频缓冲区。
缓冲区转换为浮点值,如果增加一定量,则假定背景中存在一些声音并开始录制。但问题是应用程序开始录制所有背景噪音,包括风扇/交流管道声音。
有人能帮我分析一下只检测人声的缓冲区吗?或者有没有其他方法可以从录音机输入中检测人声?
先谢谢你,
如果你想有一个干净的录音,你可以
2.过滤后,噪音会减少,你可以使用语音识别API的
API的
过滤越多越好,噪音越少,识别越多,但在过滤时要小心,因为它也可以去除声音和噪音。
另请阅读有关 FFt 的更多信息
人声的快速傅里叶变换
希望这有帮助:)
对于语音检测,尝试ftt算法。
对于噪音,尝试speex库。
语音检测没那么简单。有几种算法,其中一些已发布,例如GSM VAD。有几个开源VAD库可用,这里讨论其中一些
问题内容: 尽管我在此站点上有许多有关音高检测概念的问题……他们都处理了我不熟悉的神奇 FFT 。我正在尝试构建需要实现音高检测的Android应用程序。我绝对不了解用于执行此操作的算法。 它不能 是 硬可以吗?毕竟,Android市场上大约有80亿个吉他调音器应用程序。 有人可以帮忙吗? 问题答案: 快速傅立叶变换将功能从时域更改为频域。因此,而不是在那里是信号,你是从麦克风获取和是信号的时间指
问题内容: 我有200多个MP3文件,我需要使用静音检测来拆分其中的每个文件。我尝试了Audacity和WavePad,但它们没有批处理过程,将它们一一制作很慢。 场景如下: 分割曲目,而静音2秒或更长时间 然后在这些音轨的开头和结尾添加0.5 s并将其另存为.mp3 BitRate 192立体声 标准化卷以确保所有文件的卷和质量相同 我尝试了FFmpeg,但没有成功。 问题答案: 我发现pydu
问题内容: 我正在寻找一种将文件中的音频数据馈送到麦克风的方法,因此,当第三方应用程序(例如 arecord 或Chromium的“按语音搜索”功能)使用麦克风进行音频输入时,它们会从文件中接收音频数据代替。 这是我的情况 :我编写的一个应用程序记录了来自麦克风的音频数据(使用ALSA)并将其保存到文件(audioFile0.raw)中。在将来的某个未知时间点,某些未知的第三方应用程序(例如,我没
问题内容: 之前,我问过有关使用FFT和Complex class获取频率wav音频的 问题, 在那里,我需要从AudioRecord输入->从麦克风计算FFT值,以某种方式设法获得FFT值… 现在,我需要从之前保存的* .wav音频文件中计算FFT值,然后将音频保存到项目中“ res”文件夹中的“ raw”文件夹中 我仍然使用相同的FFT类:http : //www.cs.princeton.e
我有一个叫“土豆音乐”的音乐机器人,它是一个音乐机器人。目前,机器人按照我希望的方式执行命令。但是一旦我停止在本地托管机器人并将其部署在Heroku上,就有一些错误开始出现。 我有一个名为“播放”的命令,每当我执行该命令时,它都应该在语音频道上播放歌曲。命令在命令开头有一个条件,用于检查用户是否已经在语音频道中。但是在我在Heroku上托管了这个机器人之后,一旦我执行命令,它就会一直告诉我我没有连
我的音乐应用程序从外部应用程序启动,使用意向数据作为音乐文件。 我有mp3音频URI,类似这样 file:///storage/emulated/0/Music/Tamil/I(2014)/Ennodu Nee Irundhaal。mp3 如何从媒体获取音频详细信息。标题,媒体。相册,媒体_身份证件