/// <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)); }
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); } }
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); } }
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)); } } } }
public System.Speech.Recognition.GrammarBuilder GetCommandArgs() { var gb = new System.Speech.Recognition.GrammarBuilder(); gb.AppendDictation(); return gb; }