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 */