private void ListenForInput()
        {
            try {
                // try to restore saved state after reloading the configuration file.
                consoleInput.RestoreSavedState();

                while (true)
                {
                    string input = consoleInput.ReadLine();

                    // input will be null when Skyrim terminated (stdin closed)
                    if (input == null)
                    {
                        config.Stop();
                        break;
                    }

                    Trace.TraceInformation("Received command: {0}", input);
                    lock (dialogueLock) {
                        string[] tokens  = input.Split('|');
                        string   command = tokens[0];
                        if (command.Equals("START_DIALOGUE"))
                        {
                            consoleInput.currentDialogue = input;
                            if (dialogueEnabled)
                            {
                                currentDialogue = DialogueList.Parse(string.Join("|", tokens, 1, tokens.Length - 1), config);
                                // Switch to dialogue mode
                                recognizer.StartSpeechRecognition(true, currentDialogue);
                            }
                            else
                            {
                                Trace.TraceInformation("Dialogue was disabled, pause the speech recognition");
                                recognizer.StopRecognition();
                            }
                        }
                        else if (command.Equals("STOP_DIALOGUE"))
                        {
                            // Switch to command mode
                            recognizer.StartSpeechRecognition(false, config.GetConsoleCommandList(), favoritesList);
                            currentDialogue = null;
                            consoleInput.currentDialogue = null;
                        }
                        else if (command.Equals("FAVORITES"))
                        {
                            consoleInput.currentFavoritesList = input;
                            favoritesList.Update(string.Join("|", tokens, 1, tokens.Length - 1));
                            if (consoleInput.currentDialogue == null)
                            {
                                recognizer.StartSpeechRecognition(false, config.GetConsoleCommandList(), favoritesList);
                            }
                        }
                    }
                }
            } catch (Exception ex) {
                Trace.TraceError(ex.ToString());
            }
        }
Пример #2
0
        public void Start()
        {
            try {
                favoritesList   = new FavoritesList(config);
                spellBook       = new SpellBook(config);
                shoutsKnowledge = new ShoutsKnowledge(config);
                commandList     = config.GetConsoleCommandList();

                commandQueue = new BlockingCollection <string>();
                recognizer   = new SpeechRecognitionManager(config);
                recognizer.OnDialogueLineRecognized += Recognizer_OnDialogueLineRecognized;

                // Start in command-mode
                recognizer.StartSpeechRecognition(false, commandList, favoritesList, spellBook, shoutsKnowledge);

                listenThread     = new Thread(ListenForInput);
                submissionThread = new Thread(SubmitCommands);
                submissionThread.Start();
                listenThread.Start();
            }
            catch (Exception ex) {
                Trace.TraceError("Failed to initialize speech recognition due to error:");
                Trace.TraceError(ex.ToString());
            }
        }
        private static void ListenForInput()
        {
            try {
                while (true)
                {
                    string input = Console.ReadLine();

                    // input will be null when Skyrim is terminated
                    if (input == null)
                    {
                        Trace.TraceInformation("Skyrim is terminated, recognition service will quit.");
                        break;
                    }

                    Trace.TraceInformation("Received command: {0}", input);

                    string[] tokens  = input.Split('|');
                    string   command = tokens[0];
                    if (command.Equals("START_DIALOGUE"))
                    {
                        lock (dialogueLock) {
                            currentDialogue = DialogueList.Parse(string.Join("|", tokens, 1, tokens.Length - 1));
                        }
                        // Switch to dialogue mode
                        recognizer.StartSpeechRecognition(true, currentDialogue);
                    }
                    else if (command.Equals("STOP_DIALOGUE"))
                    {
                        // Switch to command mode
                        recognizer.StartSpeechRecognition(false, Configuration.GetConsoleCommandList(), favoritesList);
                        lock (dialogueLock) {
                            currentDialogue = null;
                        }
                    }
                    else if (command.Equals("FAVORITES"))
                    {
                        favoritesList.Update(string.Join("|", tokens, 1, tokens.Length - 1));
                        if (currentDialogue == null)
                        {
                            recognizer.StartSpeechRecognition(false, Configuration.GetConsoleCommandList(), favoritesList);
                        }
                    }
                }
            } catch (Exception ex) {
                Trace.TraceError(ex.ToString());
            }
        }
        public static Thread Start()
        {
            try {
                favoritesList = new FavoritesList();
                commandQueue  = new BlockingCollection <string>();
                recognizer    = new SpeechRecognitionManager();
                recognizer.OnDialogueLineRecognized += Recognizer_OnDialogueLineRecognized;

                // Start in command-mode
                recognizer.StartSpeechRecognition(false, Configuration.GetConsoleCommandList(), favoritesList);

                Thread listenThread = new Thread(ListenForInput);
                submissionThread = new Thread(SubmitCommands);
                submissionThread.Start();
                listenThread.Start();
                return(listenThread);
            }
            catch (Exception ex) {
                Trace.TraceError("Failed to initialize speech recognition due to error:");
                Trace.TraceError(ex.ToString());
            }

            return(null);
        }
Пример #5
0
        private void ListenForInput()
        {
            try {
                // try to restore saved state after reloading the configuration file.
                consoleInput.RestoreSavedState();

                while (true)
                {
                    string input = consoleInput.ReadLine();

                    // input will be null when Skyrim terminated (stdin closed)
                    if (input == null)
                    {
                        break;
                    }

                    Trace.TraceInformation("Received command: {0}", input);

                    string[] tokens  = input.Split('|');
                    string   command = tokens[0];

                    if (command.Equals("START_DIALOGUE"))
                    {
                        // Switch to dialogue mode
                        consoleInput.currentDialogue = input;
                        lock (dialogueLock) {
                            currentDialogue = DialogueList.Parse(string.Join("|", tokens, 1, tokens.Length - 1), config);
                        }
                    }
                    else if (command.Equals("STOP_DIALOGUE"))
                    {
                        consoleInput.currentDialogue = null;
                        // Switch to command mode
                        lock (dialogueLock) {
                            currentDialogue = null;
                        }
                    }
                    else if (command.Equals("FAVORITES"))
                    {
                        consoleInput.currentFavoritesList = input;
                        favoritesList.Update(string.Join("|", tokens, 1, tokens.Length - 1));
                    }
                    else if (command.Equals("SPELLBOOK"))
                    {
                        spellBook.UpdateSpells(tokens.Skip(1));
                    }
                    else if (command.Equals("SHOUTS"))
                    {
                        shoutsKnowledge.UpdateShouts(tokens.Skip(1));
                    }
                    else if (command.Equals("GAMESTATE"))
                    {
                        GameState newState;
                        newState.currentMenu   = tokens[1];
                        newState.isInCombat    = tokens[2].Equals("1");
                        newState.isWeaponDrawn = tokens[3].Equals("1");
                        newState.isSneaking    = tokens[4].Equals("1");

                        recognizer.SetGameState(newState);
                    }


                    if (currentDialogue != null)
                    {
                        recognizer.StartSpeechRecognition(true, currentDialogue);
                    }
                    else
                    {
                        recognizer.StartSpeechRecognition(false, commandList, favoritesList, spellBook, shoutsKnowledge);
                    }
                }
            } catch (Exception ex) {
                Trace.TraceError(ex.ToString());
            }
        }