我正在处理一个会听取用户,处理输入并根据需要执行任何操作的语音应用,然后向用户提供输出。
我使用System.Speech.Recognition.SpeechRecognitionEngine
收听用户,System.Speech.Synthesis.SpeechSynthesizer
以口头方式输出给用户。
我有连续的SPR监听,因为我想让用户在TTS忙碌的时候中断TTS,但很明显,只要TTS说话,SPR就会收听TTS,触发过程找出什么有人说,并试图采取任何行动。
我正在寻找一些关于如何让SPR确定当用户在TTS讲话时说话时是听到用户还是TTS的想法。
更新我可能找到了解决方案。
我可以使用TTS在开始讲话时可以设置为TtsSpeaking
的公共布尔值true
,然后在完成时将其设置为false
。
在SPR的SpeechHypothesized
事件期间,它可以检查TtsSpeaking
是否为true
,然后检查假设的文本以查看它是否包含以下字词:
stop
andalso talking
pause
andalso talking
然后调用一个方法,它会告诉" TTS要么停止要么停止说话。
将尝试然后再次更新。 TNX
更新2
上述解决方案有效。我还添加了一个" safeguard"防止SPR SpeechHypothesized
事件调用stop/pause talking
方法如果在假设文本中找到上述单词组合,如果用户没有说出这些单词,但是TTS确实如此:
TTS暴露了它将要说的内容,同样,让TTS设置一个公共变量,而{I-}}事件可以检查TTS是否说出合格词组合,如果不,假设用户说出了它们,然后调用SpeechHypothesized
通话方法。