为HTK添加wav文件采样速率自动转化功能

用HTK处理声音文件分析很好用,可是有时声音文件是重别的地方拿来的,为了和自己期望使用文件采样率一致,经常要手工做声音文件的频率转化,比较麻烦,有没有办法为htk添加一下功能,让其在读入音频数据的时候自动做目标采样率的转化呢?
分析htk的一些相关代码,发现本想法是可行的。
改动点在 HWav.c 文件中。主要是修改 OpenWavInput 和 ConvertWAVData两个方法的实现。
1. 在OpenWavInput函数中,在给 *sampPeriod 赋值那段代码前,先用一个变量记录 原先的采样率。这样就有了从配置参数中读入的目标采样率可原始文件中读入的采样率了。
2. 为ConvertWavData再添加一个原始采样率的参数,在函数Stero转化后,return前做采样率的比较,如果不一致,则做读入数据的采样率转化
3. 在OpenWavInput函数中使用 ConvertWavData 的地方将前面记录的原始采样率传递进去。

到此,HTK在读入Wav文件时就会自动做采样率的转换了,不用担心拿来的wav文件采样率和期望的不一致而手工在外面对音频文件做预处理式的采样速率转化了。 比如更改代码编译后为HTK设置 源的速率为 625 (16khz) 这样无论实际读入的wav文件是8khz,11khz还是44.1khz,在HTK读入文件后正式处理前都会自动转化为16khz的采样率做处理,免去了自己在外部对声音文件采样率的预处理。

Popularity: 3% [?]

Related