HTK工具HVite代码分析1

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

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

   
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值