Как остановить механизм распознавания речи при использовании RecognizeMode.Multiple - PullRequest
0 голосов
/ 04 сентября 2018

Я использую System.Speech в Unity 2018.2 для проверки некоторых слов во время разговора игрока. Все хорошо, распознавание слов работает, но я не могу остановить 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 падает, когда я хочу снова запустить игру в редакторе.

Как мне остановить распознавание?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...