Пример #1
0
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)
}
Пример #2
0
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);
}