我正在创建一个语音识别引擎,它将响应用户命令。我创建了一个按钮,根据用户的便利启用和禁用语音识别。我使用了Dispose()语音引擎来禁用语音识别。代码
private void button1_Click(object sender, RoutedEventArgs e)
{
engineOn = !engineOn;
if (engineOn)
{
speechEngine = speech.createSpeechEngine(); //speech is a class that creates and returns a new speech engine.
speechEngine.AudioLevelUpdated += new EventHandler<AudioLevelUpdatedEventArgs>(speechEngine_AudioLevelUpdated);
// use the system's default microphone
speechEngine.SetInputToDefaultAudioDevice();
speechEngine.LoadGrammar(new DictationGrammar());
// start listening
speechEngine.RecognizeAsync(RecognizeMode.Multiple);
}
else
{
SpeechClass.myEngine.Dispose();
}
}
但语音对象的处理需要时间。如何异步进行? 有没有其他方法可以打开和关闭语音识别?提前谢谢。
答案 0 :(得分:0)
您只需使用RecogniseAsync / RecogniseAsyncStop将其关闭再打开:
http://msdn.microsoft.com/en-us/library/system.speech.recognition.speechrecognitionengine.aspx
或者,你可以尝试加载一个空的语法列表,所以基本上kinect没有什么可以听的。
此外,除非您不再想要使用(例如,当应用程序关闭时),否则我将完全避免处置该对象。处理对象(特别是speechrecognitionengine)会产生很大的开销,然后再重新创建它。