diff options
author | file <file@f38db490-d61c-443f-a65b-d21fe96a405b> | 2007-02-16 00:48:48 +0000 |
---|---|---|
committer | file <file@f38db490-d61c-443f-a65b-d21fe96a405b> | 2007-02-16 00:48:48 +0000 |
commit | 6483d63fefce3e15d64a774f47995187aa52dc7e (patch) | |
tree | f67c1e9884eafd0466296ddc731663bb524e3f04 /apps/app_speech_utils.c | |
parent | 27f39e5aeaa53bfd128fe49e7db0a0086ec4e592 (diff) |
Don't let dtmf leak over into the engine and let it skew the results... also give DTMF results priority. (issue #9014 reported by surftek)
git-svn-id: http://svn.digium.com/svn/asterisk/branches/1.4@54714 f38db490-d61c-443f-a65b-d21fe96a405b
Diffstat (limited to 'apps/app_speech_utils.c')
-rw-r--r-- | apps/app_speech_utils.c | 56 |
1 files changed, 30 insertions, 26 deletions
diff --git a/apps/app_speech_utils.c b/apps/app_speech_utils.c index e778f5dd1..0a18c38a9 100644 --- a/apps/app_speech_utils.c +++ b/apps/app_speech_utils.c @@ -614,39 +614,43 @@ static int speech_background(struct ast_channel *chan, void *data) time(&start); started = 1; } - /* Deal with audio frames if present */ - if (f != NULL && f->frametype == AST_FRAME_VOICE) { + /* Write audio frame out to speech engine if no DTMF has been received */ + if (!strlen(dtmf) && f != NULL && f->frametype == AST_FRAME_VOICE) { ast_speech_write(speech, f->data, f->datalen); } break; case AST_SPEECH_STATE_WAIT: /* Cue up waiting sound if not already playing */ - if (chan->stream == NULL) { - if (speech->processing_sound != NULL) { - if (strlen(speech->processing_sound) > 0 && strcasecmp(speech->processing_sound,"none")) { - speech_streamfile(chan, speech->processing_sound, chan->language); - } - } - } else if (chan->streamid == -1 && chan->timingfunc == NULL) { - ast_stopstream(chan); - if (speech->processing_sound != NULL) { - if (strlen(speech->processing_sound) > 0 && strcasecmp(speech->processing_sound,"none")) { - speech_streamfile(chan, speech->processing_sound, chan->language); - } - } - } + if (!strlen(dtmf)) { + if (chan->stream == NULL) { + if (speech->processing_sound != NULL) { + if (strlen(speech->processing_sound) > 0 && strcasecmp(speech->processing_sound,"none")) { + speech_streamfile(chan, speech->processing_sound, chan->language); + } + } + } else if (chan->streamid == -1 && chan->timingfunc == NULL) { + ast_stopstream(chan); + if (speech->processing_sound != NULL) { + if (strlen(speech->processing_sound) > 0 && strcasecmp(speech->processing_sound,"none")) { + speech_streamfile(chan, speech->processing_sound, chan->language); + } + } + } + } break; case AST_SPEECH_STATE_DONE: - /* Copy to speech structure the results, if available */ - speech->results = ast_speech_results_get(speech); - /* Now that we are done... let's switch back to not ready state */ + /* Now that we are done... let's switch back to not ready state */ ast_speech_change_state(speech, AST_SPEECH_STATE_NOT_READY); - /* Break out of our background too */ - done = 1; - /* Stop audio playback */ - if (chan->stream != NULL) { - ast_stopstream(chan); - } + if (!strlen(dtmf)) { + /* Copy to speech structure the results, if available */ + speech->results = ast_speech_results_get(speech); + /* Break out of our background too */ + done = 1; + /* Stop audio playback */ + if (chan->stream != NULL) { + ast_stopstream(chan); + } + } break; default: break; @@ -688,7 +692,7 @@ static int speech_background(struct ast_channel *chan, void *data) } } - if (strlen(dtmf) > 0 && speech->results == NULL) { + if (strlen(dtmf)) { /* We sort of make a results entry */ speech->results = ast_calloc(1, sizeof(*speech->results)); if (speech->results != NULL) { |