“没有提出言语假设事件”

时间:2010-03-03 07:51:14

标签: c# speech-recognition

我需要在另一端拿起接收器时检测用户语音。

因为当第一个响铃进入时,调制解调器通常会开始播放文件(播放终端)。所以我打算在他们说“你好”时使用语音识别,它可以开始播放文件,直到等待播放文件。

甚至可以开始讲任何噪音干扰。

我用很少的设置完成了这个。我发现我的发动机在发言时检测到的几个常用词以及响铃时发出的话。它作为一个独立的应用程序工作正常,但如果我尝试将其与我的应用程序集成,它只是不会引发“SpeechHypothesized”事件。

我无法理解为什么会这样。

如果我看到使用断点,则引擎具有委托赋值和调用属性也正确初始化但是不会调用该事件。为了调用我正在使用C4F tapi管理器和语音识别,我正在使用.Net 3.5的System.Speech库。

事件代码如下:

 engine.SpeechDetected += new EventHandler<SpeechDetectedEventArgs>(engine_SpeechDetected);
 engine.SpeechRecognized += new EventHandler<SpeechRecognizedEventArgs>(engine_SpeechRecognized);
 engine.SpeechHypothesized+=new EventHandler<SpeechHypothesizedEventArgs> (engine_SpeechHypothesized);                   
 engine.SpeechRecognitionRejected += new EventHandler<SpeechRecognitionRejectedEventArgs>(engine_SpeechRecognitionRejected);

除语音假设事件外,所有事件都被提出。

知道为什么会发生这种情况????

编辑:

服务不会引发错误,因为Windows窗体会抛出错误!!!

语音识别的守则如下:

System.Collections.ObjectModel.ReadOnlyCollection<RecognizerInfo>
     

recognSpeeches =                       System.Speech.Recognition.SpeechRecognitionEngine.InstalledRecognizers();                       if(recognizedSpeeches!= null)                       {
                          Console.WriteLine(“认可   演讲:“);
                          int recognizerNumber = 0;

                    engine = new SpeechRecognitionEngine(recognizedSpeeches[recognizerNumber]);

                    engine.SetInputToDefaultAudioDevice();
                    engine.SpeechDetected -= new
     

事件处理程序(engine_SpeechDetected);                           engine.SpeechRecognized - = new   事件处理程序(engine_SpeechRecognized);                           engine.SpeechHypothesized - = new   事件处理程序(engine_SpeechHypothesized);                           engine.SpeechRecognitionRejected - =   新   事件处理程序(engine_SpeechRecognitionRejected);                           engine.SpeechDetected + = new   事件处理程序(engine_SpeechDetected);                           engine.SpeechRecognized + = new   事件处理程序(engine_SpeechRecognized);                           engine.SpeechHypothesized + =新   事件处理程序(engine_SpeechHypothesized);                           engine.SpeechRecognitionRejected + =   新   事件处理程序(engine_SpeechRecognitionRejected);                           engine.LoadGrammar(新   DictationGrammar());
  RecognitionResult srResult =   engine.Recognize(new TimeSpan(0,0,   30)); }

任何线索????

1 个答案:

答案 0 :(得分:0)

我通过从我的表单中调用Console应用程序解决了我的问题。 如果我从我的Windows窗体启动一个控制台应用程序并且它不能与Windows服务一起使用它。我不知道为什么Windows服务没有响应或它无法正常工作。这可能也是因为默认情况下Windows服务不能与桌面一起使用,而假设事件可能仅在此情况下引发,或者我实际上没有或无法理解这种奇怪的行为。我发现System.Speech的另一个奇怪的行为是它不允许将SpeechRecognitionEngine设置为“InputToDefaultAudioDevice”。每当我尝试使用函数“engine.SetInputToDefaultAudioDevice()”时,它只会抛出错误(仅来自Window的表单)。我不知道为什么??? Hmmmm System.Speech类与不同的C#应用​​程序的工作方式不同,它最适合使用控制台。我不知道这个统计数据是否是仪式,但根据观察结果,这听起来就是这样。

现在我通过从我的表单启动控制台应用程序来识别并解决了问题,并且它也正常工作。