我一直在玩quakelive.com,并且因为我的键盘绑定而感到沮丧,并且想要使用语音命令进行绑定。如何使用SAPI语音识别C#来控制游戏
我以为我会创建一个c#控制台应用程序在后台运行,并使用SAPI的内置语音识别引擎的Windows 7 64位做所有沉重的演讲的东西。我的程序会监听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);
}
}
}
基本上我想毫秒的语音识别到我的游戏运行的同时运行,并为我的控制台应用程序来侦听特定的单词我说。正如您在示例代码中所看到的,我正在倾听使用autoIt文本以及一些控制字符在写入时选择所有文本的短语“one”。
到目前为止它不工作。看起来我的控制台应用程序必须具有“焦点”或是前台应用程序,即便如此,当我说“一”或“两”这样的单词时,语音识别会尝试使用我的应用程序执行“控制台指令”听写文本。例如,当我说单词“one”时,它一直说“移动”,因为我认为它认为控制台不是文档,所以它必须是命令而不是听写。
任何人都可以看到我做错了什么,以及如何得到这个工作,因为我想?
最终的解决方案是将控制字符发送到正在运行的“chrome.exe”进程而不是“记事本”,因为quakelive在浏览器中运行。所以我认为通过autoIt发送键盘命令足以让chrome进程将这些命令作为游戏键盘游戏输入(即键盘输入/击键)传递给quakelive插件。
任何与任何帮助或建议的赞赏。