我一直在玩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插件。
任何與任何幫助或建議的讚賞。