Speech Recognition Makes a loop

Viewed 66

I'm working on a speech recognizer but every time I say a word it puts it in a loop and keeps saying:

hi my name is Jarvis how can I help you?

What should I do?
I've also tried RecognizeAsyncCancel() but it didn't work!

My code is below:

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 RecEngine = new SpeechRecognitionEngine();
        SpeechSynthesizer speech = new SpeechSynthesizer();
        public Form1()
        {
            InitializeComponent();

            Choices choices = new Choices();
            string[] text = File.ReadAllLines(Environment.CurrentDirectory + "//grammer.txt");
            choices.Add(text);
            Grammar grammar = new Grammar(new GrammarBuilder(choices));
            RecEngine.LoadGrammar(grammar);
            RecEngine.SetInputToDefaultAudioDevice();
            RecEngine.RecognizeAsync(RecognizeMode.Multiple);
            RecEngine.SpeechRecognized += new EventHandler<SpeechRecognizedEventArgs>(RecEngine_SpeechRecognized);

            speech.SelectVoiceByHints(VoiceGender.Male);
        }

        private void RecEngine_SpeechRecognized(object sender, SpeechRecognizedEventArgs e)
        {

            string result = e.Result.Text;
            if (result == "Hello")
            {
                result = "";
                result = "Hi, my name is Jarvis, how can I help you";
            }

            if (result == "Hi")
            {
                result = "";
                result = "It is currently " + DateTime.Now.ToLongTimeString();
            }

            speech.SpeakAsync(result);
            lblresult.Text = result;
            result = "";
            MessageBox.Show("a");
        }

        private void Form1_Load(object sender, EventArgs e)
        {

        }


    }
}
1 Answers

For starters, the setup you are using, is creating your problems, due mostly from arrangement of your code. You should also be incorporating a switch case statement in your recEngine Sub. Also, you are using SpeechSynthesizer speech in your declaration and your SpeechSynthesizer should compliment that and be: speech.Speak("Hi, my name is Jarvis, how can I help you") NOT result = "Hi, my name is Jarvis, how can I help you";. You don't need this either: result = ""; You can still use If Statements within Case Statements if you want. With that said, here is an example from one of my old projects. I am leaving you with a link to the full project of the code. It will get you on the right path: Just scroll down to the Form1.cs at my repository. https://github.com/DeadReport77/Scarlett-Speech-Recognition-Final-Production/commit/20f4db5d3b75b03d601d39c6fe54e8261c7976f0

I am the creator of Scarlett Witch Speech Recognition surfacing the net on YouTube and other places. This is the YouTube link: https://www.youtube.com/watch?v=39S10FoCbIA

The code will solve all your problems as well (switch case example):

private void RecEngine_SpeechRecognized(object sender, SpeechRecognizedEventArgs e)
{
    switch (e.Result.Text)
    {
        case "scarlett mute volume":
            SendMessageW(this.Handle, WM_APPCOMMAND, this.Handle,
        (IntPtr)APPCOMMAND_VOLUME_MUTE);
            break;
        case "scarlett volume up":
            int repeat = 10;
            for (int i = 0; i < repeat; i++)
                SendMessageW(this.Handle, WM_APPCOMMAND, this.Handle,
            (IntPtr)APPCOMMAND_VOLUME_UP);
            break;
        case "scarlett volume down":
            for (int iter = 0; iter < 10; iter++)
                SendMessageW(this.Handle, WM_APPCOMMAND, this.Handle,
       (IntPtr)APPCOMMAND_VOLUME_DOWN);
            break;
        case "show commands":
            new SoundPlayer(@"C:\Users\Leeraoy.Jenkins\source\repos\Scarlett\Resources\list.wav").Play();
            Process.Start(@"C:\\Users\Leeraoy.Jenkins\source\repos\Scarlett\Resources\Commands.txt");
            break;
        case "tell me who you are":
            new SoundPlayer(@"C:\Users\Leeraoy.Jenkins\source\repos\Scarlett\Resources\info.wav").Play();
            break;
        case "scarlett open youtube":
            new SoundPlayer(@"C:\Users\Leeraoy.Jenkins\source\repos\Scarlett\Resources\youtube.wav").Play();
            Process.Start("chrome", "Http://www.youtube.com");
            break;
        case "scarlett movies":
            new SoundPlayer(@"C:\Users\Leeraoy.Jenkins\source\repos\Scarlett\Resources\movie.wav").Play();
            Process.Start("chrome", "http://www.tubitv.com");
            break;
        case "scarlett open github":
            new SoundPlayer(@"C:\Users\Leeraoy.Jenkins\source\repos\Scarlett\Resources\github.wav").Play();
            Process.Start("chrome", "Http://www.github.com");
            break;
        case "open wiki":
            new SoundPlayer(@"C:\Users\Leeraoy.Jenkins\source\repos\Scarlett\Resources\wiki.wav").Play();
            Process.Start("http://www.wikipedia.org/");
            break;
        case "scarlett microsoft office":
            new SoundPlayer(@"C:\Users\Leeraoy.Jenkins\source\repos\Scarlett\Resources\word.wav").Play();
            Process.Start("winword");
            break;
        case "stop listening":
            recEngine.RecognizeAsyncStop();
            new SoundPlayer(@"C:\Users\Leeraoy.Jenkins\source\repos\Scarlett\Resources\mic.wav").Play();
            break;
        case "open command":
            new SoundPlayer(@"C:\Users\Leeraoy.Jenkins\source\repos\Scarlett\Resources\prompt.wav").Play();
            System.Diagnostics.Process.Start("cmd");
            break;
        case "scarlett run system scan":
            Scanning f = new Scanning();
            f.Show();
            break;
        case "commit to memory":
            new SoundPlayer(@"C:\Users\Leeraoy.Jenkins\source\repos\Scarlett\Resources\storing.wav").Play();
            break;
        case "scarlett close":
            new SoundPlayer(@"C:\Users\Leeraoy.Jenkins\source\repos\Scarlett\Resources\shuttingdown.wav").Play();
            Sleep(TimeSpan.FromSeconds(2));
            Application.Exit();
            break;
        case "scarlett what day is it":
            Scarlett.Speak(DateTime.Today.ToString("dd-MM-yyyy"));
            break;
        case "scarlett out of the way":
            if (WindowState == FormWindowState.Normal)
            {
                WindowState = FormWindowState.Minimized;
                new SoundPlayer(@"C:\Users\Leeraoy.Jenkins\source\repos\Scarlett\Resources\standby.wav").Play();
            }
            break;
        case "scarlett come back":
            if (WindowState == FormWindowState.Minimized)
            {
                WindowState = FormWindowState.Normal;
                new SoundPlayer(@"C:\Users\Leeraoy.Jenkins\source\repos\Scarlett\Resources\comeback.wav").Play();
            }
            break;
        case "disparta":
            new SoundPlayer(@"C:\Users\Leeraoy.Jenkins\source\repos\Scarlett\Resources\closingapp.wav").Play();
            SendKeys.Send("%{F4}");
            break;
        case "scarlett play rammstein":
            new SoundPlayer(@"C:\Users\Leeraoy.Jenkins\source\repos\Scarlett\Resources\video.wav").Play();
            Process.Start("chrome", "https://www.youtube.com/watch?v=3b4szXcRFcs?autoplay=1&mute=1");
            break;
        case "page up":
            SendKeys.Send("{PGUP}");
            break;
        case "page down":
            SendKeys.Send("{PGDN}");
            break;
        case "new tab":
            SendKeys.Send("^{t}");
            break;
        case "switch tab":
            SendKeys.Send("^{TAB}");
            break;
        case "magnify":
            SendKeys.Send("^{+}");
            break;
        case "less":
            SendKeys.Send("^{-}");
            break;
        case "scarlett notepad":
            new SoundPlayer(@"C:\Users\Leeraoy.Jenkins\source\repos\Scarlett\Resources\notepad.wav").Play();
            Process.Start("notepad");
            break;
        case "scarlett visual studios":
            new SoundPlayer(@"C:\Users\Leeraoy.Jenkins\source\repos\Scarlett\Resources\visual.wav").Play();
            Process.Start("devenv.exe");
            break;
        default:
            new SoundPlayer(@"C:\Users\Leeraoy.Jenkins\source\repos\Scarlett\Resources\unknown.wav").Play();
            break;
    }
}
Related