C#语音识别(系统、语音、识别)问题

C#语音识别(系统、语音、识别)问题,c#,speech-recognition,C#,Speech Recognition,几天来,我一直在用各种测试程序进行一些语音识别,一切都很好。但是,我已经尝试将其实现到我的OpenGL项目中,现在没有调用函数“Recognized” 在Windows语音识别系统中(有很多“试着说‘开始听’”),当我说的时候会出现加载的单词,所以我假设它正确地检测到单词,只是出于某种原因没有触发事件 这是我一直在使用的代码。您真正需要知道的是(除了代码中显示的内容之外),AddCommands在其他地方被调用,以添加我一直在测试的几个单词,并且在加载表单时调用“Initiate” public

几天来,我一直在用各种测试程序进行一些语音识别,一切都很好。但是,我已经尝试将其实现到我的OpenGL项目中,现在没有调用函数“Recognized”

在Windows语音识别系统中(有很多“试着说‘开始听’”),当我说的时候会出现加载的单词,所以我假设它正确地检测到单词,只是出于某种原因没有触发事件

这是我一直在使用的代码。您真正需要知道的是(除了代码中显示的内容之外),AddCommands在其他地方被调用,以添加我一直在测试的几个单词,并且在加载表单时调用“Initiate”

public class SpeechControls
{
    public static SpeechRecognizer sRecognizer;

    private static Dictionary<string, IVoiceControlable> controllers = new Dictionary<string, IVoiceControlable>();

    public static void Initiate()
    {
        sRecognizer = new SpeechRecognizer();
        sRecognizer.Enabled = true;

        sRecognizer.SpeechRecognized += new EventHandler<SpeechRecognizedEventArgs>(Recognized);
    }

    private static void Recognized(object obj, SpeechRecognizedEventArgs args)
    {
        controllers[args.Result.Text].TriggerCommand(args.Result.Text);
    }

    public static void AddCommands(string[] commands, IVoiceControlable control)
    {
        foreach (string str in commands)
        {
            controllers.Add(str, control);
        }

        sRecognizer.LoadGrammar(new Grammar(new GrammarBuilder(new Choices(commands))));
    }
}
公共类SpeechControls
{
公共静态语音识别器;
私有静态字典控制器=新字典();
公共静态无效初始化()
{
sRecognizer=newspeechrecognizer();
sRecognizer.Enabled=true;
sRecognizer.SpeechRecognized+=新事件处理程序(已识别);
}
已识别私有静态无效(对象对象对象、SpeechRecognitizedEventArgs)
{
控制器[args.Result.Text].TriggerCommand(args.Result.Text);
}
公共静态void AddCommands(字符串[]命令,IVoiceControlable控件)
{
foreach(命令中的字符串str)
{
添加(str,control);
}
LoadGrammar(新语法(新语法构建器(新选项(命令)));
}
}
有人知道为什么不会触发“已识别”吗


感谢您的帮助,非常感谢。

因为OpenGL运行的是游戏循环而不是事件监听,所以线程完全被循环占用。要开始侦听命令,需要另一个线程。

调用
Initiate
的位置在哪里?哦,是的,很抱歉,在加载主窗体时也调用了该线程。您忘记为SpeechRecognitionRejected和AudioSignalProblemOccessed事件编写处理程序。没有触发任何事件。。。我已经处理了所有的事情,但没有任何事情发生。