/// <summary>
        /// Adds one or more Grammars to this Grammar
        /// COM does not support Variable argument lists, so for now this method only support up to 10 parameters
        /// </summary>
        public void AppendGrammars(DesktopGrammar g1, DesktopGrammar g2 = null, DesktopGrammar g3 = null, DesktopGrammar g4 = null, DesktopGrammar g5 = null,
                                   DesktopGrammar g6 = null, DesktopGrammar g7 = null, DesktopGrammar g8 = null, DesktopGrammar g9 = null, DesktopGrammar g10 = null)
        {
            var grammars = new[] { g1, g2, g3, g4, g5, g6, g7, g8, g9, g10 };
            var max      = -1;

            for (var i = 0; i < 10; i++)
            {
                if (grammars[i] == null)
                {
                    break;
                }
                max = i;
            }

            max++;

            var grammarBuilderArray = new System.Speech.Recognition.GrammarBuilder[max];

            for (var i = 0; i < max; i++)
            {
                grammarBuilderArray[i] = grammars[i].GrammarBuilder;
            }

            GrammarBuilder.Append(new System.Speech.Recognition.Choices(grammarBuilderArray));
        }
Example #2
0
        public void Start()
        {
            var _commands = Commands;

            //if (IncludeCommonWords)
            //{
            //    if (string.IsNullOrEmpty(_commands)) _commands = Extensions.GetStringFromResource(typeof(MSSpeechPlugin), "commands.txt");
            //    if (!string.IsNullOrEmpty(_commands)) _commands += "\n" + Extensions.GetStringFromResource(typeof(MSSpeechPlugin), "commands.txt");
            //}
            if (!string.IsNullOrEmpty(_commands) || IncludeCommonWords)
            {
                var gBuilder = new System.Speech.Recognition.GrammarBuilder();
                //if (IncludeCommonWords)
                //{
                //    gBuilder.AppendDictation();
                //}
                if (!string.IsNullOrEmpty(_commands))
                {
                    var commands = new System.Speech.Recognition.Choices();
                    var array    = _commands.Split(new char[] { '\n', '\r' }).Where(x => !string.IsNullOrEmpty(x)).ToArray();
                    commands.Add(array);
                    gBuilder.Append(commands);
                }
                if (IncludeCommonWords)
                {
                    gBuilder.AppendDictation();
                }
                var grammer = new System.Speech.Recognition.Grammar(gBuilder);
                recEngine.UnloadAllGrammars();
                recEngine.LoadGrammarAsync(grammer);
                recEngine.RecognizeAsync(System.Speech.Recognition.RecognizeMode.Multiple);
            }
        }
Example #3
0
        public static void Test()
        {
            System.Speech.Recognition.SpeechRecognitionEngine recEngine = new System.Speech.Recognition.SpeechRecognitionEngine();
            recEngine.SetInputToDefaultAudioDevice();

            System.Speech.Recognition.Choices commands = new System.Speech.Recognition.Choices();
            commands.Add(new string[] { "say Hi", "say Hello" });
            System.Speech.Recognition.GrammarBuilder gb = new System.Speech.Recognition.GrammarBuilder();
            gb.Append(commands);
            System.Speech.Recognition.Grammar g = new System.Speech.Recognition.Grammar(gb);

            recEngine.LoadGrammarAsync(g);
            recEngine.RecognizeAsync(System.Speech.Recognition.RecognizeMode.Multiple);

            recEngine.SpeechRecognized += OnSpeechRecognized;
        } // End Sub Test
        private void PwdGrammar()
        {
            using (System.Speech.Recognition.SpeechRecognitionEngine recognizer = new System.Speech.Recognition.SpeechRecognitionEngine(new System.Globalization.CultureInfo("en-US")))
            {
                //recognizer.LoadGrammar(new System.Speech.Recognition.DictationGrammar());

                System.Speech.Recognition.GrammarBuilder pwdBuilder      = new System.Speech.Recognition.GrammarBuilder("My Password is");
                System.Speech.Recognition.GrammarBuilder wildcardBuilder = new System.Speech.Recognition.GrammarBuilder();
                wildcardBuilder.AppendWildcard();
                System.Speech.Recognition.SemanticResultKey pwd = new System.Speech.Recognition.SemanticResultKey("Password", wildcardBuilder);
                pwdBuilder += pwd;

                System.Speech.Recognition.Grammar grammar = new System.Speech.Recognition.Grammar(pwdBuilder);
                grammar.Name              = "Password input";
                grammar.SpeechRecognized += new EventHandler <System.Speech.Recognition.SpeechRecognizedEventArgs>(Grammar_SpeechRecognized);

                grammar.Enabled = true;
                recognizer.LoadGrammar(grammar);
                //UpdateGrammarTree(_grammarTreeView, _recognizer);
            }
        }
        private void PwdGrammar()
        {
            using (System.Speech.Recognition.SpeechRecognitionEngine recognizer = new System.Speech.Recognition.SpeechRecognitionEngine(new System.Globalization.CultureInfo("en-US")))
            {
                //recognizer.LoadGrammar(new System.Speech.Recognition.DictationGrammar());

                System.Speech.Recognition.GrammarBuilder pwdBuilder = new System.Speech.Recognition.GrammarBuilder("My Password is");
                System.Speech.Recognition.GrammarBuilder wildcardBuilder = new System.Speech.Recognition.GrammarBuilder();
                wildcardBuilder.AppendWildcard();
                System.Speech.Recognition.SemanticResultKey pwd = new System.Speech.Recognition.SemanticResultKey("Password", wildcardBuilder);
                pwdBuilder += pwd;

                System.Speech.Recognition.Grammar grammar = new System.Speech.Recognition.Grammar(pwdBuilder);
                grammar.Name = "Password input";
                grammar.SpeechRecognized += new EventHandler<System.Speech.Recognition.SpeechRecognizedEventArgs>(Grammar_SpeechRecognized);

                grammar.Enabled = true;
                recognizer.LoadGrammar(grammar);
                //UpdateGrammarTree(_grammarTreeView, _recognizer);
            }
        }
Example #6
0
        public static async System.Threading.Tasks.Task <string[]> WaitForWakeUpWordThenRecognizeRemainingSpeechAsync(string[] WakeUpWords)
        {
            Console.WriteLine("Say the wakeup word (" + string.Join(" ", WakeUpWords) + ") followed by the request ...");
            CallServices <ISpeechToTextService, ISpeechToTextServiceResponse> wSTT = new CallServices <ISpeechToTextService, ISpeechToTextServiceResponse>(null);

            System.Diagnostics.Stopwatch stopWatch = new System.Diagnostics.Stopwatch();
            stopWatch.Start(); // continues until return
            System.Globalization.CultureInfo ci = new System.Globalization.CultureInfo(Options.options.locale.language);
            while (true)
            {
                using (System.Speech.Recognition.SpeechRecognitionEngine RecognitionEngine = new System.Speech.Recognition.SpeechRecognitionEngine(ci))
                {
                    RecognitionEngine.SetInputToDefaultAudioDevice();

                    // build wakeup word grammar
                    System.Speech.Recognition.GrammarBuilder wakeUpWordBuilder = new System.Speech.Recognition.GrammarBuilder();
                    wakeUpWordBuilder.Append(new System.Speech.Recognition.Choices(WakeUpWords));

                    // build words-after-wakeup word grammar
                    System.Speech.Recognition.GrammarBuilder wordsAfterWakeUpWordBuilder = new System.Speech.Recognition.GrammarBuilder();
                    wordsAfterWakeUpWordBuilder.AppendWildcard();
                    System.Speech.Recognition.SemanticResultKey wordsAfterWakeUpWordKey = new System.Speech.Recognition.SemanticResultKey("wordsAfterWakeUpWordKey", wordsAfterWakeUpWordBuilder);
                    wakeUpWordBuilder.Append(new System.Speech.Recognition.SemanticResultKey("wordsAfterWakeUpWordKey", wordsAfterWakeUpWordBuilder));

                    // initialize recognizer, wait for result, save result to file
                    System.Speech.Recognition.Grammar g = new System.Speech.Recognition.Grammar(wakeUpWordBuilder);
                    RecognitionEngine.LoadGrammar(g);
                    if (Options.options.wakeup.initialSilenceTimeout == -1)
                    {
                        RecognitionEngine.InitialSilenceTimeout = TimeSpan.FromTicks(Int32.MaxValue); // never timeout
                    }
                    else
                    {
                        RecognitionEngine.InitialSilenceTimeout = TimeSpan.FromSeconds(Options.options.wakeup.initialSilenceTimeout); // timesout after this much silence
                    }
                    RecognitionEngine.EndSilenceTimeout = TimeSpan.FromSeconds(Options.options.wakeup.endSilenceTimeout);             // maximum silence allowed after hearing wakeup word
#if true                                                                                                                              // experimenting with Babble and other timeouts
                    RecognitionEngine.BabbleTimeout = TimeSpan.FromSeconds(0);
#else
                    RecognitionEngine.BabbleTimeout = TimeSpan.FromTicks(UInt32.MaxValue);
#endif
                    System.Speech.Recognition.RecognitionResult WakeUpWordResult = RecognitionEngine.Recognize();
                    // RecognitionResult is null when some unidentified timeout expires around 30 seconds. Can't find a way to make timeouts infinite so just looping.
                    if (WakeUpWordResult == null)
                    {
                        continue;
                    }
                    using (System.IO.FileStream waveStream = new System.IO.FileStream(Options.options.tempFolderPath + Options.options.audio.speechSynthesisFileName, System.IO.FileMode.Create))
                    {
                        WakeUpWordResult.Audio.WriteToWaveStream(waveStream);
                        waveStream.Flush();
                        waveStream.Close();
                    }

                    Console.WriteLine("Wake up word detected (" + WakeUpWordResult.Words[0].Text + "): confidence:" + WakeUpWordResult.Confidence + " Elapsed Ms:" + stopWatch.ElapsedMilliseconds);
                    if (WakeUpWordResult.Confidence >= Options.options.wakeup.confidence)
                    {
                        byte[] bytes = await Helpers.ReadBytesFromFileAsync(Options.options.audio.speechSynthesisFileName);

                        string text       = WakeUpWordResult.Text;
                        int    sampleRate = await Audio.GetSampleRateAsync(Options.options.tempFolderPath + Options.options.audio.speechSynthesisFileName);

                        System.Collections.Generic.Dictionary <string, string> apiArgs = new System.Collections.Generic.Dictionary <string, string>()
                        {
                            { "sampleRate", sampleRate.ToString() }
                        };
#if false // for testing
                        await windows.SpeechToTextAsync(bytes, apiArgs);

                        Console.WriteLine("Windows STT (demo):\"" + windows.ResponseResult + "\" Total Elapsed ms:" + windows.TotalElapsedMilliseconds + " Request Elapsed ms:" + windows.RequestElapsedMilliseconds);
#endif
                        System.IO.MemoryStream stream = new System.IO.MemoryStream(bytes);
                        foreach (ISpeechToTextService STT in new FindServices <ISpeechToTextService>(Options.commandservices["SpeechToText"].preferredServices).PreferredOrderingOfServices)
                        {
                            // ISpeechToTextService STT = (ISpeechToTextService)constructor.Invoke(Type.EmptyTypes);
                            SpeechToTextServiceResponse r = await STT.SpeechToTextServiceAsync(bytes, apiArgs);

                            if (r.StatusCode == 200)
                            {
                                text = r.ResponseResult;
                                Console.WriteLine(r.Service.name + ":\"" + text + "\" Total Elapsed ms:" + r.TotalElapsedMilliseconds + " Request Elapsed ms:" + r.RequestElapsedMilliseconds);
                                return(text.Split(" ".ToCharArray(), StringSplitOptions.None));
                            }
                            else
                            {
                                Console.WriteLine(r.Service.name + " not available.");
                            }
                        }
                        CallServiceResponse <ISpeechToTextServiceResponse> response = await wSTT.CallServiceAsync(bytes, apiArgs);

                        text = response.ResponseResult;
                        Console.WriteLine("Windows STT (default):\"" + text + "\" Total Elapsed ms:" + response.TotalElapsedMilliseconds + " Request Elapsed ms:" + response.RequestElapsedMilliseconds);
                        return(text.Split(" ".ToCharArray(), StringSplitOptions.None));
                    }
                }
            }
        }
Example #7
0
 public System.Speech.Recognition.GrammarBuilder GetCommandArgs()
 {
     var gb = new System.Speech.Recognition.GrammarBuilder();
     gb.AppendDictation();
     return gb;
 }