/* SetLabSeg: Set st and en for label (sequence) */ void SetLabSeg(Transcription *tr) { LabList *ll = tr->head; /* use first lab list */ LLink p,q; if (tr->numLists > 1) 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); }
/* FilterLevel: remove all but given level from transcription */ static void FilterLevel(Transcription *t, int lev) { LabList *ll; LLink p; for (ll = t->head; ll != NULL; ll = ll->next) { if (ll->maxAuxLab < lev) HError(6570,"FilterLevel: level %d > max[%d]",lev,ll->maxAuxLab); if (lev > 0) { for (p=ll->head->succ; p->succ!=NULL; p=p->succ) { if (p->auxLab[lev] != NULL) { p->labid = p->auxLab[lev]; p->score = p->auxScore[lev]; p->end = AuxLabEndTime(p,lev); } else DeleteLabel(p); } } ll->maxAuxLab = 0; } }
/* EXPORT->FormatTranscription: Format transcription prior to output */ void ReFormatTranscription(Transcription *trans,HTime frameDur, Boolean states,Boolean models,Boolean triStrip, Boolean normScores,Boolean killScores, Boolean centreTimes,Boolean killTimes, Boolean killWords,Boolean killModels) { LabList *ll; LLink lab; HTime end; char buf[MAXSTRLEN],*p,tail[64]; int lev,j,frames; if (killScores) { for (lev=1;lev<=trans->numLists;lev++) { ll=GetLabelList(trans,lev); for(lab=ll->head->succ;lab->succ!=NULL;lab=lab->succ) { lab->score=0.0; for (j=1;j<=ll->maxAuxLab;j++) lab->auxScore[j]=0.0; } } } if (triStrip) { for (lev=1;lev<=trans->numLists;lev++) { ll=GetLabelList(trans,lev); for(lab=ll->head->succ;lab->succ!=NULL;lab=lab->succ) { if (states && !models) { strcpy(buf,lab->labid->name); if ((p=strrchr(buf,'['))!=NULL) { strcpy(tail,p); *p=0; } else *tail=0; TriStrip(buf); strcat(buf,tail); lab->labid=GetLabId(buf,TRUE); } else { strcpy(buf,lab->labid->name); TriStrip(buf); lab->labid=GetLabId(buf,TRUE); } for (j=1;j<=ll->maxAuxLab;j++) { if (lab->auxLab[j]==NULL) continue; strcpy(buf,lab->auxLab[j]->name); TriStrip(buf); lab->auxLab[j]=GetLabId(buf,TRUE); } } } } if (normScores) { for (lev=1;lev<=trans->numLists;lev++) { ll=GetLabelList(trans,lev); for(lab=ll->head->succ;lab->succ!=NULL;lab=lab->succ) { frames=(int)floor((lab->end-lab->start)/frameDur + 0.4); if (frames==0) lab->score=0.0; else lab->score=lab->score/frames; if (states && models && ll->maxAuxLab>0 && lab->auxLab[1]!=NULL) { end=AuxLabEndTime(lab,1); frames=(int)floor((end-lab->start)/frameDur + 0.4); if (frames==0) lab->auxScore[1]=0.0; else lab->auxScore[1]=lab->auxScore[1]/frames; } } } } if (killTimes) { for (lev=1;lev<=trans->numLists;lev++) { ll=GetLabelList(trans,lev); for(lab=ll->head->succ;lab->succ!=NULL;lab=lab->succ) { lab->start=lab->end=-1.0; } } } if (centreTimes) { for (lev=1;lev<=trans->numLists;lev++) { ll=GetLabelList(trans,lev); for(lab=ll->head->succ;lab->succ!=NULL;lab=lab->succ) { lab->start+=frameDur/2; lab->end-=frameDur/2; } } } if (killWords) { for (lev=1;lev<=trans->numLists;lev++) { ll=GetLabelList(trans,lev); if (ll->maxAuxLab>0) for(lab=ll->head->succ;lab->succ!=NULL;lab=lab->succ) lab->auxLab[ll->maxAuxLab]=NULL; } } if (killModels && models && states) { for (lev=1;lev<=trans->numLists;lev++) { ll=GetLabelList(trans,lev); if (ll->maxAuxLab==2) for(lab=ll->head->succ;lab->succ!=NULL;lab=lab->succ) { lab->auxLab[1]=lab->auxLab[2]; lab->auxScore[1]=lab->auxScore[2]; lab->auxLab[2]=NULL; } } } }