我有一堆人类阅读简单句子(hello world)作为 wav 文件,如何通过自动识别单词之间的间隙来打破 wav 文件以获取 2 个 wav 文件,每个文件都包含单词(hello 和 world)?不幸的是,我找不到为我做这件事的工具,所以我将编写 C 代码来做到这一点,至于我的理解,wav 文件中的差距应该是低数值,对吗?我知道如何破解文件,我很高兴能找到解决差距识别问题的方法。谢谢!
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 等的输出文件。
我处理此类任务的方法是将 wav 文件分解为每个 0.05 秒的块,计算每个块的 RMS 幅度,并将 RMS 放大器与阈值进行比较。如果录音是在仔细控制的条件下完成的,并且语音音量相对较好地归一化,则阈值可能是静态值,但另一种方法是动态地检查是否存在比前一个块大得多的块。然后,您将超过阈值的块视为单词的开头。
然而,在随意的演讲中,单词之间可能没有太多的停顿。如果我毫不停顿地对你说“helloworld”,你就会很容易理解我的意思。
RMS 幅度定义为各个样本的平方随时间的平均值的平方根。
请参阅this answer about note onset detection(检测WAV文件中音符的开头和结尾与检测WAV文件中口语单词的开头和结尾完全相同)。
但是请注意,如果没有极其复杂(而且还不存在)的人工智能,您为自己设定的任务基本上是不可能的。当一个人在录音中讲话时,单个单词之间通常不会出现与多音节单词中单个音节之间的间隙在数字上有所不同的间隙。