2011-03-26 59 views
0

我是新来的语音识别系统,并且开发了一个文本编辑器来编写我所说的内容。我遇到了可以通过代码启用语音识别的问题,但无法禁用它。任何人都可以请建议如何禁用语音识别。我的语音识别代码如下:.net问题中的语音识别

//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 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 
} 

回答

0

您是否尝试过在要禁用语音识别时删除识别处理程序?

有关如何删除事件处理程序的示例,请参阅此question

+0

我无法删除识别处理程序。你能告诉我,我能怎么做? – impiyush 2011-03-26 15:08:28

+0

编辑我的回复以包含删除处理程序的示例。 – Jason 2011-03-27 01:29:29

1

如果我没有弄错,SpeechLib是一个围绕SAPI API的COM互操作包装。在System.Speech中使用本机.NET Managed Speech类可能会更好。在https://stackoverflow.com/questions/5101119/looking-for-a-book-on-net-speech-recognition/5118157#5118157中提到的MSDN article是一个很好的开始。我发布了一个很好的简单例子来帮助What is the best option for transcribing speech-to-text in a asp.net web app?开始。

我想你也在使用共享识别器。如果您使用自己的inproc SpeechRecognitionEngine实例,则可以更好地控制识别。共享识别器用于可以控制Windows桌面或多个应用程序的应用程序。

0

您是否尝试过更改规则状态或识别器状态?例如,试试

grammar.DictationSetState(SpeechRuleState.SGDSInactive); 

我也同意迈克尔,你可能想要一个inproc识别引擎,而不是共享引擎。