0

quakelive.com をプレイしていて、キーボードのバインドに不満を感じていて、代わりに音声コマンドを使用してバインドしたいと考えています。

バックグラウンドで実行する ac# コンソール アプリを作成し、Windows 7 64 ビット用の SAPI の組み込みの音声認識エンジンを使用して、すべての重い音声操作を行うことを考えました。私のプログラムは SpeechRecognized イベントをリッスンし、それに応じて応答します。ただし、ゲームをプレイしているときに、コンソール アプリを ms 音声認識と組み合わせてバックグラウンドで実行する方法がわかりません。

これは私がこれまでに書いたものです:

using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Speech.Recognition;
using System.Text;
using System.Threading.Tasks;
using AutoItX3Lib;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            AutoItX3 autoit = new AutoItX3();

            // Create a default dictation grammar.
            DictationGrammar defaultDictationGrammar = new DictationGrammar();
            defaultDictationGrammar.Name = "default dictation";
            defaultDictationGrammar.Enabled = true;

            // Create our process
            autoit.Run("notepad.exe", "", autoit.SW_MAXIMIZE);
            autoit.WinWaitActive("Unbenannt - Editor");
            Console.WriteLine("its active");

            SpeechRecognizer sr = new SpeechRecognizer();
            sr.SpeechRecognized += (s, e) =>
            {
                foreach (RecognizedWordUnit word in e.Result.Words)
                {
                    Console.WriteLine(word.Text);
                    if (word.Text.Trim().ToLower() == "one")
                        autoit.Send(word.Text.ToLower() + "{LCTRL}+{LSHIFT}+a", 0);
                    else
                        autoit.Send(word.Text.ToLower() + " ", 0);
                }
            };
            sr.LoadGrammar(defaultDictationGrammar);
        }
    }
}

基本的に、ゲームの実行中に ms 音声認識を実行し、コンソール アプリで特定の単語をリッスンしたいと考えています。サンプル コードでわかるように、autoIt を使用してメモ帳に送信する "one" というフレーズと、書き込み時にすべてのテキストを選択するための制御文字をリッスンしています。

これまでのところ、機能していません。私のコンソールアプリは「フォーカス」またはフォアグラウンドアプリである必要があるようですが、それでも「1」または「2」のような単語を言うと、ms音声認識は単にパスするのではなく、アプリで「コンソールコマンド」を実行しようとしますそれにディクテーションテキスト。たとえば、「one」という単語を言うと、「moving」と言い続けます。コンソールはドキュメントではないと考えているため、口述ではなくコマンドである必要があるからです。

私が間違っていることと、これを希望どおりに機能させる方法を誰かが見ることができますか?

最終的な解決策は、制御文字を「メモ帳」ではなく、実行中の「chrome.exe」プロセスに送信することでした。これは、quakelive がブラウザーで実行されるためです。したがって、autoIt を介してキーボード コマンドを送信するだけで、クロム プロセスがそれらをゲーム キーボード ゲーム入力 (つまり、キーボード入力/キーストローク) として quakelive プラグインに渡すことができると思います。

助けやアドバイスがあれば誰でも大歓迎です。

4

1 に答える 1

0

SpeechRecognizer を作成すると、Windows デスクトップ認識を使用する共有認識エンジンが作成されます。「(それ) が "コンソール コマンド" を実行しようとしている」と言うとき、デスクトップからアプリケーションを制御することを目的とした共有 recongizer を使用しているためだと思います。アプリケーション専用の音声を使用する場合は、代わりに SpeechRecognitionEngine を作成します。共有レコンナイザーはあなたが望むもののために働くかもしれませんが、アプリケーションを適切に制御するには専用の文法が必要になると思います.

ユーザーに提供する音声コマンドのセットは限られているため、ディクテーション文法を使用するよりも、この語彙をサポートする文法を提供する方がうまくいきます。

コンソール アプリがサウンド カードをキャプチャするためにフォアグラウンドにいる必要があるかどうかはわかりません。インプロセス認識エンジンに変更すると、アプリはバックグラウンドでも機能し続けると思います。

背景の詳細​​については、http://msdn.microsoft.com/en-us/magazine/cc163663.aspxを参照してください。これはおそらく、これまでに見つけた中で最高の紹介記事です。少し時代遅れですが、非常に便利です。(AppendResultKeyValue メソッドはベータ版の後に削除されました。) http://msdn.microsoft.com/en-us/library/hh361625.aspxは開始するのに適した場所です。

于 2012-10-12T15:09:46.600 に答える