aboutsummaryrefslogtreecommitdiffstats
path: root/apps/app_speech_utils.c
diff options
context:
space:
mode:
authorfile <file@f38db490-d61c-443f-a65b-d21fe96a405b>2007-02-16 00:54:10 +0000
committerfile <file@f38db490-d61c-443f-a65b-d21fe96a405b>2007-02-16 00:54:10 +0000
commit9a17fb8b1e831c8c6cf79675c41c35e9acc41268 (patch)
tree9caf1f0bc8d7f5973944547124df8d3e0a656862 /apps/app_speech_utils.c
parent01c1553ffd6e414a2bcf89e1622248552a4c3daa (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/app_speech_utils.c')
-rw-r--r--apps/app_speech_utils.c56
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) {