C:通过沉默间隙拆分wav文件

时间:2011-10-20 21:01:21

标签: c wav break gaps-in-data

我有一堆人类阅读简单句子(hello world)作为wav文件, 如何通过自动识别单词之间的差距来打破2个wav文件的wav文件,每个文件包含单词(hello和world)? 不幸的是我无法找到工具来为我做,所以我会编写C代码来做到这一点, 至于我的不足之处,wav文件中的间隙应该是低数值,这是正确的吗? 我知道如何打破文件, 我很乐意接受差距识别问题。 谢谢!

3 个答案:

答案 0 :(得分:3)

http://digitalcardboard.com/blog/2009/08/25/the-sox-of-silence/

我确信这是您需要的链接。

 sox in.wav out.wav silence 1 0.5 1% 1 5.0 1% : newfile : restart

SoX会在检测到5秒或更长时间的静音时分割音频。您将得到名为out001.wav,out002.wav等的输出文件。

答案 1 :(得分:2)

我接近这种任务的方法是将wav文件分成例如0.05秒的块,计算每个块的RMS幅度,并将RMS放大器与阈值进行比较。如果在精心控制的条件下完成记录,并且语音音量相对良好地标准化,则阈值可以是静态值,但另一种方法是动态地检查比前一个块大得多的块。然后,您可以将超阈值块视为单词的开头。

但是,在随意的演讲中,单词之间可能没有多少停顿。如果我不停地对你说“helloworld”,你就可以轻松地理解我。

RMS振幅定义为各个样本的平方随时间的平方根。

答案 2 :(得分:1)

请参阅this answer关于音符开始检测(检测WAV文件中音符的开头和结尾与检测WAV文件中说出的单词的开头和结尾完全相同的问题)。

但请注意,如果没有极其复杂(但尚未存在)的人工智能,您自己设定的任务基本上是不可能的。当一个人在录音中说话时,在单个词之间通常没有间隙,这些词在数字上与多音节词中单个音节之间的间隙有任何不同。