“未引发语音假设事件”
Posted
技术标签:
【中文标题】“未引发语音假设事件”【英文标题】:"SpeechHypothesized event not raised" 【发布时间】:2010-03-03 07:51:14 【问题描述】:当他们拿起另一端的接收器时,我需要检测用户的声音。
因为调制解调器通常在第一个铃声响起时开始播放文件(播放终端)。所以我打算在他们说“你好”时使用语音识别,它可以开始播放文件,直到等待播放文件。
甚至是它可以开始说话的任何噪音干扰。
我通过一些设置完成了这项工作。我发现我的引擎在我们说话时检测到的常用词很少,以及在响铃时会出现的词。它作为一个独立的应用程序运行良好,但如果我尝试将它与我的应用程序集成,它不会引发“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>
公认的演讲 = System.Speech.Recognition.SpeechRecognitionEngine.InstalledRecognizers(); if (recognizedSpeechs != null) Console.WriteLine("已识别 演讲:"); int 识别器编号 = 0;
engine = new SpeechRecognitionEngine(recognizedSpeeches[recognizerNumber]); engine.SetInputToDefaultAudioDevice(); engine.SpeechDetected -= new
EventHandler(engine_SpeechDetected); engine.SpeechRecognized -= 新 EventHandler(engine_SpeechRecognized); engine.SpeechHypothesized -= 新 EventHandler(engine_SpeechHypothesized); engine.SpeechRecognitionRejected -= 新的 EventHandler(engine_SpeechRecognitionRejected); engine.SpeechDetected += 新 EventHandler(engine_SpeechDetected); engine.SpeechRecognized += new EventHandler(engine_SpeechRecognized); engine.SpeechHypothesized+=新 EventHandler(engine_SpeechHypothesized); engine.SpeechRecognitionRejected += 新的 EventHandler(engine_SpeechRecognitionRejected); engine.LoadGrammar(新 听写语法()); 识别结果 srResult = engine.Recognize(new TimeSpan(0, 0, 30));
有什么线索吗????
【问题讨论】:
【参考方案1】:我通过从表单调用控制台应用程序在一定程度上解决了我的问题。 如果我从我的 Windows 窗体启动控制台应用程序并且它不适用于 Windows 服务,它就可以工作。我不知道为什么 Windows 服务没有响应或无法正常工作。这也可能是因为默认情况下 Windows 服务不适用于桌面,并且假设事件可能仅由此引发,或者我真的不或无法理解这种奇怪的行为。我发现 System.Speech 的另一个奇怪行为是它不允许将 SpeechRecognitionEngine 设置为“InputToDefaultAudioDevice”。每当我尝试使用函数“engine.SetInputToDefaultAudioDevice()”时,它只会抛出错误(仅来自窗口的表单)。不知道为什么???嗯 System.Speech 类在不同的 C# 应用程序中的工作方式不同,最好使用控制台。我不知道这个统计数据是否是仪式,但根据观察,它听起来是这样的。
现在我通过从我的表单启动控制台应用程序来解决问题,它也可以正常工作。
【讨论】:
服务帐号没有拥有默认音频设备;这就是 SAPI 抛出错误的原因。我假设您使用的是 SpeechRecognitionEngine,而不是 SpeechRecognizer,因为 SpeechRecognizer 将尝试启动 WSR UI,它也不会从服务运行。我不确定为什么事件没有触发;您需要显示更多代码。以上是关于“未引发语音假设事件”的主要内容,如果未能解决你的问题,请参考以下文章