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
36static const char utt_data[] = "$Id: utt_data.c,v 1.8.6.6 2007/10/15 18:06:24 dahan Exp $";
37
38
39int 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
74int 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