Как остановить механизм распознавания речи при использовании RecognizeMode.Multiple
Я использую 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 падает, когда я хочу снова запустить игру в редакторе.
Как мне остановить распознавание?