0

我正在创建一个将响应用户命令的语音识别引擎。我创建了一个按钮来根据用户方便启用和禁用语音识别。我使用语音引擎的 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();
        }

    }

但是语音对象的处理需要时间。如何异步执行?有没有其他方法可以打开和关闭语音识别?提前致谢。

4

1 回答 1

0

您只需使用 RecogniseAsync / RecogniseAsyncStop 将其关闭并再次打开:

http://msdn.microsoft.com/en-us/library/system.speech.recognition.speechrecognitionengine.aspx

或者,您可以尝试加载一个空的语法列表,这样基本上 kinect 就没有什么可听的了。

此外,除非您不再想使用(例如,当应用程序关闭时),否则我会避免完全处置该对象。处理对象(特别是语音识别引擎),然后重新创建它会产生很大的开销。

于 2013-04-19T22:57:39.217 回答