开发者

Speech recognition in .net problem

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.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜