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: https://origsvn.digium.com/svn/asterisk/branches/1.4@54714 65c4cc65-6c06-0410-ace0-fbb531ad65f3
1.4
Joshua Colp 19 years ago
parent bddfe6fea7
commit ae5eec37dd

@ -614,13 +614,14 @@ static int speech_background(struct ast_channel *chan, void *data)
time(&start); time(&start);
started = 1; started = 1;
} }
/* Deal with audio frames if present */ /* Write audio frame out to speech engine if no DTMF has been received */
if (f != NULL && f->frametype == AST_FRAME_VOICE) { if (!strlen(dtmf) && f != NULL && f->frametype == AST_FRAME_VOICE) {
ast_speech_write(speech, f->data, f->datalen); ast_speech_write(speech, f->data, f->datalen);
} }
break; break;
case AST_SPEECH_STATE_WAIT: case AST_SPEECH_STATE_WAIT:
/* Cue up waiting sound if not already playing */ /* Cue up waiting sound if not already playing */
if (!strlen(dtmf)) {
if (chan->stream == NULL) { if (chan->stream == NULL) {
if (speech->processing_sound != NULL) { if (speech->processing_sound != NULL) {
if (strlen(speech->processing_sound) > 0 && strcasecmp(speech->processing_sound,"none")) { if (strlen(speech->processing_sound) > 0 && strcasecmp(speech->processing_sound,"none")) {
@ -635,18 +636,21 @@ static int speech_background(struct ast_channel *chan, void *data)
} }
} }
} }
}
break; break;
case AST_SPEECH_STATE_DONE: 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); ast_speech_change_state(speech, AST_SPEECH_STATE_NOT_READY);
if (!strlen(dtmf)) {
/* Copy to speech structure the results, if available */
speech->results = ast_speech_results_get(speech);
/* Break out of our background too */ /* Break out of our background too */
done = 1; done = 1;
/* Stop audio playback */ /* Stop audio playback */
if (chan->stream != NULL) { if (chan->stream != NULL) {
ast_stopstream(chan); ast_stopstream(chan);
} }
}
break; break;
default: default:
break; 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 */ /* We sort of make a results entry */
speech->results = ast_calloc(1, sizeof(*speech->results)); speech->results = ast_calloc(1, sizeof(*speech->results));
if (speech->results != NULL) { if (speech->results != NULL) {

Loading…
Cancel
Save