int CA_SeekStartOfUtterance(CA_Utterance *hUtt) { TRY_CA_EXCEPT int gap = 0; ASSERT(hUtt); if (utterance_started(&hUtt->data)) { if ((gap = getBlockGap(hUtt->data.gen_utt.frame)) > 0) (void) setRECframePtr(hUtt->data.gen_utt.frame, gap, 1); if (hUtt->data.gen_utt.frame->holdOffPeriod > 0) setRECframePtr(hUtt->data.gen_utt.frame, -MIN(hUtt->data.gen_utt.frame->holdOffPeriod, getFrameGap(hUtt->data.gen_utt.frame)), 1); while (!(rec_frame_voicing_status(hUtt->data.gen_utt.frame) & VOICE_BIT)) { incRECframePtr(hUtt->data.gen_utt.frame); if (getFrameGap(hUtt->data.gen_utt.frame) == 0) break; } setRECframePtr(hUtt->data.gen_utt.frame, MIN(hUtt->data.gen_utt.start_windback, getBlockGap(hUtt->data.gen_utt.frame)), 1); #ifdef SREC_ENGINE_VERBOSE_LOGGING PLogMessage("L: Frame start rewound to %d (%d, %d)", hUtt->data.gen_utt.frame->pullTime, hUtt->data.gen_utt.start_windback, getBlockGap(hUtt->data.gen_utt.frame)); #endif hUtt->data.gen_utt.last_push = NULL; return hUtt->data.gen_utt.start_windback; } else return 0; BEG_CATCH_CA_EXCEPT END_CATCH_CA_EXCEPT(hUtt) }
int get_utterance_frame(preprocessed *prep, utterance_info *utt) /* ** To get a frame amount of data ** Maintains a single data buffer and passes the pointers to frame of data. ** Post-increments after copying */ { featdata *frame_ptr; int ii; ASSERT(prep); ASSERT(utt); /* Get the next data frame in */ if (getFrameGap(utt->gen_utt.frame) > 0) { /* is it a cloned object */ if (prep->ref_count > 1 && compare_cached_frame(prep, utt)) return (-1); frame_ptr = currentRECframePtr(utt->gen_utt.frame); if (frame_ptr == NULL) return (0); if (prep->ref_count > 1) { ASSERT(prep->last_frame); memcpy(prep->last_frame, frame_ptr, prep->dim* sizeof(featdata)); } for (ii = 0; ii < utt->gen_utt.dim; ii++) prep->seq[ii] = (imeldata)frame_ptr[ii]; /* Apply fast-voice corrections if necessary */ if (utt->gen_utt.frame->haveVoiced) { utterance_detection_fixup(utt->gen_utt.frame, &utt->gen_utt.last_push, utt->gen_utt.voice_duration, utt->gen_utt.quiet_duration, utt->gen_utt.unsure_duration); /* if (isFrameBufferActive (utt->gen_utt.frame) && getFrameGap (utt->gen_utt.frame) <= utt->gen_utt.quiet_duration) SERVICE_ERROR (INTERNAL_ERROR); */ prep->voicing_status = rec_frame_voicing_status(utt->gen_utt.frame); } return (1); } return (0); }