语音识别控制游戏

语音控制游戏

跟语音识别差不多,只是把所作的命令转化为api对键盘的操作

from win32com.client import constants
import os
import win32api
import win32con
import time
import win32com.client
import pythoncom
class SpeechRecognition:
    def __init__(self, wordsToAdd):
        self.speaker = win32com.client.Dispatch("SAPI.SpVoice")
        self.listener = win32com.client.Dispatch("SAPI.SpSharedRecognizer")
        self.context = self.listener.CreateRecoContext()
        self.grammar = self.context.CreateGrammar()
        self.grammar.DictationSetState(0)
        self.wordsRule = self.grammar.Rules.Add("wordsRule", constants.SRATopLevel + constants.SRADynamic, 0)
        self.wordsRule.Clear()
        [self.wordsRule.InitialState.AddWordTransition(None, word) for word in wordsToAdd]
        self.grammar.Rules.Commit()
        self.grammar.CmdSetRuleState("wordsRule", 1)
        self.grammar.Rules.Commit()
        self.eventHandler = ContextEvents(self.context)
        self.say("Started successfully")
    def say(self, phrase):
        self.speaker.Speak(phrase)
class ContextEvents(win32com.client.getevents("SAPI.SpSharedRecoContext")):
    def OnRecognition(self, StreamNumber, StreamPosition, RecognitionType, Result):
        newResult = win32com.client.Dispatch(Result)
        print("你说 ", newResult.PhraseInfo.GetText())
        speechstr = newResult.PhraseInfo.GetText()
        if speechstr == "趴下":
            win32api.keybd_event(89, 0, 0, 0) 											#89对应键盘的y键,按下,经过0.1秒后,y键抬起
            time.sleep(0.1)
            win32api.keybd_event(89, 0, win32con.KEYEVENTF_KEYUP, 0)
        elif speechstr == "起来":
            win32api.keybd_event(32, 0, 0, 0)
            time.sleep(0.1)
            win32api.keybd_event(32, 0, win32con.KEYEVENTF_KEYUP, 0)
        elif speechstr == "龙王破":
            win32api.keybd_event(83, 0, 0, 0)
            time.sleep(0.1)
            win32api.keybd_event(83, 0, win32con.KEYEVENTF_KEYUP, 0)
            win32api.keybd_event(87, 0, 0, 0)
            time.sleep(0.1)
            win32api.keybd_event(87, 0, win32con.KEYEVENTF_KEYUP, 0)
            win32api.keybd_event(87, 0, 0, 0)
            time.sleep(0.1)
            win32api.keybd_event(87, 0, win32con.KEYEVENTF_KEYUP, 0)
            win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN,0,0,0)					#鼠标左键按下
            win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP,0,0,0)							#鼠标左键抬起
        elif speechstr == "穿心破":
            win32api.keybd_event(87, 0, 0, 0)
            time.sleep(0.1)
            win32api.keybd_event(87, 0, win32con.KEYEVENTF_KEYUP, 0)
            win32api.keybd_event(87, 0, 0, 0)
            time.sleep(0.1)
            win32api.keybd_event(87, 0, win32con.KEYEVENTF_KEYUP, 0)
            win32api.keybd_event(87, 0, 0, 0)
            time.sleep(0.1)
            win32api.keybd_event(87, 0, win32con.KEYEVENTF_KEYUP, 0)
            win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN, 0, 0, 0)
            win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP, 0, 0, 0)
        elif speechstr == "翔天破":
            win32api.keybd_event(65, 0, 0, 0)
            time.sleep(0.1)
            win32api.keybd_event(65, 0, win32con.KEYEVENTF_KEYUP, 0)
            win32api.keybd_event(68, 0, 0, 0)
            time.sleep(0.1)
            win32api.keybd_event(68, 0, win32con.KEYEVENTF_KEYUP, 0)
            win32api.keybd_event(87, 0, 0, 0)
            time.sleep(0.1)
            win32api.keybd_event(87, 0, win32con.KEYEVENTF_KEYUP, 0)
            win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN, 0, 0, 0)
            win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP, 0, 0, 0)
        elif speechstr == "":
            pass
        elif speechstr == "闪":
            win32api.keybd_event(82, 0, 0, 0)
            time.sleep(0.1)
            win32api.keybd_event(82, 0, win32con.KEYEVENTF_KEYUP, 0)
            win32api.keybd_event(68, 0, 0, 0)
            time.sleep(0.1)
            win32api.keybd_event(68, 0, win32con.KEYEVENTF_KEYUP, 0)
if __name__ == '__main__':
    wordsToAdd = ["趴下", "起来", "龙王破", "穿心破", "翔天破", "闪"]
    speechReco = SpeechRecognition(wordsToAdd)
    while True:
        pythoncom.PumpWaitingMessages()
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值