我正在开发一个语音应用程序,它可以倾听用户的声音,处理输入并在需要时执行任何操作,然后向用户提供输出。
我正在使用System.Speech.Recognition.SpeechRecognitionEngine
来倾听用户的声音,并使用System.Speech.Synthesis.SpeechSynthesizer
来口头输出给用户。
我让 SPR 连续收听,因为我想让用户在 TTS 忙于说话时打断 TTS,但显然,每当 TTS 说话时,SPR 都在收听 TTS,从而触发进程以找出所说的内容和试图执行任何操作。
我正在寻找一些关于如何让 SPR 确定在用户说话时 TTS 也在说话时它是在听用户还是在听 TTS 的一些想法。
更新我可能已经找到了解决方案。
TtsSpeaking
我可以使用TTS 可以true
在开始讲话时设置的公共布尔值,然后false
在完成时将其设置为。
在SpeechHypothesized
SPR 事件期间,它可以检查 if TtsSpeaking
istrue
然后检查假设文本以查看它是否包含以下单词:
stop
并且talking
pause
并且talking
然后调用一个方法,该方法将“告诉” TTS 停止或暂停其讲话。
将尝试它然后再次更新。肿瘤坏死因子
更新 2
上面提到的解决方案有效。我还添加了一个“保护措施”,以防止 SPR 的SpeechHypothesized
事件stop/pause talking
在用户没有说出这些单词但 TTS 确实在假设文本中找到上述单词组合时调用方法:
TTS 暴露了它要说的内容,同样,让 TTS 设置一个带有要说的公共变量,SpeechHypothesized
事件可以检查 TTS 是否说出了限定词组合,如果不是,则假定用户说出了它们然后调用stop/pause
talking方法。