2010-03-03 89 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