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

📄 hslab.c

📁 Hidden Markov Toolkit (HTK) 3.2.1 HTK is a toolkit for use in research into automatic speech recogn
💻 C
📖 第 1 页 / 共 5 页
字号:
   case DELETE_OP:      undo.lab = *p;      break;   case CHANGE_OP:      undo.ptr = p;      undo.lab = *p;      break;   default:      break;   }   undo.op = op; undo.lset = labSet;   undoEmpty = FALSE;}/* UndoOp: use the information stored in undo to undo the last operation */void UndoOp(void){   Label p;   char sbuf[256];   if (undoEmpty)      return;   if (undo.lset!=labSet) {      sprintf(sbuf, "Undo operation applies to label set [%d]", undo.lset);      PrintMsg(&io_Win, sbuf);      return;   }   switch (undo.op) {   case CREATE_OP:      undo.op = DELETE_OP; undo.lab = *(undo.ptr);      DeleteLabObj(llist, undo.ptr);      break;   case DELETE_OP:      undo.op = CREATE_OP;       undo.ptr = CreateLabObj(llist, undo.lab.labid, (long) undo.lab.start, (long) undo.lab.end);      break;   case CHANGE_OP:      p = *(undo.ptr);      *(undo.ptr) = undo.lab;      undo.lab = p;      break;   default:      break;   }   labsModified = TRUE;   PlotLabWin();}/* ---------------------------- Button Commands -------------------------- */#define FIXLABSTR sprintf(levStr, "Set [%d]", labSet);/* DoZoomOut: zoom out of the current view */Boolean DoZoomOut(void){   if (zoomLev==0){ /* nothing to zoom out from */      return FALSE;   }   /* decrement zoomLev, restore previous view (not affected by any scrolls) */   zoomLev--;   sStart = zoomRec[zoomLev].st;   sEnd    = zoomRec[zoomLev].en;   PreparePlot(&waveWin, data, sStart, sEnd);   markA = zoomRec[zoomLev].regA;   markB = zoomRec[zoomLev].regB;   /* plot the wave form */   PlotWaveWin();   PlotLabWin();   /* re-display the marked region */   regnMarked = FALSE;   InvertRegion(&waveWin, markA, markB);   return TRUE;}/* DoZoomIn: zoom into a region */Boolean DoZoomIn(void){   int zoomA, zoomB;   int s_st, s_en;   if (zoomLev==MAX_ZOOM || samplesPt <= 1.0){ /* too many zooms so exit */      PrintMsg(&io_Win, "Maximum zoom level reached.");      return FALSE;   }   if (!GetRegionAB(&zoomA, &zoomB)){      PrintMsg(&io_Win, "Zoom In aborted.");      return FALSE;   }   /* record the current zoom level start and end samples */    zoomRec[zoomLev].st = sStart;   zoomRec[zoomLev].en = sEnd;   zoomRec[zoomLev].regA = zoomA;   zoomRec[zoomLev].regB = zoomB;   zoomLev++;   /* compute the new start and end samples */   s_st = Point2Sample(&waveWin, zoomA);   s_en = Point2Sample(&waveWin, zoomB);   sStart = s_st; sEnd = s_en;      AdjustBounds(&waveWin);   PreparePlot(&waveWin, data, sStart, sEnd);    /* plot the wave form */   PlotWaveWin();   PlotLabWin();   return TRUE;}/* DoMark: mark a region */Boolean DoMark(int *markA, int *markB){   /* check if region marked, if so unmark */   if (regnMarked)      InvertRegion(&waveWin, *markA, *markB);   if (!GetRegionAB(markA, markB)){      PrintMsg(&io_Win, "Mark region aborted.");      return FALSE;   }   InvertRegion(&waveWin, *markA, *markB);   return TRUE;}/* DoUnMark: unmark marked region */void DoUnMark(int markA, int markB){   if (regnMarked)      InvertRegion(&waveWin, markA, markB);}/* DoRestore: restore to full view, unmark any regions */void DoRestore(void){   DrawRectWin(&waveWin);   wavePtrOn=FALSE;   HSetColour(BLACK);   sStart = 0; sEnd = T;   zoomLev = 0;   PreparePlot(&waveWin, data, sStart, sEnd);   PlotWaveWin();   PlotLabWin();   regnMarked = FALSE;}/* DoScrollRight: scroll right thru the waveform */void DoScrollRight(void){   int x, y, w, h;   int sShift, ScrollPt;      /* check if already at the end sample, if so exit */   if (sEnd==T){      PrintMsg(&io_Win, "Last sample reached");      return;   }      /* unmark any marked regions */   if (regnMarked)       InvertRegion(&waveWin, markA, markB);   sShift = (int) (SCROLL_PT*samplesPt);   /* adjust the new start and end points */   if (sEnd + sShift > T){      sShift = T - sEnd;      ScrollPt = (int) (sShift / samplesPt);   } else      ScrollPt = SCROLL_PT;   WPtrOff();    x = waveWin.x + 1;   y = waveWin.y + 1;      w = waveWin.w - 1;   h = waveWin.h - 1;   HCopyArea(x + ScrollPt, y, w - ScrollPt, h, x, y);   HSetColour(waveWin.bg);   HFillRectangle(x + w - ScrollPt, y, x + w, y + h);   HSetColour(waveWin.fg);   sStart += sShift; sEnd += sShift;      PreparePlot(&waveWin, data, sStart, sEnd);   wavePtrOn=FALSE;   HSetColour(BLACK);   PlotWaveForm(&waveWin, w - ScrollPt, w);    PlotLabWin();}/* DoScrollLeft: scroll left thru the waveform */void DoScrollLeft(void){   int x, y, w, h;   int sShift, ScrollPt;   /* check if already at the first sample, if so exit */   if (sStart==0){      PrintMsg(&io_Win, "First sample reached");      return;   }   /* unmark region */   if (regnMarked)      InvertRegion(&waveWin, markA, markB);   sShift = (int) (SCROLL_PT*samplesPt);   if (sStart - sShift < 0){      sShift = sStart;      ScrollPt = (int) (sShift / samplesPt);   } else      ScrollPt = SCROLL_PT;   WPtrOff();    x = waveWin.x + 1;   y = waveWin.y + 1;   w = waveWin.w - 1;   h = waveWin.h - 1;   HCopyArea(x, y, w - ScrollPt, h, x + ScrollPt, y);   HSetColour(waveWin.bg);   HFillRectangle(x, y, x + ScrollPt, y + h);   HSetColour(waveWin.fg);   sStart -= sShift; sEnd -= sShift;   PreparePlot(&waveWin, data, sStart, sEnd);   wavePtrOn=FALSE;   HSetColour(BLACK);   PlotWaveForm(&waveWin, 1, ScrollPt+1);   PlotLabWin();}/* DoIncScale: increment the waveform scale factor */void DoIncScale(void){   Boolean was;      was = regnMarked;   scIndex = (scIndex + 1) % NUM_OF_SCALES;   scale_btn->str = scString[scIndex];   RedrawHButton(scale_btn);   PreparePlot(&waveWin, data, sStart, sEnd);   PlotWaveWin();   if (was){      regnMarked = FALSE;      InvertRegion(&waveWin, markA, markB);   }   PlotLabWin();}/* DoIncVolume: increment the playback volume */void DoIncVolume(void){   playVol = (playVol + 1) % VOLUME_STEPS;   sprintf(volStr, "Vol %d", playVol);   vol_btn->str = volStr;   RedrawHButton(vol_btn);}/* DoIncLabSet: select the next alternative transcription */void DoIncLabSet(void){   if (numSet==1)      return;   if (++labSet < numSet) {      llist = llist->next;   } else {      labSet = 0;      llist = trans->head;   }   if (llist==NULL)      HError(1590,"DoIncLabSet: Label set/count mismatch error");   FIXLABSTR;   RedrawHButton(lev_btn);   PlotLabWin();}/* DoNewLabSet: create a new alternative transcription */void DoNewLabSet(void){   LabList *ll;   int c;   for (c=0, ll=trans->head; ll!=NULL; ll=ll->next, c++)      if (CountLabs(ll)==0)         break;   if (ll==NULL) {      ll = CreateLabelList(&labStack, 10);      AddLabelList(ll, trans);      numSet = trans->numLists;   }   llist = ll; labSet=c;   FIXLABSTR;   RedrawHButton(lev_btn);   PlotLabWin();}/* DoPlay: play a marked region or the waveform visible */void DoPlay(void){   long playA, playB;   if (regnMarked) {      /* if region marked already then use markA and markB */      playA = (long) (sStart + (markA - waveWin.x)*samplesPt);      playB = (long) (sStart + (markB - waveWin.x)*samplesPt);   } else {      playA = sStart;      playB = sEnd;   }   Playback(wave, playA, playB, playVol, (int )scValues[scIndex], &newData);}/* DoSpecial: execute external command if environment variable set */ void DoSpecial(void){   char strbuf[256];   char cmdstr[256];   char cmdfn[256];      if (CommandSet(HSLabCmd, cmdstr)){      strcpy(cmdfn, PathOf(spfn, strbuf));      strcat(cmdfn, BaseOf(spfn, strbuf));      while (strchr(cmdstr, '$')!=NULL)         SubstFName(cmdfn, cmdstr);      PrintMsg(&io_Win, cmdstr);      system(cmdstr);   }}void CheckForSave(void);/* DoRecord: record from audio device */void DoRecord(short *data){   HButton *btn;   static int fnkey = 0;   /* key appended to the file name */   char bfn[SLEN], xfn[SLEN];   /* change button state */   SetActive(btnList, FALSE);   btn = FindButton(btnList, BT_REC);   btn->str = "stop"; btn->active = TRUE;   btn = FindButton(btnList, BT_PAUSE);   btn->active = TRUE;   RedrawHButtonList(btnList);   /* wipe out any labels */   CheckForSave();   /* record from audio device */   wave = Record(&nSamples, &sampPeriod);   T = nSamples;   /* restore original button state */   SetActive(btnList, TRUE);   btn = FindButton(btnList, BT_REC);   btn->str = "rec";   btn = FindButton(btnList, BT_PAUSE);   btn->active = FALSE;   /* redraw buttons, save data file and reload */   PrintMsg(&io_Win, "Saving data...");   RedrawHButtonList(btnList);   BaseOf(ospfn, bfn); ExtnOf(ospfn, xfn);   sprintf(spfn, "%s_%d.%s", bfn, fnkey, xfn);   fnkey = (fnkey+1) % 2;   MakeFN(spfn, labDir, labExt, labfn);   if(CloseWaveOutput(wave, wfmt, spfn)<SUCCESS)      HError(1514,"DoRecord: CloseWaveOutput failed");   LoadData();   hRedrawWindow();}/* DoPause: pause recording */BtnId DoPause(void){   HEventRec hev;     BtnId btn_id;   HButton *btn_pause;      btn_pause = FindButton(btnList, BT_PAUSE);   SetButtonLit(btn_pause, TRUE);   do {      do          hev = HGetEvent(FALSE, NULL);      while (hev.event!=HMOUSEDOWN);      btn_id = (BtnId) TrackButtons(btnList, hev);   } while ((btn_id!=BT_PAUSE) && (btn_id!=BT_REC));   SetButtonLit(btn_pause, FALSE);   return btn_id;}/* DoChangeLabStr: change the global string used for labelling */void DoChangeLabStr(void){   char sbuf[LAB_BUF_LEN], *prompt = "New label string: ";   strcpy(sbuf, prompt); strcat(sbuf, labstr);   GetString(&io_Win, sbuf, strlen(prompt), MAX_LAB_LEN);   strcpy(labstr, sbuf + strlen(prompt));   RedrawHButton(labstr_btn);}/* IncLabStr: increment numeric component of the global string */void IncLabStr(void){   char sbuf[LAB_BUF_LEN], nbuf[LAB_BUF_LEN],*p,*q;   Boolean isNum = FALSE;   int num;   strcpy(sbuf,labstr);   for (p=sbuf; *p != '\0'; p++)      if (isdigit((int) *p)){         isNum = TRUE; break;      }   if (isNum){          for (q=p+1; *q != '\0'; q++)         if (!isdigit((int) *q)) break;      num = atoi(p) +1; sprintf(nbuf,"%d",num);      *p = '\0';       strcpy(labstr,sbuf); strcat(labstr,nbuf); strcat(labstr,q);      RedrawHButton(labstr_btn);   }}/* DoDelLab: delete a label */Boolean DoDelLab(void){   LLink p;    HTime t;      if (llist==NULL)      return FALSE;   PrintMsg(&io_Win, "Select label to delete...");   if (!GetWavePtrPos()){      PrintMsg(&io_Win, "Delete label aborted.");      return FALSE;   }   PrintMsg(&io_Win, NULL);   t = Point2Sample(&waveWin, thisWpos);   if ((p = GetLabT(llist, (long) t)) == NULL)      return FALSE;   RecordOp(DELETE_OP, p);   DeleteLabObj(llist, p);   PlotLabWin();   labsModified = TRUE;   return TRUE;}

⌨️ 快捷键说明

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