HTK工具HVite代码分析1
初次接触成品类源码,仍有许多问题不甚了解,理解难免存在偏颇。
前阵因为工作原因初学使用HTK工具做语音识别。使用比较粗浅的方法完成了单字的识别效果。现在想自己完成多字识别方法,因此重新关注HVite源码。这也是自己第一次做比较大型的源码分析。希望通过分析成品的代码能够提升自己的代码水平。
HVite大体结构如下:
int main(int argc, char *argv[])
{
//初始化支持模块
if(InitShell(argc,argv,hvite_version,hvite_vc_id)<SUCCESS)
HError(3200,"HVite: InitShell failed");
...
...
InitAdapt(&xfInfo); InitMap();
SetConfParms();
CreateHeap(&modelHeap, "Model heap", MSTAK, 1, 0.0, 100000, 800000 );
CreateHMMSet(&hset,&modelHeap,TRUE);
//指令处理
while (NextArg() == SWITCHARG) {
s = GetSwtArg();
if (strlen(s)!=1)
HError(3219,"HVite: Bad switch %s; must be single letter",s);
switch(s[0]){
case 'a':
...
...
break;
default:
HError(3219,"HVite: Unknown switch %s",s);
}
}
if (NextArg()!=STRINGARG)
HError(3219,"HVite: Dictionary file name expected");
dictFn = GetStrArg();
if (NextArg()!=STRINGARG)
HError(3219,"HVite: HMM list file name expected");
hmmListFn = GetStrArg();
//初始化
Initialise();
//识别处理
/* Process the data */
if (wdNetFn==NULL)
DoAlignment();
else
DoRecognition();
/* Free up and we are done */
HVite代码分析:HTK工具深入理解

本文是关于HTK工具HVite的代码分析第一部分,作者首次接触此类源码,旨在通过分析提升自身代码能力。HVite的大体结构清晰,主要从指令和输入文件入手,解释了如-A、-D、-T等参数的作用,并详细说明了如何处理-H、-w等选项的输入,为后续的HVite主体部分分析做准备。
最低0.47元/天 解锁文章
406

被折叠的 条评论
为什么被折叠?



