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

📄 hcopy.c

📁 该压缩包为最新版htk的源代码,htk是现在比较流行的语音处理软件,请有兴趣的朋友下载使用
💻 C
📖 第 1 页 / 共 2 页
字号:
      HError(-1031,"SetLabSeg: label lists 2 to %d will be ignored",             tr->numLists);   if (labName != NULL) {  /* extract labName */      if (auxLab==0) {         p = GetCase(ll,labName,labRep);         st = p->start; en = p->end;      } else {         p = GetAuxCase(ll,labName,labRep,auxLab);         st = p->start; en = AuxLabEndTime(p,auxLab);      }           } else {                /* extract labstidx to labenidx */      if (auxLab==0){         FixLabIdxs(CountLabs(ll));         p = GetLabN(ll,curstidx);         q = GetLabN(ll,curenidx);         st = p->start; en = q->end;      }else{         FixLabIdxs(CountAuxLabs(ll,auxLab));         p = GetAuxLabN(ll,curstidx,auxLab);         q = GetAuxLabN(ll,curenidx,auxLab);         st = p->start; en = AuxLabEndTime(q,auxLab);      }   }     if(trace & T_SEGMENT)      printf("Extracting %8.0f to %8.0f\n",st,en);}/* LoadTransLabs: Load transcription from file */Transcription *LoadTransLabs(char *src){   Transcription *t;      MakeFN(src,labDir,labExt,labFile);   if(trace & T_SEGMENT)      printf("Loading label file %s\n",labFile);   t = LOpen(&lStack,labFile,srcLabFF);   if(chopF && ! stenSet) SetLabSeg(t);   return t;}/* SaveLabs: save trans t to label file corresponding to tgt */void SaveLabs(char *tgt, Transcription *t){   MakeFN(tgt,outLabDir,labExt,labFile);   if(trace & T_SEGMENT)      printf("Saving label file %s\n",labFile);   if (CountLabs(trans->head) == 0)       HError(-1031,"SaveLabs: No labels in transcription %s", labFile);   if(LSave(labFile,t,tgtLabFF)<SUCCESS)      HError(1014,"SaveLabs: Could not save label file %s", labFile);}/* AppendLabs: append label file corresponding to src to trans,   len is time length of this file; accumulate to find offset for   concatenated files */void AppendLabs(Transcription *t, HTime len){   LabList *ll,*transll;   LLink p,q;   int maxAux;   if(trace & T_SEGMENT)      printf("Adding labels, len: %.0f off: %.0f\n",len,off);   if(trans == NULL)       trans = CopyTranscription(&lStack, t);   else      for (ll = t->head,transll = trans->head; ll != NULL;           ll = ll->next,transll = transll->next){         if (transll == NULL)            HError(1031,"AppendLabs: lablist has no target to append to");         maxAux = ll->maxAuxLab;         if (maxAux > transll->maxAuxLab){            HError(-1031,"AppendLabs: truncating num aux labs from %d down to %d",                   maxAux, transll->maxAuxLab);            maxAux = transll->maxAuxLab;         }         for (p=ll->head->succ; p->succ!= NULL; p=p->succ){            q = AddLabel(&lStack,transll,                         p->labid,p->start + off,p->end + off,p->score);            if (maxAux>0)               AddAuxLab(q,maxAux,p->auxLab,p->auxScore);         }      }   /* accumulate length of this file for total offset */   off += len;}/* ChopLabs: Chop trans around stime to etime. end = 0 means to end of file */void ChopLabs(Transcription *t, HTime start, HTime end){   LabList *ll;   LLink p;   HTime del = tgtSampRate;      /* assume ClampStEn has already been called, so start and end are OK */   if(trace & T_SEGMENT)      printf("ChopLab: extracting labels %.0f to %.0f\n",start,end);   for (ll = t->head; ll != NULL; ll = ll->next){      for (p=ll->head->succ; p->succ!= NULL; p=p->succ){         if((p->start < start-del) || ((end > 0.0 ) && (p->end > end+del))) {            DeleteLabel(p);         }         else {            p->start -= start;            p->end -= start;         }      }   }}/* ----------------------- Wave File Handling ------------------------ *//* ChopWave: return wave chopped to st and end. end = 0 means all */Wave ChopWave(Wave srcW, HTime start, HTime end, HTime sampRate){   Wave tgtW;   HTime length;                /* HTime length of file */   long stSamp, endSamp, nSamps;   short *data;      data = GetWaveDirect(srcW,&nSamps);   length = nSamps * sampRate;   if(start >= length)      HError(1030,"ChopWave: Source too short to get data from %.0f",start);    ClampStEn(length,&start,&end);   if(trace & T_SEGMENT)      printf("ChopWave: Extracting data %.0f to %.0f\n",start,end);   stSamp = (long) (start/sampRate);   endSamp = (long) (end/sampRate);   nSamps = endSamp - stSamp;   if(nSamps <= 0)      HError(1030,"ChopWave: Truncation options result in zero-length file");    tgtW = OpenWaveOutput(&cStack,&sampRate,nSamps);   PutWaveSample(tgtW,nSamps,data + stSamp);   CloseWaveInput(srcW);   if(chopF && labF) ChopLabs(tr,start,end);   return(tgtW);}/* IsWave: check config parms to see if target is a waveform */Boolean IsWave(char *srcFile){   FILE *f;   long nSamp,sampP, hdrS;   short sampS,kind;   Boolean isPipe,bSwap,isWave;      isWave = tgtPK == WAVEFORM;   if (tgtPK == ANON){      if ((srcFF == HTK || srcFF == ESIG) && srcFile != NULL){         if ((f=FOpen(srcFile,WaveFilter,&isPipe)) == NULL)            HError(1011,"IsWave: cannot open File %s",srcFile);         switch (srcFF) {         case HTK:            if (!ReadHTKHeader(f,&nSamp,&sampP,&sampS,&kind,&bSwap))               HError(1013, "IsWave: cannot read HTK Header in File %s",                      srcFile);            break;         case ESIG:            if (!ReadEsignalHeader(f, &nSamp, &sampP, &sampS,                                   &kind, &bSwap, &hdrS, isPipe))               HError(1013, "IsWave: cannot read Esignal Header in File %s",                      srcFile);                         break;         }         isWave = kind == WAVEFORM;         FClose(f,isPipe);      } else         isWave = TRUE;   }   return isWave;}/* OpenWaveFile: open source wave file and extract portion if indicated */HTime OpenWaveFile(char *src){   Wave w, cw;   long nSamps;   short *data;   if((w = OpenWaveInput(&iStack,src,srcFF,0,0,&srcSampRate))==NULL)      HError(1013,"OpenWaveFile: OpenWaveInput failed");   srcPK = WAVEFORM;   tgtSampRate = srcSampRate;   cw = (chopF)?ChopWave(w,st,en,srcSampRate) : w;   data = GetWaveDirect(cw,&nSamps);   wv = OpenWaveOutput(&oStack, &srcSampRate, nSamps);   PutWaveSample(wv,nSamps,data);   CloseWaveInput(cw);   return(nSamps*srcSampRate);}/* AppendWave: append the src file to global wave wv */HTime AppendWave(char *src){   Wave w, cw;   HTime period=0.0;   long nSamps;   short *data;   if((w = OpenWaveInput(&iStack,src, srcFF, 0, 0, &period))==NULL)      HError(1013,"AppendWave: OpenWaveInput failed");   if(trace & T_KINDS )      printf("Appending file %s format: %s [WAVEFORM]\n",src,             Format2Str(WaveFormat(w)));      if(period != srcSampRate)      HError(1032,"AppendWave: Input file %s has inconsistent sampling rate",src);   cw = (chopF)? ChopWave(w,st,en,srcSampRate) : w;   data = GetWaveDirect(cw,&nSamps);   PutWaveSample(wv,nSamps,data);   CloseWaveInput(cw);   return(nSamps*period);}/* ----------------------- Parm File Handling ------------------------ *//* ChopParm: return parm chopped to st and end. end = 0 means all */ParmBuf ChopParm(ParmBuf b, HTime start, HTime end, HTime sampRate){     int stObs, endObs, nObs, i;   HTime length;   short swidth[SMAX];   Boolean eSep;   ParmBuf cb;   Observation o;   BufferInfo info;   length =  ObsInBuffer(b) * sampRate;   ClampStEn(length,&start,&end);   if(start >= length)      HError(1030,"ChopParm: Src file too short to get data from %.0f",start);   if(trace & T_SEGMENT)      printf("ChopParm: Extracting segment %.0f to %.0f\n",start,end);   stObs = (int) (start/sampRate);   endObs = (int) (end/sampRate);   nObs = endObs -stObs;   if(nObs <= 0)      HError(1030,"ChopParm: Truncation options result in zero-length file");   GetBufferInfo(b,&info);   ZeroStreamWidths(swidth0,swidth);   SetStreamWidths(tgtPK,info.tgtVecSize,swidth,&eSep);   o = MakeObservation(&cStack, swidth, info.tgtPK, saveAsVQ, eSep);   if (saveAsVQ){      if (info.tgtPK&HASNULLE){         info.tgtPK=DISCRETE+HASNULLE;      }else{         info.tgtPK=DISCRETE;      }   }   cb =  EmptyBuffer(&cStack, nObs, o, info);   for (i=stObs; i < endObs; i++){      ReadAsTable(b, i, &o);      AddToBuffer(cb, o);   }   CloseBuffer(b);   if(chopF && labF) ChopLabs(tr,start,end);   return(cb);}/* AppendParm: append the src file to current Buffer pb. Return appended len */HTime AppendParm(char *src){     int i;   char bf1[MAXSTRLEN];    char bf2[MAXSTRLEN];    short swidth[SMAX];   Boolean eSep;   ParmBuf b, cb;   Observation o;   BufferInfo info;   if((b =  OpenBuffer(&iStack,src,0,srcFF,TRI_UNDEF,TRI_UNDEF))==NULL)      HError(1050,"AppendParm: Config parameters invalid");   GetBufferInfo(b,&info);   if(trace & T_KINDS ){      printf("Appending file %s format: %s [%s]->[%s]\n",src,             Format2Str(info.srcFF), ParmKind2Str(info.srcPK,bf1),             ParmKind2Str(info.tgtPK,bf2));   }   if  (tgtSampRate != info.tgtSampRate)      HError(1032,"AppendParm: Input file %s has inconsistent sample rate",src);   if ( BaseParmKind(tgtPK) != BaseParmKind(info.tgtPK))      HError(1032,"AppendParm: Input file %s has inconsistent tgt format",src);   cb = (chopF)?ChopParm(b,st,en,info.tgtSampRate) : b;   ZeroStreamWidths(swidth0,swidth);   SetStreamWidths(info.tgtPK,info.tgtVecSize,swidth,&eSep);   o = MakeObservation(&iStack, swidth, info.tgtPK, saveAsVQ, eSep);   for (i=0; i < ObsInBuffer(cb); i++){      ReadAsTable(cb, i, &o);      AddToBuffer(pb, o);   }   CloseBuffer(cb);   return(i*info.tgtSampRate);}/* OpenParmFile: open source parm file and return length */HTime OpenParmFile(char *src){   int i;   ParmBuf b, cb;   short swidth[SMAX];   Boolean eSep;   Observation o;   BufferInfo info;   if((b =  OpenBuffer(&iStack,src,0,srcFF,TRI_UNDEF,TRI_UNDEF))==NULL)      HError(1050,"OpenParmFile: Config parameters invalid");   GetBufferInfo(b,&info);   srcSampRate = info.srcSampRate;   tgtSampRate = info.tgtSampRate;   srcPK = info.srcPK; tgtPK = info.tgtPK;   cb = chopF?ChopParm(b,st,en,info.tgtSampRate):b;   ZeroStreamWidths(swidth0,swidth);   SetStreamWidths(info.tgtPK,info.tgtVecSize,swidth,&eSep);   o = MakeObservation(&oStack, swidth, info.tgtPK, saveAsVQ, eSep);   if (saveAsVQ){      if (info.tgtPK&HASNULLE){         info.tgtPK=DISCRETE+HASNULLE;      }else{         info.tgtPK=DISCRETE;      }   }   pb =  EmptyBuffer(&oStack, ObsInBuffer(cb), o, info);   for(i=0; i < ObsInBuffer(cb); i++){      ReadAsTable(cb, i, &o);      AddToBuffer(pb, o);   }   CloseBuffer(cb);   if( info.nSamples > 0 )      return(info.nSamples*srcSampRate);   else      return(ObsInBuffer(pb)*info.tgtSampRate);}/* --------------------- Speech File Handling ---------------------- *//* OpenSpeechFile: open waveform or parm file */void OpenSpeechFile(char *s){   HTime len;   char buf[MAXSTRLEN];      if (labF) tr = LoadTransLabs(s);      if(IsWave(s))        len = OpenWaveFile(s);   else        len = OpenParmFile(s);   if(labF) AppendLabs(tr,len);   if (trace & T_TOP) AppendTrace(s);   if (tgtPK == ANON) tgtPK = srcPK;         if(trace & T_KINDS){      printf("Source file format: %s [%s]\n",             Format2Str(srcFF), ParmKind2Str(srcPK,buf));      printf("Target file format: %s [%s]\n",             Format2Str(tgtFF), ParmKind2Str(tgtPK,buf));      printf("Source rate: %.0f Target rate: %.0f \n",             srcSampRate,tgtSampRate);   }}/* AppendSpeechFile: open waveform or parm file */void AppendSpeechFile(char *s){   HTime len;      if (labF) tr = LoadTransLabs(s);   if(tgtPK == WAVEFORM)      len = AppendWave(s);   else      len = AppendParm(s);   if(labF){      AppendLabs(tr,len);   }   if (trace & T_TOP) {       AppendTrace("+"); AppendTrace(s);   }}/* PutTargetFile: close and store waveform or parm file */void PutTargetFile(char *s){   if(tgtPK == WAVEFORM) {      if(CloseWaveOutput(wv,tgtFF,s)<SUCCESS)         HError(1014,"PutTargetFile: Could not save waveform file %s", s);   }   else {      if(SaveBuffer(pb,s,tgtFF)<SUCCESS)         HError(1014,"PutTargetFile: Could not save parm file %s", s );      CloseBuffer(pb);   }   if (trace & T_TOP){      AppendTrace("->"); AppendTrace(s);      PrintTrace();           ResetHeap(&tStack);      trList.str = NULL;   }   if(trans != NULL)      SaveLabs(s,trans);}/* ----------------------------------------------------------- *//*                      END:  HCopy.c                          *//* ----------------------------------------------------------- */

⌨️ 快捷键说明

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