⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 hcompv.c

📁 Hidden Markov Toolkit (HTK) 3.2.1 HTK is a toolkit for use in research into automatic speech recogn
💻 C
📖 第 1 页 / 共 3 页
字号:
   Boolean tag = FALSE;   p = sal;   while (p != NULL){      if (strcmp(p->sa->SpkrName,sa->SpkrName)==0){         for (i=1;i<=vSize;i++){            p->sa->meanSum[i] += sa->meanSum[i];            p->sa->squareSum[i] += sa->squareSum[i];         }         p->sa->NumFrame += sa->NumFrame;         tag = TRUE;         break;      }      p = p->nextSpkr;   }   if (tag == FALSE){      sal = AppendSpkrAccList(sal,sa);   }   return sal;}/* Compute Mean and Var */void UpdateMeanVar(SpkrAccListItem *sal){   int i;   SpkrAccListItem *p;     p = sal;   while (p != NULL){      for (i=1;i<=vSize;i++){         p->sa->meanSum[i] /= ((float)(p->sa->NumFrame));      }      for (i=1;i<=vSize;i++){         p->sa->squareSum[i] /= ((float)(p->sa->NumFrame));         p->sa->squareSum[i] -= (p->sa->meanSum[i])*(p->sa->meanSum[i]);      }      p = p->nextSpkr;   }  }/* Report output type NumFrame/cms/cvn */void ReportOutput(){   if (strcmp(oflags,"m")==0){      fprintf(stdout,"\n  HCompV: Comptuting side based cepstral mean ......\n\n");   }   else if (strcmp(oflags,"v")==0){      fprintf(stdout,"\n  HCompV: Computing side based cepstral variance normaliser ......\n\n");   }   else if (strcmp(oflags,"mv")==0){      fprintf(stdout,"\n  HCompV: Comptuting side based cepstral mean & variance normaliser ......\n\n");   }   else if (strcmp(oflags,"nv")==0){      fprintf(stdout,"\n  HCompV: Comptuting side based frame number & variance normaliser ......\n\n");   }   else if (strcmp(oflags,"nmv")==0){      fprintf(stdout,"\n  HCompV: Comptuting side based frame number & cepstral mean & variance normaliser ......\n\n");   }   else {      fprintf(stdout,"\n  HCompV: ReportOutput: Unrecognisable output flag setting: %s\n",oflags);      fflush(stdout);      HError(2019,"HCompV: ReportOutput: Unrecognisable output flag setting: %s\n",oflags);   }   fflush(stdout);}/* Export number of frames, mean, var to a given directory */void ExportNMV(SpkrAccListItem *sal, char *OutDirName, char *tgtPKStr) {   FILE *oFile;   Boolean isPipe;   char oFileName[MAXSTRLEN];   char pathBuffer1[MAXSTRLEN];   char pathBuffer2[MAXSTRLEN];   SpkrAccListItem *p;   int i;   p = sal;   while(p != NULL){      /* create output file name for current spkr index */          if ( pathPattern[0] != '\0'){         if ( MaskMatch(pathPattern,pathBuffer1,p->sa->SpkrName) != TRUE ){            HError(2039,"HCompV: ExportNMV: path pattern matching failure on speaker: %s\n",p->sa->SpkrName);         }         MakeFN(pathBuffer1,OutDirName,NULL,pathBuffer2);          MakeFN(p->sa->SpkrName,pathBuffer2,NULL,oFileName);      }      else         MakeFN(p->sa->SpkrName,OutDirName,NULL,oFileName);      /* open and write */      oFile = FOpen(oFileName,NoOFilter,&isPipe);      if (oFile == NULL){         HError(2011,"HCompV: ExportNMV: output file creation error %s",oFileName);      }          /* write header */      fprintf(oFile,"<CEPSNORM> <%s>",tgtPKStr);          /* write number frames */      if (strchr(oflags,'n')){         fprintf(oFile,"\n<NFRAMES> %d",p->sa->NumFrame);      }      /* write mean */      if (strchr(oflags,'m')){         fprintf(oFile,"\n<MEAN> %d\n",vSize);         for (i=1;i<=vSize;i++){            fprintf(oFile," %e",(p->sa->meanSum[i]));         }      }      /* write variance */      if (strchr(oflags,'v')){            fprintf(oFile,"\n<VARIANCE> %d\n",vSize);         for (i=1;i<=vSize;i++){            fprintf(oFile," %e",(p->sa->squareSum[i]));         }      }      fprintf(oFile,"\n");      FClose(oFile,isPipe);      p = p->nextSpkr;   }}/* main func */int main(int argc, char *argv[]){   char *datafn, *s;   void Initialise(void);   void LoadFile(char *fn);   void SetCovs(void);   void PutVFloor(void);   void SaveModel(char *outfn);   SpkrAcc *sa = NULL;   if(InitShell(argc,argv,hcompv_version,hcompv_vc_id)<SUCCESS)      HError(2000,"HCompV: InitShell failed");   InitMem();   InitLabel();   InitMath();  InitSigP();   InitWave();  InitAudio();   InitVQ();    InitModel();   if(InitParm()<SUCCESS)        HError(2000,"HCompV: InitParm failed");   if (!InfoPrinted() && NumArgs() == 0)      ReportUsage();   if (NumArgs() == 0) Exit(0);   SetConfParms();   CreateHMMSet(&hset,&gstack,FALSE);   pathPattern[0]='\0';   while (NextArg() == SWITCHARG) {      s = GetSwtArg();      if (strlen(s)!=1)          HError(2019,"HCompV: Bad switch %s; must be single letter",s);      switch(s[0]){      case 'f':         if (NextArg() != FLOATARG)            HError(2019,"HCompV: Variance floor scale expected");         vFloorScale = GetChkedFlt(0.0,100.0,s);         break;      case 'l':         if (NextArg() != STRINGARG)            HError(2019,"HCompV: Segment label expected");         segLab = GetStrArg();         break;      case 'm':         meanUpdate = TRUE;         break;      case 'o':         outfn = GetStrArg();         break;           case 'v':         if (NextArg() != FLOATARG)            HError(2019,"HCompV: Minimum variance level expected");         minVar = GetChkedFlt(0.0,100.0,s);         break;      case 'k':         if (NextArg() != STRINGARG)            HError(2019,"HCompV: speaker pattern expected");         strcpy(spPattern,GetStrArg());         if (strchr(spPattern,'%')==NULL)            HError(2019,"HCompV: Speaker mask invalid");         break;      case 'c':         if (NextArg() != STRINGARG)            HError(2019,"HCompV: CMV output dir expected");         strcpy(cmDir,GetStrArg());         DoCMV = TRUE;         break;      case 'p':         if (NextArg() != STRINGARG)            HError(2019,"HCompV: path pattern expected");         strcpy(pathPattern,GetStrArg());         if (strchr(pathPattern,'%')==NULL)            HError(2019,"HCompV: Path mask invalid");         break;      case 'q':         if (NextArg() != STRINGARG)            HError(2019,"HCompV: output flags (nmv)");         strcpy(oflags,GetStrArg());         break;      case 'B':         saveBinary = TRUE;         break;      case 'F':         if (NextArg() != STRINGARG)            HError(2019,"HCompV: Data File format expected");         if((dff = Str2Format(GetStrArg())) == ALIEN)            HError(-2089,"HCompV: Warning ALIEN Data file format set");         break;      case 'G':         if (NextArg() != STRINGARG)            HError(2019,"HCompV: Label File format expected");         if((lff = Str2Format(GetStrArg())) == ALIEN)            HError(-2089,"HCompV: Warning ALIEN Label file format set");         break;      case 'H':         if (NextArg() != STRINGARG)            HError(2019,"HCompV: HMM macro file name expected");         AddMMF(&hset,GetStrArg());         break;      case 'I':         if (NextArg() != STRINGARG)            HError(2019,"HCompV: MLF file name expected");         LoadMasterFile(GetStrArg());         break;      case 'L':         if (NextArg()!=STRINGARG)            HError(2019,"HCompV: Label file directory expected");         labDir = GetStrArg();         break;      case 'M':         if (NextArg()!=STRINGARG)            HError(2019,"HCompV: Output macro file directory expected");         outDir = GetStrArg();         break;      case 'T':         if (NextArg() != INTARG)            HError(2019,"HCompV: Trace value expected");         trace = GetChkedInt(0,077,s);          break;      case 'X':         if (NextArg()!=STRINGARG)            HError(2019,"HCompV: Label file extension expected");         labExt = GetStrArg();         break;      default:         HError(2019,"HCompV: Unknown switch %s",s);      }   }   /* if not doing CMV, do standard HCompV */   if (DoCMV == FALSE){      if (NextArg()!=STRINGARG)         HError(2019,"HCompV: Source HMM file name expected");      hmmfn = GetStrArg();      Initialise();      do {         if (NextArg()!=STRINGARG)            HError(2019,"HCompV: Training data file name expected");         datafn = GetStrArg();         LoadFile(datafn);      } while (NumArgs()>0);      SetCovs();      FixGConsts(hmmLink);      SaveModel(outfn);         if (trace&T_TOP)         printf("Output written to directory %s\n",(outDir==NULL)?"./":outDir);      if (vFloorScale>0.0)         PutVFloor();   }   else {      /* report export data type */      ReportOutput();      /* init input buffer mem heap */      CreateHeap(&iStack,"BufferIn",MSTAK,1,0.5,100000,5000000);      do {         if (NextArg()!=STRINGARG){            HError(2019,"HCompV: Training data file name expected");         }         datafn = GetStrArg();                /* accumulate stats for current utterance file and update speaker list */         sa = AccGenUtt(spPattern,datafn,sa);         salist = UpdateSpkrAccList(salist,sa);         /* reset for next utterance */         ClrSpkrAcc(sa);      } while (NumArgs()>0);      /* compute the means and variances for each speaker */      UpdateMeanVar(salist);      /* export NMV for each speaker */      ExportNMV(salist,cmDir,TargetPKStr);   }   Exit(0);   return (0);          /* never reached -- make compiler happy */}/* ----------------------------------------------------------- *//*                      END:  HCompV.c                         *//* ----------------------------------------------------------- */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -