/** * <JA> * 認識結果に対して必要なアラインメントを全て実行する. * * @param r [i/o] 認識処理インスタンス * @param param [in] 入力特徴ベクトル列 * </JA> * <EN> * Do required forced alignment for the recognition results * * @param r [i/o] recognition process instance * @param param [in] input parameter vectors * </EN> * @callgraph * @callergraph */ void do_alignment_all(RecogProcess *r, HTK_Param *param) { int n; Sentence *s; SentenceAlign *now, *prev; for(n = 0; n < r->result.sentnum; n++) { s = &(r->result.sent[n]); /* do forced alignment if needed */ if (r->config->annotate.align_result_word_flag) { now = result_align_new(); word_align(s->word, s->word_num, param, now, r); if (s->align == NULL) s->align = now; else prev->next = now; prev = now; } if (r->config->annotate.align_result_phoneme_flag) { now = result_align_new(); phoneme_align(s->word, s->word_num, param, now, r); if (s->align == NULL) s->align = now; else prev->next = now; prev = now; } if (r->config->annotate.align_result_state_flag) { now = result_align_new(); state_align(s->word, s->word_num, param, now, r); if (s->align == NULL) s->align = now; else prev->next = now; prev = now; } } }
void push_frame(int sz_b) { sz_b = word_align(sz_b); if (top != NULL && have_space(sz_b+sizeof(void*))) { // can continue with current region //printf("push frame in page\n"); *((void **)top->alloc_ptr) = top->frame_ptr; top->frame_ptr = top->alloc_ptr; top->alloc_ptr = (void *)((unsigned long)top->alloc_ptr + WORD_SZB); } else { //printf("push frame on new page\n"); add_page(sz_b,0); } }
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 *stack_alloc(int sz_b) { assert(top != NULL); sz_b = word_align(sz_b); retry: if (have_space(sz_b)) { // can continue with current region void *res = top->alloc_ptr; //printf("allocated %d bytes\n", sz_b); top->alloc_ptr = (void *)((unsigned long)top->alloc_ptr + sz_b); return res; } else { //printf("adding page on demand\n"); add_page(sz_b,1); goto retry; } }
static void *malloc_base() { static Chunk b = NULL; if (!b) { b = sbrk(word_align(sizeof(struct chunk))); if (b == (void*) -1) { _exit(127); } b->next = NULL; b->prev = NULL; b->size = 0; b->free = 0; b->data = NULL; } return b; }
static struct chunk* get_base(void) { static struct chunk *base = NULL; if (base == NULL) { if ((base = sbrk(word_align(sizeof(struct chunk)))) != (void *)-1) { base->next = NULL; base->prev = NULL; base->size = 0; base->free = 0; //base->data = NULL; } } return base; }
void *malloc(size_t size) { if (size == 0 ) return NULL; size_t lenght = word_align(size); struct chunk *c = find_chunk(size); if(c->next==NULL) { if (extend_heap(c,lenght) == 0) return NULL; } else { c->next->free = 0; } return (&c->next->data); }
void *malloc(size_t size) { if (!size) return NULL; size_t length = word_align(size + sizeof(struct chunk)); Chunk prev = NULL; Chunk c = malloc_chunk_find(size, &prev); if (!c) { Chunk newc = sbrk(length); if (newc == (void*) -1) { return NULL; } newc->next = NULL; newc->prev = prev; newc->size = length - sizeof(struct chunk); newc->data = newc + 1; prev->next = newc; c = newc; } else if (length + sizeof(size_t) < c->size) { malloc_split_next(c, length); } c->free = 0; return c->data; }
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; } }