2010-03-03 82 views
0

当他们拿起另一端的接收器时,我需要检测用户声音。“SpeechHypothesized event not raised”

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

甚至可以开始说话的任何噪音干扰。

我用很少的设置完成了这个。我发现了我的引擎在我们说话时检测到的几个常见单词,以及当它响起时出现的单词。它作为一个独立的应用程序很好,但如果我尝试将它与我的应用程序集成在一起,它不会引发“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); 

所有事件的上调除speechhypothesized事件。

任何想法为什么会发生这种情况?

编辑:

错误不是由服务抛出它的Windows窗体抛出错误!

该码是用于语音识别如下:

System.Collections.ObjectModel.ReadOnlyCollection<RecognizerInfo> 

recognizedSpeeches = System.Speech.Recognition.SpeechRecognitionEngine.InstalledRecognizers(); if(recognizedSpeeches!= null) {
Console.WriteLine(“Recognized Speeches:”);
int recognitionizerNumber = 0;

    engine = new SpeechRecognitionEngine(recognizedSpeeches[recognizerNumber]); 

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

EventHandler(engine_SpeechDetected); engine.SpeechRecognized - = new EventHandler(engine_SpeechRecognized); engine.SpeechHypothesized - = new EventHandler(engine_SpeechHypothesized); engine.SpeechRecognitionRejected - = new EventHandler(engine_SpeechRecognitionRejected); engine.SpeechDetected + = new EventHandler(engine_SpeechDetected); engine.SpeechRecognized + = new EventHandler(engine_SpeechRecognized); engine.Speech Hypothesized + = new EventHandler(engine_SpeechHypothesized); engine.SpeechRecognitionRejected + = new EventHandler(engine_SpeechRecognitionRejected); 发动机。LoadGrammar(new DictationGrammar());
RecognitionResult srResult = engine.Recognize(新时间跨度(0,0, 30)); }

任何线索????

回答

0

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

现在,我通过从我开始形式的控制台应用程序识别解决了这个问题,它也是工作的罚款。

+0

的服务帐户不** **有一个默认的音频设备;这就是为什么SAPI会引发错误。我假设你正在使用SpeechRecognitionEngine而不是SpeechRecognizer,因为SpeechRecognizer将尝试启动WSR UI,该UI也不会从服务运行。 我不知道为什么这些事件不触发;你需要展示更多的代码。 – 2010-03-08 06:27:24