0

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

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

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

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

我不明白为什么会这样。

如果我看到使用断点,则引擎正在分配委托,并且调用属性也已正确初始化,但不会调用事件。对于呼叫,我使用 C4F Tapi 管理器,对于语音识别,我使用 System.Speech .Net 3.5 库。

事件代码如下:

 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>

识别语音 = System.Speech.Recognition.SpeechRecognitionEngine.InstalledRecognizers(); if (recognizedSpeeches != null) {
Console.WriteLine("Recognized Speeches:");
int 识别器编号 = 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.SpeechHypothesized+=new EventHandler(engine_SpeechHypothesized); engine.SpeechRecognitionRejected += new EventHandler(engine_SpeechRecognitionRejected); engine.LoadGrammar(new DictationGrammar());
RecognitionResult srResult = engine.Recognize(new TimeSpan(0, 0, 30)); }

有什么线索吗???

4

1 回答 1

0

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

现在我通过从我的表单启动控制台应用程序来解决这个问题,它也可以正常工作。

于 2010-03-04T08:11:24.950 回答