Speech recognition 如何使用SAPI语音识别C控制游戏
我一直在玩quakelive.com,对我的键盘绑定感到沮丧,我想用语音命令来绑定 我想我应该创建一个c控制台应用程序在后台运行,并使用SAPI for windows 7 64位内置的语音识别引擎来完成所有繁重的语音任务。我的程序将听取演讲,并做出相应的回应。但是,我不知道如何在玩游戏时在后台运行我的console应用程序,同时使用ms语音识别 这是我到目前为止写的:Speech recognition 如何使用SAPI语音识别C控制游戏,speech-recognition,autoit,sapi,Speech Recognition,Autoit,Sapi,我一直在玩quakelive.com,对我的键盘绑定感到沮丧,我想用语音命令来绑定 我想我应该创建一个c控制台应用程序在后台运行,并使用SAPI for windows 7 64位内置的语音识别引擎来完成所有繁重的语音任务。我的程序将听取演讲,并做出相应的回应。但是,我不知道如何在玩游戏时在后台运行我的console应用程序,同时使用ms语音识别 这是我到目前为止写的: using System; using System.Collections.Generic; using System.Di
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语音识别在我的游戏运行时运行,让我的控制台应用程序听我说的特定单词。正如您在我的示例代码中所看到的,我正在侦听短语1,我使用autoIt将文本以及一些控制字符发送到记事本,以在写入文本时选择所有文本
到目前为止它还不起作用。似乎我的控制台应用程序必须有焦点或是前台应用程序,即使这样,当我说一两个ms语音识别之类的词时,也会尝试用我的应用程序进行控制台通信,而不仅仅是向它传递听写文本。例如,当我说单词one时,它一直在说moving,因为我认为它认为console不是文档,所以它必须是命令,而不是听写
有人能看出我做错了什么,以及如何让它按我的意愿工作吗
最终的解决方案是将控制字符发送到正在运行的chrome.exe进程,而不是记事本,因为quakelive是在浏览器中运行的。因此,我假设通过autoIt发送键盘命令,chrome进程将这些命令作为游戏键盘输入(即键盘输入/击键)传递到quakelive插件就足够了
任何有任何帮助或建议的人都将不胜感激。创建SpeechRecognitor时,您正在创建一个使用Windows桌面识别的共享识别器。当你说“它试图做控制台comand之类的事情”时,我怀疑这是因为你使用的是shared Recogizer,它用于从桌面控制应用程序。如果要使用专用于应用程序的语音,请创建SpeechRecognitionEngine。共享的Recogizer可以满足您的需要,但我认为您需要有一个专门的语法来正确控制您的应用程序 由于您向用户提供的语音命令集有限,因此如果您提供支持此词汇表的语法,而不是使用听写语法,您将获得更好的成功 我不知道控制台应用程序是否需要在前台捕捉声卡。我怀疑,一旦您切换到inproc识别器,即使在后台,应用程序也会继续运行 有关更多背景信息,请参见。这可能是迄今为止我找到的最好的介绍性文章。这有点过时,但很有用。AppendResultKeyValue方法在测试后被删除。这是一个很好的起点