首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> 關於C++

C/C++ 語音識別實戰:基於 SAPI 實現 QQ 控制與遊戲操控

     編輯:關於C++

專案一:語音控制 QQ

架構

  • Microsoft SAPI 5.3 做語音識別引擎。
  • XML 文法定義指令詞表(er.xml)。
  • 識別結果觸發 WM_RECOEVENT 消息,窗口過程中解析並調用 QQ 操作函數。

核心代碼片段

// 初始化 SAPI
::CoInitializeEx(NULL, COINIT_APARTMENTTHREADED);
m_cpRecoEngine.CoCreateInstance(CLSID_SpSharedRecognizer);
m_cpRecoEngine->CreateRecoContext(&m_cpRecoCtxt);
m_cpRecoCtxt->SetNotifyWindowMessage(hwnd, WM_RECOEVENT, 0, 0);
m_cpRecoCtxt->CreateGrammar(GID_CMD_GR, &m_cpCmdGramma);
m_cpCmdGramma->LoadCmdFromFile(L"er.xml", SPLO_DYNAMIC);
m_cpCmdGramma->SetRuleState(NULL, NULL, SPRS_ACTIVE);

// 消息循環中處理識別結果
case SPEI_RECOGNITION:
    CSpDynamicString dstrText;
    event.RecoResult()->GetText(SP_GETWHOLEPHRASE, SP_GETWHOLEPHRASE, TRUE, &dstrText, NULL);
    char* cmd = _com_util::ConvertBSTRToString(dstrText.CopyToBSTR());
    if (strcmp(cmd, "給我上") == 0) shang();
    else if (strcmp(cmd, "給我下") == 0) xia();
    // ... 其他指令映射
    break;

QQ 操作函數

void shang() {  // 向上移動
    HWND win = FindWindowA("TXGuiFoundation", "QQ2013");
    if (win) {
        RECT rc; GetWindowRect(win, &rc);
        SetWindowPos(win, NULL, rc.left, rc.top - 100, 300, 300, SWP_NOZORDER);
    }
}
// 類似:xia(), zuo(), you(), openqq(), closeqq(), show(), hide()

語法文件 er.xml



  
    
      

我是學霸

清華土匪

傳智播客

天下無雙

給我上

給我下

給我左

給我右

打開企鵝

關閉企鵝

顯示

隱藏

譚勝是誰

你是誰

你是笨蛋

你是蠢豬

你很好

中秋快樂

專案二:語音控制遊戲

同樣框架,將指令映射為 keybd_event / mouse_event 模擬鍵鼠:

if (strcmp(cmd, "旋風刀") == 0) {
    keybd_event('A',0,0,0); keybd_event('A',0,KEYEVENTF_KEYUP,0);
    keybd_event('D',0,0,0); keybd_event('D',0,KEYEVENTF_KEYUP,0);
    keybd_event('W',0,0,0); keybd_event('W',0,KEYEVENTF_KEYUP,0);
    mouse_event(MOUSEEVENTF_LEFTDOWN,0,0,0,0);
    mouse_event(MOUSEEVENTF_LEFTUP,0,0,0,0);
}
// 大風吹、充氣、跳躍、趴下、前進、後退 ...

編譯與運行

  • Visual Studio 2013+,引用 sapi.lib、ole32.lib、comsupp.lib。
  • 將 er.xml 放置於可執行文件同目錄。
  • 需在系統語音識別設置中訓練識別器以提高準確率。

總結

SAPI 提供完整的 COM 介面實現語音命令控制。關鍵點:文法設計、消息驅動架構、指令到動作的映射。此類項目適合作為 C++ Windows 程式設計綜合練習。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved