C#语音识别(System.Speech.Recognition)问题

时间:2012-07-14 16:27:26

标签: c# speech-recognition

我已经使用各种测试程序进行了几天的语音识别,并且一切正常。但是我已经尝试将它实现到我的OpenGL项目中,并且现在没有调用“已识别”功能。

在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))));
    }
}

有谁知道为什么'被识别'不会被触发?

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

1 个答案:

答案 0 :(得分:0)

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