Snippets
Created by
Ludvig Linse
last modified
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 | <!--
This is an example of two ways to do extended listening.
1. The first example, loop, simply loops listening until a certain stop word is said (hardcoded in this example, you probably want to use grammar in a real scenario).
2. The second example, timer, gives the user 20 seconds to answer. The only scenario we recommend using this for is if you have a very noisy environment and you can't rely on speech recognition. In order to actually capture speech here, you need to record the audio aswell - which can be done with the audio logging tool.
-->
<var name="feedback" type="String" value="''"/>
<state id="Start">
<onentry>
<agent:say>Loop or timer?</agent:say>
<agent:listen/>
<reentry/>
</onentry>
<onevent name="sense.user.speak" cond="asString(event:text).equals('loop')">
<goto state="FeedbackLoop"/>
</onevent>
<onevent name="sense.user.speak" cond="asString(event:text).equals('timer')">
<goto state="TimedFeedback"/>
</onevent>
</state>
<state id="FeedbackLoop">
<onentry>
<agent:say>Please give your feedback. Say no if you want to abort</agent:say>
<agent:listen/>
</onentry>
<onevent name="sense.user.speak" cond="asString(event:text).equals('no')">
<goto state="Done"/>
</onevent>
<onevent name="sense.user.speak" cond="!eq(event:text, iristk.speech.RecResult.NOMATCH)">
<exec>
feedback = feedback + " " + event:text;
</exec>
<random>
<agent:say>anything else?</agent:say>
<agent:say>ok, something more?</agent:say>
<agent:say>anything more?</agent:say>
</random>
<agent:listen/>
</onevent>
<onevent name="sense.user.speak">
<agent:say>sorry, can you repeat that?</agent:say>
<agent:listen/>
</onevent>
<onevent name="sense.user.silence">
<agent:say>I didn't hear anything</agent:say>
<agent:listen/>
</onevent>
</state>
<state id="TimedFeedback">
<onentry>
<agent:say>Please give your feedback, you have 20 seconds to go</agent:say>
<agent:listen/>
</onentry>
<onevent name="sense.user.speak" cond="!eq(event:text, iristk.speech.RecResult.NOMATCH)">
<exec>
feedback = feedback + " " + event:text;
</exec>
<agent:listen/>
</onevent>
<onevent name="sense.user.speak">
<agent:say>sorry, can you repeat that?</agent:say>
<agent:listen/>
</onevent>
<onevent name="sense.user.silence">
<agent:listen/>
</onevent>
<ontime afterentry="20000">
<goto state="TimerEnded"/>
</ontime>
</state>
<state id="TimerEnded">
<onentry>
<if cond="!system.getCurrentUser().isSpeaking()">
<send event="action.listen.stop"/>
<goto state="Done"/>
</if>
</onentry>
<onevent name="sense.user.speak">
<exec>
feedback = feedback + " " + event:text;
</exec>
<goto state="Done"/>
</onevent>
<onevent name="sense.user.silence">
<goto state="Done"/>
</onevent>
</state>
<state id="Done">
<onentry>
<agent:say>Ok, thank you. The feedback I got was <expr>feedback</expr></agent:say>
</onentry>
</state>
|
Comments (0)
You can clone a snippet to your computer for local editing. Learn more.