I'm new to speech recognition and have developed a text editor which writes what I speak to it. I'm into a problem that I can enable the speech recognition through code, but cannot disable it. Can anyone please suggest how to disable speech recognition. My speech recognizing code is as follows:
//function to start/stop speech recognition
private void enableSpeechRecognitionToolStripMenuItem_Click(object sender, EventArgs e)
{
listener = new SpeechLib.SpSharedRecoContext();
//crating a share recognition object
listener.Recognition += new _ISpeechRecoContextEvents_RecognitionEventHandler(listener_Reco);
//creating a recgnition event handler object
grammar = listener.CreateGrammar(0);
//create grammar interface with ID = 0
grammar.DictationLoad("", SpeechLoadOption.SLOStatic);
//setting grammar load type to static
grammar.DictationSetState(SpeechRuleState.SGDSActive);
//activating speech dictation
enableSpeechRecognitionToolStripMenuItem.Checked = true;
//checked
toolStripStatusLabel1.Text = "[Speech Recognition Enabled]";
}
//function 开发者_StackOverflow社区to append the listened text to the text box's text
public void listener_Reco(int StreamNumber, object StreamPosition, SpeechRecognitionType RecognitionType, ISpeechRecoResult Result)
{
string heard = Result.PhraseInfo.GetText(0, -1, true);
//setting heard text to a variable
richTextBox1.Text += " " + heard;
//appending heard text
}
If I'm not mistaken, SpeechLib is a COM interop wrapper around the SAPI API. You might be better off using the native .NET Managed Speech classes in System.Speech. The MSDN article mentioned in https://stackoverflow.com/questions/5101119/looking-for-a-book-on-net-speech-recognition/5118157#5118157 is a good place to start. I posted a good simple example to help get started in What is the best option for transcribing speech-to-text in a asp.net web app?.
I think you are also using a shared recognizer. If you use you own instance of an inproc SpeechRecognitionEngine, you'll have more control over the recognition. The shared recognizer is used for applications that can control the windows desktop or multiple applications.
Have you tried removing the Recognition handler when you want to disable Speech Recognition?
See this question for an example of how to remove an event handler.
Have you tried changing the rule state or recognizer state? E.g., try
grammar.DictationSetState(SpeechRuleState.SGDSInactive);
I also concur with Michael that you probably want an inproc recognition engine, rather than the shared engine.
精彩评论