我是语音识别的新手,并开发了一个文本编辑器,用于编写我所说的内容。我遇到了一个问题,我可以通过代码启用语音识别,但不能禁用它。任何人都可以建议如何禁用语音识别。我的语音识别代码如下:
//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 :(得分: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识别引擎,而不是共享引擎。