我有一个语音激活程序,它抛出了唯一的错误。它是System.InvalidOperationException
我尝试了很多方法,我无法弄清楚为什么它没有得到纠正。
我正在使用System.Speech。我有一个计时器,在计时器中,我启用并禁用它从True到False和False到True。它都没有解决问题。
我宣布了我的班级
SpeechRecognitionEngine startlistening = new SpeechRecognitionEngine();
我已经指定了我的活动
startlistening.SetInputToDefaultAudioDevice();
startlistening.LoadGrammarAsync(new Grammar(new GrammarBuilder(new Choices("alexis"))));
startlistening.SpeechRecognized += new EventHandler<SpeechRecognizedEventArgs>(startlistening_SpeechRecognized);
然后我放置了命令
case "quit listening":
Alexis.SpeakAsync("I will await further commands ");
_recognizer.RecognizeAsyncCancel();
startlistening.RecognizeAsync(RecognizeMode.Multiple);
break;
然后我放了我的计时器
private void tmrSpeech_Tick(object sender, EventArgs e)
{
if (recTimeOut == 10)
{
_recognizer.RecognizeAsyncCancel();
}
else if (recTimeOut == 11)
{
startlistening.RecognizeAsync(RecognizeMode.Multiple);
tmrSpeech.Stop();
recTimeOut = 0;
}
recTimeOut += 1;
}
我已经为Start listen
声明了结构void startlistening_SpeechRecognized(object sender, SpeechRecognizedEventArgs e)
{
string speech = e.Result.Text;
switch (speech)
{
case "alexis":
startlistening.RecognizeAsyncCancel();
Alexis.SpeakAsync("I am back online");
_recognizer.RecognizeAsync(RecognizeMode.Multiple);
break;
}
}
我不知所措。我有所有参考设置,以及
上设置的计时器Enabled False
Interval 10000
GenerateMember True
Modifiers Private
我可能会遗漏一些东西。当我告诉程序退出侦听它使用AsyncCancel然后如果说Alexis然后程序响应没有错误。但是,如果我说Quit Listening并等待超过10秒,它将抛出异常。我已经尝试过我所知道的一切。有任何想法吗?我正在使用Visual Studio 2013社区及其在Winforms和.NET 4.5 Framework
中答案 0 :(得分:1)
是的,为时已晚,但对其他人来说可能有所帮助。
在SpeechRecognized事件中,SpeechRecogniser尚未完成其操作。 但是在您的代码中,您正在强制SpeechRecogniser开始收听。 SpeechRecogniser无法执行此操作。
startlistening.RecognizeAsyncCancel();
Alexis.SpeakAsync("I am back online");
_recognizer.RecognizeAsync(RecognizeMode.Multiple);
您应该在SpeechRecognized事件完成执行后开始侦听。
您可以使用RecognizeCompleted事件, _recognizer.RecognizeAsync(RecognizeMode.Multiple); 强>