如何检测原始声音文件中的声音

时间:2013-10-11 18:51:26

标签: audio portaudio

我正在开发一种可以自动录制和提取语音中每个单词的软件。我使用portaudio库来解决它。但我仍然坚持检测声音:我设置静音的值为零,所以如果有一个零的样本,它必须是声音的起点或终点。但是当我运行它时,该程序创建了许多单词。我认为因为我读取的portaudio的值是原始数据,所以它不能像那样处理。我对吗?我该如何解决?顺便说一下,我用C ++编写代码:D

2 个答案:

答案 0 :(得分:1)

要检测PCM流中是否存在信号,您可以检测到它。正如dprogramz所说,声卡的本底噪声可能并不完美,因此会记录一些噪音信号(即使没有连接麦克风)。

解决方案是使用VOXVAD算法来检测您的语音是否存在。 VOX可能很棘手,因为在大多数消费级电子产品中,本底噪声很低,足以相对于信号对人耳“静音”。这意味着噪声基底和信号之间的幅度差异可能很小。如果您的声卡已打开AGC,这可能会使其更加困难,因为本底噪声可能会移动。话虽如此,VOX可以在消费级设备上成功实施。建立阈值只需要更多的努力。完成时,阈值会在流处于活动状态时定期计算。

如果我这样做,我会实施VAD算法。由于您的目标是检测您的声音,因此无论您使用何种设备,都应提供可靠的结果。

答案 1 :(得分:0)

我不认为这是因为它是一个RAW值。 RAW声音文件是频率和音量信息的比特流。

但是,该值很少(如果有的话)为零。您必须考虑到麦克风产生的少量电噪声。弄清楚麦克风的“空闲”dB(只是在你没有说话时测试水平)。然后,您需要设置静音阈值(低于特定数量样本的某个dB级别)以检测开始/结束。试图检测零值几乎是不可能的。