示例#1
0
    // 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));
        }
    }
示例#2
0
    // 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();
        }
    }