使用RecognizeMode.Multiple时如何停止语音识别引擎

时间:2018-09-04 14:53:18

标签: c# .net unity3d speech-recognition system.speech.recognition

我正在Unity 2018.2中使用System.Speech来在播放器讲话时执行一些单词检查。 一切都很好,单词识别正常,但我无法停止SpeechRecognitionEngine

这是我初始化SpeechRecognitionEngine的方式:

void InitSpeechEngine()
{
    _speechEngine = new SpeechRecognitionEngine();
    Choices fillers = new Choices();
    fillers.Add(FillerWords.ToArray());
    GrammarBuilder gb = new GrammarBuilder();
    gb.Append(fillers);
    gb.Culture = new System.Globalization.CultureInfo("en-US");
    _grammar = new Grammar(gb);

    _speechEngine.LoadGrammarAsync(_grammar);
    _speechEngine.SetInputToDefaultAudioDevice();
    _speechEngine.SpeechRecognized += FillerRecognized;
}

我如何启动它:

public void StartSpeech()
{
    _speechStarted = true;
    _speechEngine.RecognizeAsync(RecognizeMode.Multiple);
}

以及我如何尝试阻止它:

public void StopSpeech()
{
    _speechStarted = false;
    _speechEngine.RecognizeAsyncCancel();
}

所以这不起作用,我收到的错误消息是:

  

InvalidOperationException:在以下情况下无法执行此操作:   识别器正在识别。

我想做的是监视玩家语音中的某些单词,并在玩家说出单词时增加一个计数器。因此,我需要持续的认可,并且不希望讲话,因此该过程对于玩家来说应该是完全不可见的。它可以正常运行,但是我无法停止SpeecehRecognitionEngine ...

我认为由于这个错误,我想在编辑器中再次启动游戏时,Unity编辑器崩溃。

我应该如何停止识别?

0 个答案:

没有答案