.net问题中的语音识别

时间:2011-03-26 12:26:54

标签: c#-4.0 speech-recognition

我是语音识别的新手,并开发了一个文本编辑器,用于编写我所说的内容。我遇到了一个问题,我可以通过代码启用语音识别,但不能禁用它。任何人都可以建议如何禁用语音识别。我的语音识别代码如下:

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

3 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

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

grammar.DictationSetState(SpeechRuleState.SGDSInactive);

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