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 プラグインに渡すことができると思います。
助けやアドバイスがあれば誰でも大歓迎です。