// Use this for initialization void Start() { SwitchToWWE = new AsrSwitchDelegate(SwitchToWakeWordDetection); SwitchToSTT = new AsrSwitchDelegate(SwitchToSpeechToText); //AddWakeWords(new String[] { "computer", "auto" }); Debug.Log(PhraseRecognitionSystem.Status); //WWE.keywordRecognizer.Start(); foreach (IWakeWordEngineInterface WWE in WWEList) { WWE.InitDetection(); } background = MicrophoneBorder.GetComponent <Image>(); StartCoroutine("FlashMicrophoneOverlay"); //SwitchToWakeWordDetection(); //STT = GameObject.Find(STT); if (asrComponentsNotSupportedOnThisMashine) { Debug.LogError("Starte Not Supported Info Routine"); StartCoroutine(StartNotSupportedDialogAfterNameCollection(30.0f)); } }
// Update is called once per frame void Update() { WakeWordState = WWEList[0].GetState(); DictationState = STT.GetState(); //lasse das Mikrofon Overlay blinken, falls TTS aktiv ist /*if (DictationState.Equals(SpeechSystemStatus.Running)) { * StartCoroutine("FlashMicrophoneOverlay"); * }*/ //WakeWordStateText.text = WakeWordState.ToString(); //DictationStateText.text = DictationState.ToString(); if (WantToChangeToWakeWordDetection) { Debug.LogError("*****Sie möchten zur WakeWordEngine wechseln..."); if (DictationState.Equals(SpeechSystemStatus.Running)) { Debug.LogError("....aber der DictationMode lief noch.****"); Debug.LogError("DictationState: " + DictationState); Debug.LogErrorFormat("ASRQueue Count: {0}", ASRModeSwitchQueue.Count); } else if (DictationState.Equals(SpeechSystemStatus.Stopped)) { Debug.LogError("....und los gehts.*******"); foreach (IWakeWordEngineInterface WWE in WWEList) { WWE.StartDetection(); } WantToChangeToWakeWordDetection = false; isSwitchingASRMode = false; } else { Debug.LogErrorFormat("......_______________ERROR!!!__________...DictationState steht auf: {0}", DictationState); } } /*if(PhraseRecognitionSystem.Status.Equals(SpeechSystemStatus.Stopped) && STT.dictationRecognizer.Status.Equals(SpeechSystemStatus.Stopped)) * { * Debug.Log("------ Keine Spracherkennung aktiv. Starte WakeWordEngine"); * SwitchToWakeWordDetection("fehler erkannt"); * }*/ int i = 0; foreach (AsrSwitchDelegate command in ASRModeSwitchQueue) { Debug.LogErrorFormat("Befehl {0} befindet sich an Position {1}", command.Method.Name, i); i++; } //Falls zuletzt ausgeführter Wechsel fertig -> nehme den nächsten aus der Warteschlange und führe ihn aus if (ASRModeSwitchQueue.Count != 0) { if (!isSwitchingASRMode) { if (ASRModeSwitchQueue.Count == 1) //Bei nur einem in der Liste und keinem der gerade arbeiten kann direkt gewechselt werden { //Ignoeriere Wechsel, wenn dieser Modus bereits aktiv ist if ((ASRModeSwitchQueue.Peek().Method.Name.Equals(SwitchToSTT.Method.Name) && DictationState.Equals(SpeechSystemStatus.Stopped)) || (ASRModeSwitchQueue.Peek().Method.Name.Equals(SwitchToWWE.Method.Name) && WakeWordState.Equals(SpeechSystemStatus.Stopped))) { Debug.LogError("Haben nur einen Befehl in der Warteschlage und führen diesen aus."); ASRModeSwitchQueue.Dequeue()(); } else { Debug.LogError("Modus in den gewechselt werden soll ist bereits aktiv. -> Pop ohne Ausführung"); ASRModeSwitchQueue.Dequeue(); } } else { if (ASRModeSwitchQueue.Peek().Method.Name.Equals(SwitchToSTT.Method.Name)) { //Debug.LogError("Nehme das vordere der Warteschlage weg. **STT Befehl**"); //ASRModeSwitchQueue.Dequeue()(); AsrSwitchDelegate topFunction = ASRModeSwitchQueue.Dequeue(); if (DictationState.Equals(SpeechSystemStatus.Stopped)) //wenn zur STT gewechselt werden soll darf diese momentan nicht aktiv sein { Debug.LogError("Nehme das vordere der Warteschlage weg. **STT Befehl**"); topFunction(); //ASRModeSwitchQueue.Dequeue()(); } else { Debug.LogErrorFormat("DictationState steht auf: {0}. Ich kann daher nicht zu STT wechseln. --POP--", DictationState); } } else if (ASRModeSwitchQueue.Peek().Method.Name.Equals(SwitchToWWE.Method.Name)) //für WWE muss STT beendet sein { //Debug.LogError("Nehme das vordere der Warteschlage weg. **WWE Befehl**"); //ASRModeSwitchQueue.Dequeue()(); AsrSwitchDelegate topFunction = ASRModeSwitchQueue.Dequeue(); if (WakeWordState.Equals(SpeechSystemStatus.Stopped)) { Debug.LogError("Nehme das vordere der Warteschlage weg. **WWE Befehl**"); topFunction(); //ASRModeSwitchQueue.Dequeue()(); } else { Debug.LogErrorFormat("WakeWordState steht auf: {0}. Ich kann daher nicht zu WWE wechseln.--POP--", WakeWordState); } } else { Debug.LogErrorFormat("Konnte Methode {0} nicht ausführen, da der Gegenpart noch lief.", ASRModeSwitchQueue.Peek().Method.Name); } } } else if (isSwitchingASRMode) { Debug.LogErrorFormat("Warte mit Mode Wechsel... ein anderer wechselt noch. WWEState: {0}, STTState: {1}", WakeWordState, DictationState); } } else { //Debug.Log("Kein Wechsel beantragt."); } if (Input.GetKey(KeyCode.LeftControl) && Input.GetKeyDown(KeyCode.H)) { RefreshWakeWordDetection(); } }