【发布时间】:2012-10-02 23:57:10
【问题描述】:
我一直在玩 quakelive.com,并且对我的键盘绑定感到沮丧,并希望改用语音命令进行绑定。
我想我会创建一个 C# 控制台应用程序在后台运行,并使用适用于 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 语音识别,并让我的控制台应用程序监听我说的特定单词。正如您在我的示例代码中看到的那样,我正在收听短语“one”,我使用 autoIt 将文本以及一些控制字符发送到记事本,以便在写入时选择所有文本。
到目前为止,它还没有工作。似乎我的控制台应用程序必须具有“焦点”或成为前台应用程序,即使这样,当我说“一个”或“两个”之类的词时,ms 语音识别也会尝试用我的应用程序执行“控制台命令”,而不仅仅是通过听写文本。例如,当我说“一个”这个词时,它一直在说“移动”,因为我认为它认为控制台不是文档,所以它必须是命令而不是听写。
谁能看到我做错了什么以及如何让它按我的意愿工作?
最终的解决方案是将控制字符发送到正在运行的“chrome.exe”进程而不是“记事本”,因为 quakelive 是在浏览器中运行的。所以我认为通过 autoIt 发送键盘命令足以让 chrome 进程将这些命令作为游戏键盘游戏输入(即键盘输入/击键)传递给 quakelive 插件。
感谢任何人提供任何帮助或建议。
【问题讨论】:
标签: speech-recognition autoit sapi