【C/C++学院】0805-语音识别控制QQ/语音控制游戏

语音识别控制QQ

QQ.cpp 单独测试控制qq的各种命令

#include<Windows.h>

void openqq()
{
	ShellExecuteA(0, "open", "\"C:\\Program Files (x86)\\Tencent\\QQ\\QQProtect\\Bin\\QQProtect.exe\"", 0, 0, 1);
}

void closeqq()
{
	system("taskkill /f /im QQ.exe");
}

void show()
{
	HWND win = FindWindowA("TXGuiFoundation","QQ2013");
	if (win != NULL)
	{
		ShowWindow(win, SW_SHOW);
	}
}

void  hide()
{
	HWND win = FindWindowA("TXGuiFoundation", "QQ2013");
	if (win != NULL)
	{
		ShowWindow(win, SW_HIDE);
	}
}

void  shang()
{
	HWND win = FindWindowA("TXGuiFoundation", "QQ2013");
	if (win != NULL)
	{
		RECT rectwind;//区域,lefr ,right ,top,bottom
		GetWindowRect(win, &rectwind);//获取区域
		SetWindowPos(win, NULL, rectwind.left, rectwind.top-100, 300, 300, 1);
	}
}

void xia()
{
	HWND win = FindWindowA("TXGuiFoundation", "QQ2013");
	if (win != NULL)
	{
		RECT rectwind;//区域,lefr ,right ,top,bottom
		GetWindowRect(win, &rectwind);//获取区域
		SetWindowPos(win, NULL, rectwind.left, rectwind.top + 100, 300, 300, 1);
	}
}

void zuo()
{
	HWND win = FindWindowA("TXGuiFoundation", "QQ2013");
	if (win != NULL)
	{
		RECT rectwind;//区域,lefr ,right ,top,bottom
		GetWindowRect(win, &rectwind);//获取区域
		SetWindowPos(win, NULL, rectwind.left-100, rectwind.top , 300, 300, 1);
	}
}

void you()
{
	HWND win = FindWindowA("TXGuiFoundation", "QQ2013");
	if (win != NULL)
	{
		RECT rectwind;//区域,lefr ,right ,top,bottom
		GetWindowRect(win, &rectwind);//获取区域
		SetWindowPos(win, NULL, rectwind.left + 100, rectwind.top, 300, 300, 1);//设置区域位置
	}
}

void main()
{
	openqq();
	Sleep(3000);
	/*show();
	Sleep(2000);
	hide();*/
	shang();
	Sleep(2000);
	shang();

	Sleep(2000);
	//closeqq();
}

speechrecognition.cpp 结合到语音控制qq移动

#include <windows.h>
#include <atlstr.h>
#include <sphelper.h>
#include <sapi.h>
#include<comutil.h>
#include<string.h>

#pragma comment(lib,"sapi.lib")
#pragma comment(lib, "comsupp.lib") 

#define GID_CMD_GR 333333
#define WM_RECOEVENT WM_USER+1

 LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);

 void openqq();
 void you();
 void zuo();
 void shang();
 void xia();
 void closeqq();
 void show();
 void hide();

 char 	 szAppName[] = "TsinghuaYincheng";
 BOOL b_initSR;
 BOOL b_Cmd_Grammar;
 CComPtr<ISpRecoContext>m_cpRecoCtxt;  //语音识别程序接口
 CComPtr<ISpRecoGrammar>m_cpCmdGramma; //识别语法
 CComPtr<ISpRecognizer>m_cpRecoEngine; //语音识别引擎
 int speak(wchar_t *str);

 int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,PSTR szCmdLine,int iCmdShow)
 {
	 HWND        hwnd;
	 MSG         msg;
	 WNDCLASS    wndclass;

	 wndclass.cbClsExtra          =0;
	 wndclass.cbWndExtra          =0;
	 wndclass.hbrBackground       =(HBRUSH)GetStockObject(WHITE_BRUSH);
	 wndclass.hCursor             =LoadCursor(NULL,IDC_ARROW);
	 wndclass.hIcon               =LoadIcon(NULL,IDI_APPLICATION);
	 wndclass.hInstance           =hInstance;
	 wndclass.lpfnWndProc         =WndProc;
	 wndclass.lpszClassName       =szAppName;
	 wndclass.lpszMenuName        =NULL;
	 wndclass.style               =CS_HREDRAW|CS_VREDRAW;

	 if(!RegisterClass(&wndclass))
	 {
		 MessageBox(NULL,TEXT("This program requires Windows NT!"),szAppName,MB_ICONERROR);
		 return 0;
	 }
	 speak(L"谭胜是一个猥琐男");

	 hwnd=CreateWindow(szAppName,
		               TEXT("传智播客C/C++学院语音识别教程"),
					   WS_OVERLAPPEDWINDOW,
					   CW_USEDEFAULT,
					   CW_USEDEFAULT,
					   CW_USEDEFAULT,
					   CW_USEDEFAULT,
					   NULL,
					   NULL,
					   hInstance,
					   NULL);

	 ShowWindow(hwnd,iCmdShow);
	 UpdateWindow(hwnd);

	 while(GetMessage(&msg,NULL,0,0))
	 {
		 TranslateMessage(&msg);
		 DispatchMessage(&msg);
	 }

	 return msg.wParam;
 }

 LRESULT CALLBACK WndProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam)
 {
	 HDC           hdc;
	 PAINTSTRUCT   ps;

	 switch(message)
	 {
	 case WM_CREATE:
		 {
			 //初始化COM端口
			 ::CoInitializeEx(NULL,COINIT_APARTMENTTHREADED);
			 //创建识别引擎COM实例为共享型
			 HRESULT hr=m_cpRecoEngine.CoCreateInstance(CLSID_SpSharedRecognizer);
			 //创建识别上下文接口
			 if(SUCCEEDED(hr))
			 {
				 hr=m_cpRecoEngine->CreateRecoContext(&m_cpRecoCtxt);
			 }
			 else MessageBox(hwnd,TEXT("error1"),TEXT("error"),S_OK);
			 //设置识别消息,使计算机时刻监听语音消息
			 if(SUCCEEDED(hr))
			 {
				 hr=m_cpRecoCtxt->SetNotifyWindowMessage(hwnd,WM_RECOEVENT,0,0);
			 }
			 else MessageBox(hwnd,TEXT("error2"),TEXT("error"),S_OK);
			 //设置我们感兴趣的事件
			 if(SUCCEEDED(hr))
			 {
				 ULONGLONG ullMyEvents=SPFEI(SPEI_SOUND_START)|SPFEI(SPEI_RECOGNITION)|SPFEI(SPEI_SOUND_END);
				 hr=m_cpRecoCtxt->SetInterest(ullMyEvents,ullMyEvents);
			 }
			 else MessageBox(hwnd,TEXT("error3"),TEXT("error"),S_OK);
			 //创建语法规则
			 b_Cmd_Grammar=TRUE;
			 if(FAILED(hr))
			 {
				 MessageBox(hwnd,TEXT("error4"),TEXT("error"),S_OK);
			 }
			 hr=m_cpRecoCtxt->CreateGrammar(GID_CMD_GR,&m_cpCmdGramma);
			 WCHAR wszXMLFile[20]=L"er.xml";
			 MultiByteToWideChar(CP_ACP,0,(LPCSTR)"er.xml",-1,wszXMLFile,256);
			 hr=m_cpCmdGramma->LoadCmdFromFile(wszXMLFile,SPLO_DYNAMIC);
			 if(FAILED(hr))
			 {
				 MessageBox(hwnd,TEXT("error5"),TEXT("error"),S_OK);
			 }
			 b_initSR=TRUE;
			 //在开始识别时,激活语法进行识别
		     hr=m_cpCmdGramma->SetRuleState(NULL,NULL,SPRS_ACTIVE);
	    	 return 0;
		 }
	 case WM_RECOEVENT:
		 {
			 RECT rect;
             GetClientRect(hwnd,&rect);
             hdc=GetDC(hwnd);
			 USES_CONVERSION;
			 CSpEvent event;
			 while(event.GetFrom(m_cpRecoCtxt)==S_OK)
			 {
			     switch(event.eEventId)
			     {
			     case SPEI_RECOGNITION:
    				 {
            			 static const WCHAR wszUnrecognized[]=L"<Unrecognized>";
		            	 CSpDynamicString dstrText;
			    		 //取得识别结果
				    	 if(FAILED(event.RecoResult()->GetText(SP_GETWHOLEPHRASE,SP_GETWHOLEPHRASE,TRUE,&dstrText,NULL)))
					     {
						     dstrText=wszUnrecognized;
    					 }
        	    		 BSTR SRout;
	        	    	 dstrText.CopyToBSTR(&SRout);
						 char* lpszText2 = _com_util::ConvertBSTRToString(SRout);

			    		 if(b_Cmd_Grammar)
				    	 {
							 //绘制文本
							 DrawText(hdc, TEXT(lpszText2), -1, &rect, DT_SINGLELINE | DT_CENTER | DT_VCENTER);
							 if (strcmp("我是学霸",lpszText2)==0)
	    				     {
								MessageBoxA(0, lpszText2, lpszText2, 0);
					         }
							 if (strcmp("清华土匪", lpszText2) == 0)
							 {
								 MessageBoxA(0, lpszText2, lpszText2, 0);
							 }
							 if (strcmp("传智播客", lpszText2) == 0)
							 {
								 MessageBoxA(0, lpszText2, lpszText2, 0);
							 }
							 if (strcmp("天下无双", lpszText2) == 0)
							 {
								 wchar_t * str = L"谭胜大爷吹牛皮的功夫天下无双";
								 speak(str);
							 }
							 if (strcmp("给我上", lpszText2) == 0)
							 {
								 speak(L"亲爱的主人,好");
								 shang();
							 }
							 if (strcmp("给我下", lpszText2) == 0)
							 {
								 speak(L"亲爱的主人,好");
								 xia();
							 }
							 if (strcmp("给我左", lpszText2) == 0)
							 {
								 speak(L"亲爱的主人,好");
								 zuo();
							 }
							 if (strcmp("给我右", lpszText2) == 0)
							 {
								 speak(L"亲爱的主人,好");
								 you();
							 }
							 if (strcmp("打开企鹅", lpszText2) == 0)
							 {
								 speak(L"亲爱的主人,好");
								 openqq();
							 }
							 if (strcmp("关闭企鹅", lpszText2) == 0)
							 {
								 speak(L"亲爱的主人,好");
								 closeqq();
							 }
							 if (strcmp("显示", lpszText2) == 0)
							 {
								 speak(L"亲爱的主人,好");
								 show();
							 }
							 if (strcmp("隐藏", lpszText2) == 0)
							 {
								 speak(L"亲爱的主人,好");
								 hide();
							 }
							 if (strcmp("谭胜是谁", lpszText2) == 0)
							 {
								 speak(L"谭胜是横空出世的英雄,百年不遇的天才");
							 }
							 if (strcmp("你是谁", lpszText2) == 0)
							 {
								 speak(L"我是你们勇猛勤奋彪悍的谭胜大哥写的语音识别程序");
							 }

							 if (strcmp("你是笨蛋", lpszText2) == 0)
							 {
								 speak(L"我的创造者谭胜大哥聪明的惊天地泣鬼神");
							 }
							 if (strcmp("你是蠢猪", lpszText2) == 0)
							 {
								 speak(L"我固然很蠢,但是我的创造者谭胜大哥聪明的惊天地泣鬼神");
							 }
							 if (strcmp("你很好", lpszText2) == 0)
							 {
								 speak(L"我一直很牛逼,多亏谭大爷");
							 }
							 if (strcmp("中秋快乐", lpszText2) == 0)
							 {
								 speak(L"谭大爷叫你回家吃月饼");
							 }

    					 }
        			 }
	    		 }
			 }
			 return TRUE;
		 }
	 case WM_PAINT:
		 hdc=BeginPaint(hwnd,&ps);
		 EndPaint(hwnd,&ps);
		 return 0;
	 case WM_DESTROY:
		 PostQuitMessage(0);
		 return 0;
	 }
	 return DefWindowProc(hwnd,message,wParam,lParam);
 }

#pragma comment(lib, "ole32.lib") //CoInitialize CoCreateInstance需要调用ole32.dll
int speak(wchar_t *str)
{
	 ISpVoice * pVoice = NULL;
	 ::CoInitialize(NULL);
	 //获取ISpVoice接口:
	 long hr = CoCreateInstance(CLSID_SpVoice, NULL, CLSCTX_ALL, IID_ISpVoice, (void **)&pVoice);
	 hr = pVoice->Speak(str, 0, NULL);
	 pVoice->Release();
	 pVoice = NULL;
	 //千万不要忘记:
	 ::CoUninitialize();
	 return TRUE;
 }

void openqq()
{
	ShellExecuteA(0, "open", "\"C:\\Program Files (x86)\\Tencent\\QQ\\QQProtect\\Bin\\QQProtect.exe\"", 0, 0, 1);
}

void closeqq()
{
	system("taskkill /f /im QQ.exe");
}

void show()
{
	HWND win = FindWindowA("TXGuiFoundation", "QQ2013");
	if (win != NULL)
	{
		ShowWindow(win, SW_SHOW);
	}
}

void  hide()
{
	HWND win = FindWindowA("TXGuiFoundation", "QQ2013");
	if (win != NULL)
	{
		ShowWindow(win, SW_HIDE);
	}
}

void  shang()
{
	HWND win = FindWindowA("TXGuiFoundation", "QQ2013");
	if (win != NULL)
	{
		RECT rectwind;//区域,lefr ,right ,top,bottom
		GetWindowRect(win, &rectwind);//获取区域
		SetWindowPos(win, NULL, rectwind.left, rectwind.top - 100, 300, 300, 1);
	}
}

void xia()
{
	HWND win = FindWindowA("TXGuiFoundation", "QQ2013");
	if (win != NULL)
	{
		RECT rectwind;//区域,lefr ,right ,top,bottom
		GetWindowRect(win, &rectwind);//获取区域
		SetWindowPos(win, NULL, rectwind.left, rectwind.top + 100, 300, 300, 1);
	}
}

void zuo()
{
	HWND win = FindWindowA("TXGuiFoundation", "QQ2013");
	if (win != NULL)
	{
		RECT rectwind;//区域,lefr ,right ,top,bottom
		GetWindowRect(win, &rectwind);//获取区域
		SetWindowPos(win, NULL, rectwind.left - 100, rectwind.top, 300, 300, 1);
	}
}

void you()
{
	HWND win = FindWindowA("TXGuiFoundation", "QQ2013");
	if (win != NULL)
	{
		RECT rectwind;//区域,lefr ,right ,top,bottom
		GetWindowRect(win, &rectwind);//获取区域
		SetWindowPos(win, NULL, rectwind.left + 100, rectwind.top, 300, 300, 1);//设置区域位置
	}
}

er.xml

<?xml version="1.0" encoding="utf-8"?>
<GRAMMAR LANGID="804">
  <DEFINE>
    <ID NAME="CMD" VAL="10"/>
    </DEFINE>
  <RULE NAME="COMMAND" ID="CMD" TOPLEVEL="ACTIVE">
    <L>
      <P>我是学霸</P>
      <P>清华土匪</P>
      <P>传智播客</P>
      <P>天下无双</P>
      <P>给我上</P>我
      <P>给我下</P>
      <P>给我左</P>
      <P>给我右</P>
      <P>打开企鹅</P>
      <P>关闭企鹅</P>
      <P>显示</P>
      <P>隐藏</P>
      <P>谭胜是谁</P>
      <P>你是谁</P>
      <P>你是笨蛋</P>
      <P>你是蠢猪</P>
      <P>你很好</P>
      <P>中秋快乐</P>
      </L>
    </RULE>
  </GRAMMAR>

语音控制游戏

#include <windows.h>
#include <atlstr.h>
#include <sphelper.h>
#include <sapi.h>
#include<comutil.h>
#include<string.h>

#pragma comment(lib,"sapi.lib")
#pragma comment(lib, "comsupp.lib") 

#define GID_CMD_GR 333333
#define WM_RECOEVENT WM_USER+1

 LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);

 char 	 szAppName[] = "TsinghuaYincheng";
 BOOL b_initSR;
 BOOL b_Cmd_Grammar;
 CComPtr<ISpRecoContext>m_cpRecoCtxt;  //语音识别程序接口
 CComPtr<ISpRecoGrammar>m_cpCmdGramma; //识别语法
 CComPtr<ISpRecognizer>m_cpRecoEngine; //语音识别引擎
 int speak(wchar_t *str);

 int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,PSTR szCmdLine,int iCmdShow)
 {
	 HWND        hwnd;
	 MSG         msg;
	 WNDCLASS    wndclass;

	 wndclass.cbClsExtra          =0;
	 wndclass.cbWndExtra          =0;
	 wndclass.hbrBackground       =(HBRUSH)GetStockObject(WHITE_BRUSH);
	 wndclass.hCursor             =LoadCursor(NULL,IDC_ARROW);
	 wndclass.hIcon               =LoadIcon(NULL,IDI_APPLICATION);
	 wndclass.hInstance           =hInstance;
	 wndclass.lpfnWndProc         =WndProc;
	 wndclass.lpszClassName       =szAppName;
	 wndclass.lpszMenuName        =NULL;
	 wndclass.style               =CS_HREDRAW|CS_VREDRAW;

	 if(!RegisterClass(&wndclass))
	 {
		 MessageBox(NULL,TEXT("This program requires Windows NT!"),szAppName,MB_ICONERROR);
		 return 0;
	 }
	 speak(L"谭胜是一个猥琐男");

	 hwnd=CreateWindow(szAppName,
		               TEXT("传智播客C/C++学院语音识别教程"),
					   WS_OVERLAPPEDWINDOW,
					   CW_USEDEFAULT,
					   CW_USEDEFAULT,
					   CW_USEDEFAULT,
					   CW_USEDEFAULT,
					   NULL,
					   NULL,
					   hInstance,
					   NULL);

	 ShowWindow(hwnd,iCmdShow);
	 UpdateWindow(hwnd);

	 while(GetMessage(&msg,NULL,0,0))
	 {
		 TranslateMessage(&msg);
		 DispatchMessage(&msg);
	 }

	 return msg.wParam;
 }

 LRESULT CALLBACK WndProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam)
 {
	 HDC           hdc;
	 PAINTSTRUCT   ps;

	 switch(message)
	 {
	 case WM_CREATE:
		 {
			 //初始化COM端口
			 ::CoInitializeEx(NULL,COINIT_APARTMENTTHREADED);
			 //创建识别引擎COM实例为共享型
			 HRESULT hr=m_cpRecoEngine.CoCreateInstance(CLSID_SpSharedRecognizer);
			 //创建识别上下文接口
			 if(SUCCEEDED(hr))
			 {
				 hr=m_cpRecoEngine->CreateRecoContext(&m_cpRecoCtxt);
			 }
			 else MessageBox(hwnd,TEXT("error1"),TEXT("error"),S_OK);
			 //设置识别消息,使计算机时刻监听语音消息
			 if(SUCCEEDED(hr))
			 {
				 hr=m_cpRecoCtxt->SetNotifyWindowMessage(hwnd,WM_RECOEVENT,0,0);
			 }
			 else MessageBox(hwnd,TEXT("error2"),TEXT("error"),S_OK);
			 //设置我们感兴趣的事件
			 if(SUCCEEDED(hr))
			 {
				 ULONGLONG ullMyEvents=SPFEI(SPEI_SOUND_START)|SPFEI(SPEI_RECOGNITION)|SPFEI(SPEI_SOUND_END);
				 hr=m_cpRecoCtxt->SetInterest(ullMyEvents,ullMyEvents);
			 }
			 else MessageBox(hwnd,TEXT("error3"),TEXT("error"),S_OK);
			 //创建语法规则
			 b_Cmd_Grammar=TRUE;
			 if(FAILED(hr))
			 {
				 MessageBox(hwnd,TEXT("error4"),TEXT("error"),S_OK);
			 }
			 hr=m_cpRecoCtxt->CreateGrammar(GID_CMD_GR,&m_cpCmdGramma);
			 WCHAR wszXMLFile[20]=L"er.xml";
			 MultiByteToWideChar(CP_ACP,0,(LPCSTR)"er.xml",-1,wszXMLFile,256);
			 hr=m_cpCmdGramma->LoadCmdFromFile(wszXMLFile,SPLO_DYNAMIC);
			 if(FAILED(hr))
			 {
				 MessageBox(hwnd,TEXT("error5"),TEXT("error"),S_OK);
			 }
			 b_initSR=TRUE;
			 //在开始识别时,激活语法进行识别
		     hr=m_cpCmdGramma->SetRuleState(NULL,NULL,SPRS_ACTIVE);
	    	 return 0;
		 }
	 case WM_RECOEVENT:
		 {
			 RECT rect;
             GetClientRect(hwnd,&rect);
             hdc=GetDC(hwnd);
			 USES_CONVERSION;
			 CSpEvent event;
			 while(event.GetFrom(m_cpRecoCtxt)==S_OK)
			 {
			     switch(event.eEventId)
			     {
			     case SPEI_RECOGNITION:
    				 {
            			 static const WCHAR wszUnrecognized[]=L"<Unrecognized>";
		            	 CSpDynamicString dstrText;
			    		 //取得识别结果
				    	 if(FAILED(event.RecoResult()->GetText(SP_GETWHOLEPHRASE,SP_GETWHOLEPHRASE,TRUE,&dstrText,NULL)))
					     {
						     dstrText=wszUnrecognized;
    					 }
        	    		 BSTR SRout;
	        	    	 dstrText.CopyToBSTR(&SRout);
						 char* lpszText2 = _com_util::ConvertBSTRToString(SRout);

			    		 if(b_Cmd_Grammar)
				    	 {
							 DrawText(hdc, TEXT(lpszText2), -1, &rect, DT_SINGLELINE | DT_CENTER | DT_VCENTER);
							 if (strcmp("旋风刀",lpszText2)==0)
	    				     {
								 keybd_event('A', 0, 0, 0);//按下
								 keybd_event('A', 0, KEYEVENTF_KEYUP, 0);//弹起
								 Sleep(10);
								 keybd_event('D', 0, 0, 0);//按下
								 keybd_event('D', 0, KEYEVENTF_KEYUP, 0);//弹起
								 Sleep(10);
								 keybd_event('W', 0, 0, 0);//按下
								 keybd_event('W', 0, KEYEVENTF_KEYUP, 0);//弹起
								 Sleep(10);
								 mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);
								 mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);

					         }
							 if (strcmp("大风吹", lpszText2) == 0)
							 {
								 //sww l
								 keybd_event('A', 0, 0, 0);//按下
								 keybd_event('A', 0, KEYEVENTF_KEYUP, 0);//弹起
								 Sleep(10);
								 keybd_event('D', 0, 0, 0);//按下
								 keybd_event('D', 0, KEYEVENTF_KEYUP, 0);//弹起
								 Sleep(10);
								 keybd_event('S', 0, 0, 0);//按下
								 keybd_event('S', 0, KEYEVENTF_KEYUP, 0);//弹起
								 Sleep(10);
								 mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);
								 mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);

							 }
							 if (strcmp("充气", lpszText2) == 0)
							 {
								 //   \ang
								 keybd_event(VK_OEM_102, 0, 0, 0);//按下
								 keybd_event(VK_OEM_102, 0, KEYEVENTF_KEYUP, 0);//弹起
								 Sleep(10);
								 keybd_event('A', 0, 0, 0);//按下
								 keybd_event('A', 0, KEYEVENTF_KEYUP, 0);//弹起
								 Sleep(10);
								 keybd_event('N', 0, 0, 0);//按下
								 keybd_event('N', 0, KEYEVENTF_KEYUP, 0);//弹起
								 Sleep(10);
								 keybd_event('G', 0, 0, 0);//按下6igrk;)移植
								 keybd_event('G', 0, KEYEVENTF_KEYUP, 0);//弹起
								 Sleep(10);
								 keybd_event(VK_RETURN, 0, 0, 0);//按下6igrk;)移植
								 keybd_event(VK_RETURN,  0, KEYEVENTF_KEYUP, 0);//弹起

							 }
							 if (strcmp("跳跃", lpszText2) == 0)
							 {

								 keybd_event(VK_SPACE, 0, 0, 0);//按下
								 keybd_event(VK_SPACE, 0, KEYEVENTF_KEYUP, 0);//弹起

							 }
							 if (strcmp("趴下", lpszText2) == 0)
							 {

							 }
							 if (strcmp("前进", lpszText2) == 0)
							 {

							 }
							 if (strcmp("后退", lpszText2) == 0)
							 {

							 }

    					 }
        			 }
	    		 }
			 }
			 return TRUE;
		 }
	 case WM_PAINT:
		 hdc=BeginPaint(hwnd,&ps);
		 EndPaint(hwnd,&ps);
		 return 0;
	 case WM_DESTROY:
		 PostQuitMessage(0);
		 return 0;
	 }
	 return DefWindowProc(hwnd,message,wParam,lParam);
 }

#pragma comment(lib, "ole32.lib") //CoInitialize CoCreateInstance需要调用ole32.dll
int speak(wchar_t *str)
{
	 ISpVoice * pVoice = NULL;
	 ::CoInitialize(NULL);
	 //获取ISpVoice接口:
	 long hr = CoCreateInstance(CLSID_SpVoice, NULL, CLSCTX_ALL, IID_ISpVoice, (void **)&pVoice);
	 hr = pVoice->Speak(str, 0, NULL);
	 pVoice->Release();
	 pVoice = NULL;
	 //千万不要忘记:
	 ::CoUninitialize();
	 return TRUE;
 }

er.xml与cpp文件放在同一目录下

<?xml version="1.0" encoding="utf-8"?>
<GRAMMAR LANGID="804">
  <DEFINE>
    <ID NAME="CMD" VAL="10"/>
    </DEFINE>
  <RULE NAME="COMMAND" ID="CMD" TOPLEVEL="ACTIVE">
    <L>
      <P>旋风刀</P>
      <P>大风吹</P>
      <P>充气</P>
      <P>跳跃</P>
      <P>趴下</P>
      <P>前进</P>
      <P>后退</P>
      </L>
    </RULE>
  </GRAMMAR>

版权声明:本博客所有文章均为原创,欢迎交流,欢迎转载;转载请勿篡改内容,并且注明出处,谢谢!

时间: 2024-10-07 07:02:08

【C/C++学院】0805-语音识别控制QQ/语音控制游戏的相关文章

arduino + ld3320语音识别模块实现语音控制LED灯

材料准备: 1.arduino UNO开发板 2.LD3320语音识别模块 面包板,杜邦线,LED灯等 接线: LE3320     ----      arduino 1.3.3v(两个都接)  --  3.3v 2.GND(两个都接)  --  GND 3.MISO  --  D12 4.MOSI  --  D11 5.SCK  --  D13 6.NSS  --  D4 7.NC  --  空着 8.RST  --  D9 9.WR  -- GND 10.IRQ  -- D2 8号引脚串联

树莓派-语音聊天机器人+语音控制引脚电平高低

最近和几位本学院的研究生师兄师姐参加研究生电子设计大赛,自己也来折腾下之前没有搞完的语音控制小车.恰巧自己负责的是语音控制这部分,折腾了几天也差不多搞定啦…把自己的折腾套路总结一下,给一起折腾的小伙伴点经验之谈… 一.配置树莓派 我们这次使用的最新的树莓派3,镜像直接是官网下载的Raspbian.这也是让我感觉最有树莓派感觉的一个系统.主要是sudo raspi-config的配置. 1和2最好都是设置一下,然后3看自己爱好吧:4的里面我都是重新设置的,包括时区.语言和字体.字体最好下载(apt

windows下利用微软的SpeechSDK实现语音控制

语音识别是当前研究的热点,我们可以利用微软的语音识别引擎来进行二次开发.首先需要安装微软的SpeechSDK,安装完成后配置项目的包含目录和库目录,这些都不是重点,不会的可以去百度.然后就可以写代码了,码农嘛,还是看代码有感觉. 源文件<Demo.cpp> #include <Windows.h> #include <atlstr.h> #include <sphelper.h> #include <sapi.h> #include <co

利用Olami SDK 实现语音控制计算器(iOS)

博客链接:http://blog.csdn.net/scarlettzhao0602/article/details/76576836 一.简介: Olami Calculator是一款在键盘输入算式的普通计算器的基础上,增加了支持语音控制输入算式输出结果的人工智能计算器.此外还增加了多种动画效果,计算结果提示音功能,多元化主题换肤功能,以及保存计算公式,侧滑栏查看收藏记录等功能.网上也有许多语音计算器,但是打开看,只是添加了按钮提示音等,并不能识别我们对着计算器说的内容,而Olami Calc

语音控制的tab选项卡

前端开发whqet,csdn,王海庆,whqet,前端开发专家 ladies and 乡亲们,程序猿同志们,周末仍然坚守工作岗位,或者学习不辍的童鞋们,福音来了. 语音识别高不高端.难不难? 今天给大家推荐一个简单易用的js实现的语音识别框架annyang,然后一个案例示范使用. 在线案例,下载收藏. annyang是一个能够实现语音识别的js类库,小巧易用(只2k),兼容中文.接下来我们看看怎么使用. 首先导入该annyang库,能够使用CDN的方式,也能够下载来使用. <!--下载到本地使用

&lt;交流贴&gt;android语音识别之科大讯飞语音API的使用

因为最近在研究语音识别,所以借鉴了一下CreAmazing网友的帖子 Android系统本身其实提供有语音识别模块,在它的APIDemo里也有关于语音识别的sample,不过经过大多开发者的真机测试,发现很多真机并不能使用哪个sample,在网上查找了一下原因,大部分是因为开发者在刷机的时候,大部分的ROM都阉割掉了语音识别和语音合成TTS(Text To Speech)部分,所以运行sample的时候会有异常抛出. 如果不用google提供的语音识别,要怎么实现语音识别喃?科大讯飞的语音API

使用Olami SDK 语音控制一个支持HomeKit的智能家居的iOS程序

前言 HomeKit是苹果发布的智能家居平台.通过HomeKit组件,用户可以通过iphone.iPad和ipod Touch来控制智能灯泡,风扇.空调等支持HomeKit的智能家居,尤其是可以通过Siri进行语音控制. 但是通过Siri进行语音控制有个很大的问题,就是Siri支持的语料无法进行自由的扩展,没办法添加更多的说法.而Olami SDK则可以通过OSL(OLAMI 语法描述语言 OLAMI Syntax Language,简称:OSL)自由的进行扩展,对智能对话的能力扩展变得非常容易

Chrome下的语音控制框架MyVoix.js使用篇(四)

在上一篇博文中,我为大家介绍了myvoix.js中的smart learning模块,以及何如使用该功能.(myvoix.js的源码地址会在每一篇文章末尾放出) 文本将拓展 Chrome下的语音控制框架MyVoix.js使用篇(二) 中的实例(没看过的同学请猛戳链接),具象地介绍smart learning模块的使用.在之前的实例中,我们通过语音输入,让 Hello My Voix 标题变化成各种颜色, 并且通过预存指令来增加语音指令的识别率.在本文中将去除预存指令这一块,通过smart lea

一个类似于QQ语音聊天时的拖拽移动悬浮小球

闲来无事,分享一个最近在某个地方借鉴的一个demo(原谅我真的忘了在哪里看到的了,不然也就贴地址了)这个demo的逻辑思路并不是很难,推敲一下,很快就能理解,只是觉得这样的一个组合控件用起来蛮能增色自己的APP的,所以也就记下了. 先给你们看一下效果图. 这里的悬浮小球其实是一个组合控件,可以在上面加上其他效果.之后我会上传demo.如果要做成QQ语音的那种,可以把图片移除,换上一个label,在label上加上时间久可以了,用的时候,可以直接把这个类拖进工程,直接加到想要添加的仕途上就可以啦.