void vtln_alpha(Recog *recog, RecogProcess *r) { Sentence *s; float alpha, alpha_bgn, alpha_end; float max_alpha; LOGPROB max_score; PROCESS_AM *am; MFCCCalc *mfcc; SentenceAlign *align; s = &(r->result.sent[0]); align = result_align_new(); max_score = LOG_ZERO; printf("------------ begin VTLN -------------\n"); mfcc = r->am->mfcc; alpha_bgn = mfcc->para->vtln_alpha - VTLN_RANGE; alpha_end = mfcc->para->vtln_alpha + VTLN_RANGE; for(alpha = alpha_bgn; alpha <= alpha_end; alpha += VTLN_STEP) { mfcc->para->vtln_alpha = alpha; if (InitFBank(mfcc->wrk, mfcc->para) == FALSE) { jlog("ERROR: VTLN: InitFBank() failed\n"); return; } if (wav2mfcc(recog->speech, recog->speechlen, recog) == FALSE) { jlog("ERROR: VTLN: wav2mfcc() failed\n"); return; } outprob_prepare(&(r->am->hmmwrk), mfcc->param->samplenum); word_align(s->word, s->word_num, mfcc->param, align, r); printf("%f: %f\n", alpha, align->allscore); if (max_score < align->allscore) { max_score = align->allscore; max_alpha = alpha; } } printf("MAX: %f: %f\n", max_alpha, max_score); mfcc->para->vtln_alpha = max_alpha; if (InitFBank(mfcc->wrk, mfcc->para) == FALSE) { jlog("ERROR: VTLN: InitFBank() failed\n"); return; } printf("------------ end VTLN -------------\n"); result_align_free(align); }
void cTumkwsjSink::juAlignPass1Keywords(RecogProcess *r, HTK_Param *param) { // int n; Sentence *s; SentenceAlign *now;//, *prev; s = &(r->result.pass1); /* do forced alignment if needed */ if ((r->config->annotate.align_result_word_flag)&&(s->word_num>0)) { //now = result_align_new(); //if (s->align == NULL) now = result_align_new(); //else now = s->align; word_align(s->word, s->word_num, param, now, r); if (s->align == NULL) //result_align_free(s->align); s->align = now; else { result_align_free(s->align); s->align = now; } // else prev->next = now; // prev = now; } }