为HTK添加MP3输入格式支持

HTK作为一个很好的语音分析工具,但是缺少MP3文件作为输入源的支持,在网上找了一些自己需要的语音素材多是MP3格式的,每一个文件都要做WAV格式转化,既耗时间又耗存储空间。
有没有办法直接让HTK直接支持MP3文件的读入呢?经过分析,发现只要对hwav.c中的OpenWavInput函数做修改就可以完成这个想法。
找到关键点,等空闲再研究处理一下。

Popularity: 5% [?]

Related

发现一个CMU音标和KK音标的对照表

在网上发现一个CMU字典音标和KK音标的对照关系
http://blog.urdada.net/2005/07/17/17/
使用Unicode的字符对应KK音标的表示。留下记录以备日后使用。

Popularity: 3% [?]

Related

HTK内存分配处理中的问题

HTK做了自己的内存管理相关函数(hmem.c),并做了一些基础的内存分配函数,在HTK代码中被使用。
一般分配内存采用 Prt New(MemHeap *x, int size);
一般释放数据采用 Dispose(MemHeap *x, Ptr p);
比如创建向量数组ShortVec CreateShortVec(MemHeap *x,int size);等,数组下标从1开始。
创建矩阵Matrix CreateMatrix(MemHeap *x,int nrows,int ncols);等
释放数据 void FreeShortVec(MemHeap *x, ShortVec v); 等

在实际使用中,当MemHeap为不同类型时,使用的规则也不相同。
HTK内部很多地方使用的是 MSTAK 类型的MemHeap,遵循先进后出的方式使用。

  1.    ShortVec vec0 = CreateShortVec(mem, 20);
  2.    ShortVec vec1 = CreateShortVec(mem, 40);
  3.    …
  4.    FreeShortVec(mem, vec0);
  5.    FreeShortVec(mem, vec1);

这段代码在运行后会不正常,原因在于vec0,vec1释放的顺序不对,按照先进后出原则vec0是先创建的应该在vec1释放后被释放。修改为下面的代码执行正确。

  1.    ShortVec vec0 = CreateShortVec(mem, 20);
  2.    ShortVec vec1 = CreateShortVec(mem, 40);
  3.    …
  4.    FreeShortVec(mem, vec1);
  5.    FreeShortVec(mem, vec0);

Popularity: 3% [?]

Related

为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