[asterisk-speech-rec] DTMF response time improved during speech recog. instances
Brent Ropp
brn6577 at saintjoe.edu
Tue Jun 19 16:43:04 CDT 2007
DTMF digits from everything I have read in the source code and other
various places are indeed handled by Asterisk and not even passed to the
Speech Engine, this is done by SpeechBackground() in app_speech_utils. A
good way to show this is use ${SPEECH_SCORE(0)} and ${SPEECH_GRAMMAR(0)},
for dtmf digits they will return 1000, and dtmf respectively.
The 5 second delay you were experiencing, just for everyones info is a
default set in that application to wait for anymore digits and was
bypassed by using a '#' character after the digits you entered(the short
hack make your menus tell the users to press the # key after entering dtmf
digits). This does mean that you do not need dtmf grammars as the speech
engine will not get a chance to know that you have used any dtmf digits.
This new variable I can see where it will be widely valuable.
Brent
> I ran into a problem a few days ago with speech recognition in
> generic conversion of DTMF-based applications. We have several apps
> here which rely upon single keypresses in order to take some action,
> like most IVR apps. The problem was that the existing method by
> which Asterisk was handing off DTMF was a bit on the sluggish side
> for entries made on the DTMF keypad - there was around a 5 second
> delay between a keypress and an action being returned to the
> dialplan. This was a drastic performance cut from our existing apps,
> so voice-enabling them wasn't possible until that bug was fixed.
>
> I'm pleased to say a quick response by Lumenvox (StephenKeller) and
> Digium (file) added an as-yet undocumented repair variable to solve
> the problem. It was repaired and added to 1.4 on June 15th 2007, and
> patches cleanly to other versions (it's only about 5 lines in
> app_speech_utils.c)
>
> You can now set a variable called "SPEECH_DTMF_MAXLEN" from within
> the dialplan which indicates the maximum number if DTMF digits your
> grammar is expecting. In our case, where menus were all
> single-keypress to start with, we set the value to "1" and it returns
> back the values immediately. I also created .gram files for
> single-digit keypresses for both voice and DTMF, though I'm uncertain
> if this is required now with this patch. Interestingly, if you
> specify "2" as the length of digits, but your DTMF grammar only
> indicates a single digit, the grammar is ignored and the number of
> digits you enter with DTMF is returned. If you speak more than two
> digits, the system acts properly according to the grammar and only
> the first digit is returned. I've been told this is because Asterisk
> is handling the DTMF (and is being instructed what to do with
> SPEECH_DTMF_MAXLEN) and the voice recognition portion is using the
> grammar.
>
> Note: I've not been able to get "#" and "*" to work yet with the DTMF
> signalling, but I've been talking with Lumenvox about if this is a
> syntax problem with my attempts, or a deeper bug.
>
>
> Examples below.
>
> JT
>
>
>
>
> [root at blah grammars]# more digit.gram
> #ABNF 1.0 UTF-8;
>
> language en-US;
>
> mode voice;
>
> tag-format <lumenvox/1.0>;
>
> $Digit = (ONE:"1" |
> TWO:"2" |
> THREE:"3" |
> FOUR:"4" |
> FIVE:"5" |
> SIX:"6" |
> SEVEN:"7" |
> EIGHT:"8" |
> NINE:"9" |
> (ZERO | O):"0" );
> [root at blah grammars]#
>
>
>
> [root at blah grammars]# more digit-dtmf.gram
> #ABNF 1.0 UTF-8;
>
> language en-US;
>
> mode dtmf;
>
> tag-format <lumenvox/1.0>;
>
> root $Digit;
>
> $Digit = (1:"1" |
> 2:"2" |
> 3:"3" |
> 4:"4" |
> 5:"5" |
> 6:"6" |
> 7:"7" |
> 8:"8" |
> 9:"9" |
> 0:"0");
>
> [root at blah grammars]#
>
> [test]
> exten => s,1,SpeechCreate
> exten => s,n,Set(THRESHOLD=500)
> exten => s,n,Set(SPEECH_DTMF_MAXLEN=1)
> exten => s,n,SpeechActivateGrammar(digit)
> exten => s,n,SpeechActivateGrammar(digit-dtmf)
> exten => s,n,SpeechStart
> exten => s,n,SpeechBackground(tt-monkeys)
> exten => s,n,NoOp(The value in SPEECH_TEXT is ${SPEECH_TEXT(0)})
> exten => s,n,SayDigits(${SPEECH_TEXT(0)})
>
> exten => s,n,Hangup
>
> exten => i,1,Playback(tt-somethingwrong)
> exten => i,n,Hangup
>
>
> _______________________________________________
> --Bandwidth and Colocation provided by Easynews.com --
>
> asterisk-speech-rec mailing list
> To UNSUBSCRIBE or update options visit:
> http://lists.digium.com/mailman/listinfo/asterisk-speech-rec
>
More information about the asterisk-speech-rec
mailing list