2011-10-20 38 views
2

我有一群人阅读简单句子(你好世界)作为一个wav文件, 我怎样才能打破2个wav文件的wav文件,每个包含词(你好和世界)认识到这些词之间的差距? 不幸的是,我无法找到工具来为我做这件事,所以我会写C代码做到这一点, 至于我的理解,在wav文件中的差距应该是低数值,是正确的? 我知道如何打破文件, 我很高兴为差距识别问题获得方法。 谢谢!C:通过沉默差距分割wav文件

回答

2

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

但是,在临时演讲中,词语之间可能没有太多停顿。如果我毫不停顿地对你说“helloworld”,你可以很容易理解我。

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

+0

那么pasudo代码会是这样吗?
'SAMPLE_SIZE = 0.05;对于(int idxFile = 0; idxFile user648026

+1

无新线:\t \t} \t \t RMS_amplitude = SQUARE(FSUM/SAMPLE_SIZE) \t如果(RMS_amplitude <阈值){ \t \t打印(+ idxFile “差距在字节检测”)在评论中,不可思议的... [链接](http://meta.stackexchange.com/questions/197/how-about-newlines-within-comments) – user648026

+0

样本不是秒。样本不是字节。否则,这是非常粗略的想法。 –

1

请参阅this answer关于音符开始检测(检测WAV文件中音符的开始和结束与检测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等输出文件结束。

+0

./sox in.wav out.wav沉默1 0.1 0%1 0.1 0%:newfile:restart –