/// <summary> /// Tries to load a SRGS grammar for SAPI 5.1 or earlier /// </summary> /// <returns>true if grammar was loaded successfully, false otherwise</returns> protected override bool LoadGrammar(FileInfo grammarFile) { if ((grammarFile == null) || !grammarFile.Exists) { return(false); } hasGrammar = false; try { // set up the grammar grammar = recoContext.CreateGrammar(0); // set up the dictation grammar grammar.DictationLoad("", SpeechLoadOption.SLOStatic); grammar.DictationSetState(SpeechRuleState.SGDSInactive); // load the command and control grammar grammar.CmdLoadFromFile(grammarFile.FullName, SpeechLoadOption.SLOStatic); grammar.CmdSetRuleIdState(0, SpeechRuleState.SGDSInactive); // activate one of the grammars if we don't want both at the same time //if (commandAndControl) grammar.CmdSetRuleIdState(0, SpeechRuleState.SGDSActive); //else // grammar.DictationSetState(SpeechRuleState.SGDSActive); //if (GrammarLoaded != null) GrammarLoaded(this); hasGrammar = true; } catch { hasGrammar = false; } return(hasGrammar); }
// Event handler for reaching the end of an audio input stream public void RecoContext_EndStream(int StreamNumber, object StreamPosition, bool StreamReleased) { // VA.WriteToLog("End of stream, cleaning up now"); // Output info to event log // Clean up now that voice recognition is complete try // Attempt the following code { if (UseDictation == true) { grammar.DictationSetState(SpeechRuleState.SGDSInactive); // Deactivate dictation grammar } else { grammar.CmdSetRuleIdState(0, SpeechRuleState.SGDSInactive); // Deactivate the loaded grammar } } catch // Handle exceptions in above code { VA.SetText("~~RecognitionError", "Error during cleanup process (SAPI)"); // Send error detail back to VoiceAttack as text variable } finally // Runs whether an exception is encountered or not { Application.ExitThread(); // Terminates the message loop on the current thread } }
public void create(Familiar_Document document, string filename) { parent_document = document; name = parent_document.name; file_name = filename; #if !DEBUG try { #endif grammar.CmdLoadFromFile(file_name, SpeechLoadOption.SLOStatic); #if !DEBUG } catch (Exception ex) { Feedback.print(file_name, Feedback.Status.info); Feedback.print(ex); return; } #endif grammar.CmdSetRuleIdState(0, SpeechRuleState.SGDSActive); grammar.State = SpeechGrammarState.SGSDisabled; // ++next_id; }
bool UseDictation; // Declare boolean variable for storing pronunciation dictation grammar setting public void main() { // Reset relevant VoiceAttack text variables VA.SetText("~~RecognitionError", null); VA.SetText("~~RecognizedText", null); VA.SetText("~~SAPIPhonemes", null); VA.SetText("~~SAPIPhonemesRaw", null); //VA.SetText("~~FalseRecognitionFlag", null); // Retrieve the desired word data contained within VoiceAttack text variable string ProcessText = null; // Initialize string variable for storing the text of interest if (VA.GetText("~~ProcessText") != null) // Check if user provided valid text in input variable { ProcessText = VA.GetText("~~ProcessText"); // Store text of interest held by VA text variable } else { VA.SetText("~~RecognitionError", "Error in input text string (SAPI)"); // Send error detail back to VoiceAttack as text variable return; // End code processing } // Retrieve path to speech grammar XML file from VoiceAttack GrammarPath = VA.GetText("~~GrammarFilePath"); // Retrieve path to voice recognition input wav file from VoiceAttack AudioPath = VA.GetText("~~AudioFilePath"); // Check if TTS engine is voicing the input for the speech recognition engine if (VA.GetBoolean("~~UserVoiceInput") == false) { //VA.WriteToLog("creating wav file"); if (TextToWav(AudioPath, ProcessText) == false) // Create wav file with specified path that voices specified text (with text-to-speech) and check if the creation was NOT successful { return; // Stop executing the code } } // Create speech recognizer and associated context SpInprocRecognizer MyRecognizer = new SpInprocRecognizer(); // Create new instance of SpInprocRecognizer SpInProcRecoContext RecoContext = (SpInProcRecoContext)MyRecognizer.CreateRecoContext(); // Initialize the SpInProcRecoContext (in-process recognition context) try // Attempt the following code { // Open the created wav in a new FileStream FileStream = new SpFileStream(); // Create new instance of SpFileStream FileStream.Open(AudioPath, SpeechStreamFileMode.SSFMOpenForRead, true); // Open the specified file in the FileStream for reading with events enabled // Set the voice recognition input as the FileStream MyRecognizer.AudioInputStream = FileStream; // This will internally "speak" the wav file for input into the voice recognition engine // Set up recognition event handling RecoContext.Recognition += new _ISpeechRecoContextEvents_RecognitionEventHandler(RecoContext_Recognition); // Register for successful voice recognition events RecoContext.FalseRecognition += new _ISpeechRecoContextEvents_FalseRecognitionEventHandler(RecoContext_FalseRecognition); // Register for failed (low confidence) voice recognition events if (VA.GetBoolean("~~ShowRecognitionHypothesis") == true) // Check if user wants to show voice recognition hypothesis results { RecoContext.Hypothesis += new _ISpeechRecoContextEvents_HypothesisEventHandler(RecoContext_Hypothesis); // Register for voice recognition hypothesis events } RecoContext.EndStream += new _ISpeechRecoContextEvents_EndStreamEventHandler(RecoContext_EndStream); // Register for end of file stream events // Set up the grammar grammar = RecoContext.CreateGrammar(); // Initialize the grammar object UseDictation = (bool?)VA.GetBoolean("~~UseDictation") ?? false; // Set UserDictation based on value from VoiceAttack boolean variable if (UseDictation == true) // Check if pronunciation dictation grammar should be used with speech recognition { //grammar.DictationLoad("", SpeechLoadOption.SLOStatic); // Load blank dictation topic into the grammar grammar.DictationLoad("Pronunciation", SpeechLoadOption.SLOStatic); // Load pronunciation dictation topic into the grammar so that the raw (unfiltered) phonemes may be retrieved grammar.DictationSetState(SpeechRuleState.SGDSActive); // Activate dictation grammar } else { grammar.CmdLoadFromFile(GrammarPath, SpeechLoadOption.SLODynamic); // Load custom XML grammar file grammar.CmdSetRuleIdState(0, SpeechRuleState.SGDSActive); // Activate the loaded grammar } Application.Run(); // Starts a standard application message loop on the current thread } catch // Handle exceptions in above code { VA.SetText("~~RecognitionError", "Error during voice recognition setup (SAPI)"); // Send error detail back to VoiceAttack as text variable return; // Stop executing the code } finally // Runs whether an exception is encountered or not { MyRecognizer = null; // Set to null in preparation for garbage collection FileStream.Close(); // Close the input FileStream FileStream = null; // Set to null in preparation for garbage collection // Close up recognition event handling RecoContext.Recognition -= new _ISpeechRecoContextEvents_RecognitionEventHandler(RecoContext_Recognition); // Unregister for successful voice recognition events RecoContext.FalseRecognition -= new _ISpeechRecoContextEvents_FalseRecognitionEventHandler(RecoContext_FalseRecognition); // Unregister for failed (low confidence) voice recognition events if (VA.GetBoolean("~~ShowRecognitionHypothesis") == true) // Check if user wanted to show voice recognition hypothesis results { RecoContext.Hypothesis -= new _ISpeechRecoContextEvents_HypothesisEventHandler(RecoContext_Hypothesis); // Unregister for voice recognition hypothesis events } RecoContext.EndStream -= new _ISpeechRecoContextEvents_EndStreamEventHandler(RecoContext_EndStream); // Unregister for end of file stream events RecoContext = null; // Set to null in preparation for garbage collection } //VA.WriteToLog("voice recognition complete"); // Output info to event log }
/// <summary> /// Tries to load a SRGS grammar for SAPI 5.1 or earlier /// </summary> /// <returns>true if grammar was loaded successfully, false otherwise</returns> protected override bool LoadGrammar(FileInfo grammarFile) { if ((grammarFile == null)||!grammarFile.Exists) return false; hasGrammar = false; try { // set up the grammar grammar = recoContext.CreateGrammar(0); // set up the dictation grammar grammar.DictationLoad("", SpeechLoadOption.SLOStatic); grammar.DictationSetState(SpeechRuleState.SGDSInactive); // load the command and control grammar grammar.CmdLoadFromFile(grammarFile.FullName, SpeechLoadOption.SLOStatic); grammar.CmdSetRuleIdState(0, SpeechRuleState.SGDSInactive); // activate one of the grammars if we don't want both at the same time //if (commandAndControl) grammar.CmdSetRuleIdState(0, SpeechRuleState.SGDSActive); //else // grammar.DictationSetState(SpeechRuleState.SGDSActive); //if (GrammarLoaded != null) GrammarLoaded(this); hasGrammar = true; } catch { hasGrammar= false; } return hasGrammar; }