diff options
author | file <file@f38db490-d61c-443f-a65b-d21fe96a405b> | 2007-02-16 00:54:10 +0000 |
---|---|---|
committer | file <file@f38db490-d61c-443f-a65b-d21fe96a405b> | 2007-02-16 00:54:10 +0000 |
commit | 9a17fb8b1e831c8c6cf79675c41c35e9acc41268 (patch) | |
tree | 9caf1f0bc8d7f5973944547124df8d3e0a656862 /apps | |
parent | 01c1553ffd6e414a2bcf89e1622248552a4c3daa (diff) |
Merged revisions 54714 via svnmerge from
https://origsvn.digium.com/svn/asterisk/branches/1.4
........
r54714 | file | 2007-02-15 19:48:48 -0500 (Thu, 15 Feb 2007) | 2 lines
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/trunk@54715 f38db490-d61c-443f-a65b-d21fe96a405b
Diffstat (limited to 'apps')
-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 dc80dd95f..d7efd564b 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) { |