0

私は数日間、さまざまなテスト プログラムを使用して音声認識を少し使用してきましたが、すべて正常に機能しました。ただし、OpenGL プロジェクトに実装しようとしましたが、関数「認識済み」が呼び出されなくなりました。

Windows Speech Recognition のもの (「'Start Listening' と言ってみてください」という言葉が非常に多い) では、読み込んだ単語は、私が話すと表示されるので、単語を正しく検出していると仮定しています。イベントをトリガーしない理由。

これが私が使用しているコードです。あなたが本当に知る必要があるのは(コードに示されているものに加えて)、 AddCommands が別の場所で呼び出され、私がテストしてきたいくつかの単語を追加し、フォームの読み込み時に「開始」が呼び出されることです.

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

「認識済み」がトリガーされない理由を知っている人はいますか?

ご協力いただきありがとうございます。

4

1 に答える 1

0

OpenGL はイベント リスニングではなくゲーム ループを実行するため、スレッドはループによって完全に占有されます。コマンドのリッスンを開始するには、2 つ目のスレッドが必要です。

于 2012-07-16T09:02:01.697 に答える