• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*---------------------------------------------------------------------------*
2  *  utt_basi.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 
35 #include "../clib/fpi_tgt.inl"
36 
37 static const char utt_basi[] = "$Id: utt_basi.c,v 1.6.6.8 2007/10/15 18:06:24 dahan Exp $";
38 
39 
CA_AllocateUtterance(void)40 CA_Utterance *CA_AllocateUtterance(void)
41 {
42   CA_Utterance *hUtt = NULL;
43   TRY_CA_EXCEPT
44 
45   hUtt = (CA_Utterance *) CALLOC_CLR(1, sizeof(CA_Utterance), "ca.hUtt");
46   hUtt->ca_rtti = CA_UTTERANCE_SIGNATURE;
47   return (hUtt);
48 
49   BEG_CATCH_CA_EXCEPT
50   END_CATCH_CA_EXCEPT(hUtt)
51 }
52 
53 
CA_FreeUtterance(CA_Utterance * hUtt)54 void CA_FreeUtterance(CA_Utterance *hUtt)
55 {
56   TRY_CA_EXCEPT
57   ASSERT(hUtt);
58 
59   FREE((char *) hUtt);
60   return;
61 
62   BEG_CATCH_CA_EXCEPT
63   END_CATCH_CA_EXCEPT(hUtt)
64 }
65 
66 
CA_InitUtteranceForFrontend(CA_Utterance * hUtt,CA_FrontendInputParams * hFrontPar)67 int CA_InitUtteranceForFrontend(CA_Utterance *hUtt,
68                                 CA_FrontendInputParams *hFrontPar)
69 {
70   TRY_CA_EXCEPT
71   ASSERT(hUtt);
72   ASSERT(hFrontPar > 0);
73   if (hUtt->data.utt_type != 0)
74     SERVICE_ERROR(UTTERANCE_ALREADY_INITIALISED);
75 
76   init_utterance(&hUtt->data, LIVE_INPUT, 3*hFrontPar->mel_dim,  /* TODO: change to proper function */
77                  DEFAULT_BUFFER_SIZE, KEEP_FRAMES,
78                  hFrontPar->mel_dim, 1);
79   if (hFrontPar->do_skip_even_frames)
80     set_voicing_durations(&hUtt->data, hFrontPar->voice_duration / 2,
81                           hFrontPar->quiet_duration / 2,
82                           hFrontPar->unsure_duration / 2,
83                           hFrontPar->start_windback / 2);
84   else
85     set_voicing_durations(&hUtt->data, hFrontPar->voice_duration,
86                           hFrontPar->quiet_duration,
87                           hFrontPar->unsure_duration,
88                           hFrontPar->start_windback);
89   return (0);
90 
91   BEG_CATCH_CA_EXCEPT
92   END_CATCH_CA_EXCEPT(hUtt)
93 
94 }
95 
96 
CA_ClearUtterance(CA_Utterance * hUtt)97 void CA_ClearUtterance(CA_Utterance *hUtt)
98 {
99 
100   TRY_CA_EXCEPT
101   ASSERT(hUtt);
102   if (hUtt->data.utt_type == 0)
103   {
104     SERVICE_ERROR(UTTERANCE_NOT_INITIALISED);
105   }
106 
107   if (hUtt->data.utt_type == LIVE_INPUT)
108   {
109     free_utterance(&hUtt->data);
110     hUtt->data.utt_type = 0;
111   }
112   else
113   {
114     SERVICE_ERROR(UTTERANCE_UNKNOWN);
115   }
116   return;
117 
118   BEG_CATCH_CA_EXCEPT
119   END_CATCH_CA_EXCEPT(hUtt)
120 }
121 
122 
CA_AdvanceUtteranceFrame(CA_Utterance * hUtt)123 int CA_AdvanceUtteranceFrame(CA_Utterance *hUtt)
124 {
125   TRY_CA_EXCEPT
126   int status_code;
127 
128   ASSERT(hUtt);
129   if (hUtt->data.utt_type != LIVE_INPUT)
130     SERVICE_ERROR(UTTERANCE_NOT_INITIALISED);
131 
132   status_code = advance_utterance_frame(&hUtt->data);
133   return (status_code);
134 
135   BEG_CATCH_CA_EXCEPT
136   END_CATCH_CA_EXCEPT(hUtt)
137 }
138 
CA_UtteranceHasVoicing(CA_Utterance * hUtt)139 int CA_UtteranceHasVoicing(CA_Utterance *hUtt)
140 {
141   TRY_CA_EXCEPT
142   ASSERT(hUtt);
143   if (hUtt->data.utt_type != LIVE_INPUT)
144     SERVICE_ERROR(UTTERANCE_NOT_INITIALISED);
145 
146   return (hUtt->data.gen_utt.frame->voicingDetected);
147 
148   BEG_CATCH_CA_EXCEPT
149   END_CATCH_CA_EXCEPT(hUtt)
150 }
151 
152 
CA_UnlockUtteranceForInput(CA_Utterance * hUtt)153 void CA_UnlockUtteranceForInput(CA_Utterance *hUtt)
154 {
155   TRY_CA_EXCEPT
156   ASSERT(hUtt);
157   if (hUtt->data.utt_type != LIVE_INPUT)
158     SERVICE_ERROR(UTTERANCE_NOT_INITIALISED);
159   ASSERT(!isFrameBufferActive(hUtt->data.gen_utt.frame));
160   startFrameCollection(hUtt->data.gen_utt.frame);
161   return;
162 
163   BEG_CATCH_CA_EXCEPT
164   END_CATCH_CA_EXCEPT(hUtt)
165 }
166 
167 
CA_LockUtteranceFromInput(CA_Utterance * hUtt)168 void CA_LockUtteranceFromInput(CA_Utterance *hUtt)
169 {
170   TRY_CA_EXCEPT
171   ASSERT(hUtt);
172   if (hUtt->data.utt_type != LIVE_INPUT)
173     SERVICE_ERROR(UTTERANCE_NOT_INITIALISED);
174   ASSERT(isFrameBufferActive(hUtt->data.gen_utt.frame));
175 
176 
177   stopFrameCollection(hUtt->data.gen_utt.frame);
178   return;
179 
180   BEG_CATCH_CA_EXCEPT
181   END_CATCH_CA_EXCEPT(hUtt)
182 }
183 
184 
CA_ResetVoicing(CA_Utterance * hUtt)185 void CA_ResetVoicing(CA_Utterance *hUtt)
186 {
187   TRY_CA_EXCEPT
188   ASSERT(hUtt);
189   if (hUtt->data.utt_type != LIVE_INPUT)
190     SERVICE_ERROR(UTTERANCE_NOT_INITIALISED);
191 
192   clearEndOfUtterance(hUtt->data.gen_utt.frame);
193   clearC0Entries(hUtt->data.gen_utt.frame);
194   startFrameCollection(hUtt->data.gen_utt.frame);
195   return;
196 
197   BEG_CATCH_CA_EXCEPT
198   END_CATCH_CA_EXCEPT(hUtt)
199 }
200 
201 
CA_FlushUtteranceFrames(CA_Utterance * hUtt)202 void CA_FlushUtteranceFrames(CA_Utterance *hUtt)
203 {
204   TRY_CA_EXCEPT
205   ASSERT(hUtt);
206   if (hUtt->data.utt_type != LIVE_INPUT)
207     SERVICE_ERROR(UTTERANCE_NOT_INITIALISED);
208 
209   setRECframePtr(hUtt->data.gen_utt.frame, 0, 0);
210   releaseBlockedFramesInBuffer(hUtt->data.gen_utt.frame);
211   hUtt->data.gen_utt.last_push = NULL;
212   return;
213 
214   BEG_CATCH_CA_EXCEPT
215   END_CATCH_CA_EXCEPT(hUtt)
216 }
217 
218 
CA_SetEndOfUtteranceByLevelTimeout(CA_Utterance * hUtt,long timeout,long holdOff)219 void CA_SetEndOfUtteranceByLevelTimeout(CA_Utterance *hUtt, long timeout, long holdOff)
220 {
221   TRY_CA_EXCEPT
222   ASSERT(hUtt);
223   if (hUtt->data.utt_type != LIVE_INPUT)
224     SERVICE_ERROR(UTTERANCE_NOT_INITIALISED);
225 
226   setupEndOfUtterance(hUtt->data.gen_utt.frame, timeout, holdOff);
227   return;
228 
229   BEG_CATCH_CA_EXCEPT
230   END_CATCH_CA_EXCEPT(hUtt)
231 }
232 
233 
CA_UtteranceHasEnded(CA_Utterance * hUtt)234 int CA_UtteranceHasEnded(CA_Utterance *hUtt)
235 {
236   TRY_CA_EXCEPT
237   ASSERT(hUtt);
238   if (hUtt->data.utt_type != LIVE_INPUT)
239     SERVICE_ERROR(UTTERANCE_NOT_INITIALISED);
240 
241   return (utterance_ended(&hUtt->data));
242 
243   BEG_CATCH_CA_EXCEPT
244   END_CATCH_CA_EXCEPT(hUtt)
245 }
246