1 /*---------------------------------------------------------------------------* 2 * utt_data.c * 3 * * 4 * Copyright 2007, 2008 Nuance Communciations, Inc. * 5 * * 6 * Licensed under the Apache License, Version 2.0 (the 'License'); * 7 * you may not use this file except in compliance with the License. * 8 * * 9 * You may obtain a copy of the License at * 10 * http://www.apache.org/licenses/LICENSE-2.0 * 11 * * 12 * Unless required by applicable law or agreed to in writing, software * 13 * distributed under the License is distributed on an 'AS IS' BASIS, * 14 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * 15 * See the License for the specific language governing permissions and * 16 * limitations under the License. * 17 * * 18 *---------------------------------------------------------------------------*/ 19 20 #include <stdlib.h> 21 #include <string.h> 22 #ifndef _RTT 23 #include <stdio.h> 24 #endif 25 26 #ifdef unix 27 #include <unistd.h> 28 #endif 29 #include <assert.h> 30 31 32 #include "simapi.h" 33 #include "portable.h" 34 #include "../clib/fpi_tgt.inl" 35 36 static const char utt_data[] = "$Id: utt_data.c,v 1.8.6.6 2007/10/15 18:06:24 dahan Exp $"; 37 38 39 int CA_SeekStartOfUtterance(CA_Utterance *hUtt) 40 { 41 TRY_CA_EXCEPT 42 int gap = 0; 43 44 ASSERT(hUtt); 45 46 if (utterance_started(&hUtt->data)) 47 { 48 if ((gap = getBlockGap(hUtt->data.gen_utt.frame)) > 0) 49 (void) setRECframePtr(hUtt->data.gen_utt.frame, gap, 1); 50 if (hUtt->data.gen_utt.frame->holdOffPeriod > 0) 51 setRECframePtr(hUtt->data.gen_utt.frame, -MIN(hUtt->data.gen_utt.frame->holdOffPeriod, getFrameGap(hUtt->data.gen_utt.frame)), 1); 52 while (!(rec_frame_voicing_status(hUtt->data.gen_utt.frame) & VOICE_BIT)) 53 { 54 incRECframePtr(hUtt->data.gen_utt.frame); 55 if (getFrameGap(hUtt->data.gen_utt.frame) == 0) 56 break; 57 } 58 setRECframePtr(hUtt->data.gen_utt.frame, MIN(hUtt->data.gen_utt.start_windback, getBlockGap(hUtt->data.gen_utt.frame)), 1); 59 #ifdef SREC_ENGINE_VERBOSE_LOGGING 60 PLogMessage("L: Frame start rewound to %d (%d, %d)", hUtt->data.gen_utt.frame->pullTime, 61 hUtt->data.gen_utt.start_windback, 62 getBlockGap(hUtt->data.gen_utt.frame)); 63 #endif 64 hUtt->data.gen_utt.last_push = NULL; 65 return hUtt->data.gen_utt.start_windback; 66 } 67 else 68 return 0; 69 70 BEG_CATCH_CA_EXCEPT 71 END_CATCH_CA_EXCEPT(hUtt) 72 } 73 74 int CA_GetUnprocessedFramesInUtterance(CA_Utterance *hUtt) 75 { 76 TRY_CA_EXCEPT 77 ASSERT(hUtt); 78 return (getFrameGap(hUtt->data.gen_utt.frame)); 79 80 BEG_CATCH_CA_EXCEPT 81 END_CATCH_CA_EXCEPT(hUtt) 82 } 83 84 85