簡體   English   中英

賈維斯需要太長時間才能回應

[英]jarvis takes too long to respond

我正在使用C#制作jarvis。 我對它進行了編碼,一旦我們說了什么,jarvis就會花很長時間來回復。 大概需要10到15分鍾才能回復,有時甚至沒有回復。 我希望jarvis在發出語音命令后盡快做出響應。

 using System;
    using System.IO;
    using System.Speech.Recognition;
    using System.Speech.Synthesis;
    using System.Windows.Forms;

    namespace Jarvis
    {
        public partial class Form1 : Form
        {
            SpeechRecognitionEngine _recognizer = new SpeechRecognitionEngine();
            SpeechSynthesizer JARVIS = new SpeechSynthesizer();
            string QEvent;
            string ProcWindow;
            double timer = 10;
            int count = 1;
            Random rnd = new Random();
            public Form1()
            {
                InitializeComponent();
            }

            private void Form1_Load(object sender, EventArgs e)
            {
                _recognizer.SetInputToDefaultAudioDevice();
                _recognizer.LoadGrammar(new Grammar(new GrammarBuilder(new Choices(File.ReadAllLines(@"C:\Users\Ashwini\Desktop\Jarvis\Jarvis\bin\Debug\commands.txt")))));
                _recognizer.SpeechRecognized += new EventHandler<SpeechRecognizedEventArgs>(_recognizer_SpeechRecognized);
                _recognizer.RecognizeAsync(RecognizeMode.Multiple);
            }
            void _recognizer_SpeechRecognized(object sender, SpeechRecognizedEventArgs e)
            {
                int ranNum = rnd.Next(1, 10);
                string speech = e.Result.Text;
                switch (speech)
                {

                    case "hello":
                    case "hello jarvis":
                        if (ranNum < 6) { JARVIS.Speak("Hello sir"); }
                        else if (ranNum > 5) { JARVIS.Speak("Hello"); }
                        break;
                    case "goodbye":
                    case "goodbye jarvis":
                    case "close":
                    case "close jarvis":
                        JARVIS.Speak("Until next time");
                        Close();
                        break;
                    case "jarvis":
                        if (ranNum < 5) { QEvent = ""; JARVIS.Speak("Yes sir"); }
                        else if (ranNum > 4) { QEvent = ""; JARVIS.Speak("Yes?"); }
                        break;

                    //WEBSITES
                    case "open google":
                        System.Diagnostics.Process.Start("https://www.google.com/");
                        break;
                    case "open my facebook":
                        System.Diagnostics.Process.Start("https://www.facebook.com/");
                        break;
                    case "open gmail":
                        System.Diagnostics.Process.Start("https://www.google.com/gmail/");
                        break;

                    //SHELL COMMANDS
                    case "open this pc":
                        System.Diagnostics.Process.Start("This PC");
                        JARVIS.Speak("Loading");
                        break;

                    case "open my folder":
                        System.Diagnostics.Process.Start("F:");
                        JARVIS.Speak("Loading");
                        break;

                    //CLOSE PROGRAMS
                    case "close this pc":
                        ProcWindow = "This PC";
                        StopWindow();
                        break;

                    //CONDITION OF DAY
                    case "what time is it":
                        DateTime now = DateTime.Now;
                        string time = now.GetDateTimeFormats('t')[0];
                        JARVIS.Speak(time);
                        break;
                    case "what day is it":
                        JARVIS.Speak(DateTime.Today.ToString("dddd"));
                        break;
                    case "whats the date":
                    case "whats todays date":
                        JARVIS.Speak(DateTime.Today.ToString("dd-MM-yyyy"));
                        break;

                    //OTHER COMMANDS
                    case "go fullscreen":
                        FormBorderStyle = FormBorderStyle.None;
                        WindowState = FormWindowState.Maximized;
                        TopMost = true;
                        JARVIS.Speak("expanding");
                        break;
                    case "exit fullscreen":
                        FormBorderStyle = FormBorderStyle.Sizable;
                        WindowState = FormWindowState.Normal;
                        TopMost = false;
                        break;
                    case "switch window":
                        SendKeys.Send("%{TAB " + count + "}");
                        count += 1;
                        break;

                    case "out of the way":
                        if (WindowState == FormWindowState.Normal || WindowState == FormWindowState.Maximized)
                        {
                            WindowState = FormWindowState.Minimized;
                            JARVIS.Speak("My apologies");
                        }
                        break;
                    case "come back":
                        if (WindowState == FormWindowState.Minimized)
                        {
                            JARVIS.Speak("Alright?");
                            WindowState = FormWindowState.Normal;
                        }
                        break;
                    case "show commands":
                        string[] commands = (File.ReadAllLines(@"C:\Users\Ashwini\Desktop\Jarvis\Jarvis\bin\Debug\commands.txt"));
                        JARVIS.Speak("Very well");
                        lstCommands.Items.Clear();
                        lstCommands.SelectionMode = SelectionMode.None;
                        lstCommands.Visible = true;
                        foreach (string command in commands)
                        {
                            lstCommands.Items.Add(command);
                        }
                        break;
                    case "hide listbox":
                        lstCommands.Visible = false;
                        break;

                }
            }

            private void StopWindow()
            {

            }
        }
    }

我不知道這段代碼有什么問題。 請幫幫我。

有關語音識別的深入教程,請參閱我的教程https://youtu.be/BJkymbvxlJs

使用語音識別時,您需要使用Async方法。 Jarvis.SpeakAsync異步方法將給出連續的命令和命令。

僅使用Jarvis.Speak您必須等待引擎完成。 例:

  Jarvis.Speak("this is what Jarvis will say after a  command is spoken");

使用Jarvis.Speak您無法執行任何命令。

   Jarvis.SpeakAsync("this is what Jarvis will say after a command is spoken");

使用Jarvis.SpeakAsync ,您可以在合成過程中暫停,停止和/或中斷語音引擎。

上面的教程鏈接顯示了SpeakAsync的基本格式以及如何在應用程序中將其用於語音識別。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM