怎么在c f游戏里使用c 百度语音识别别

1371人阅读
Windows c/c++(22)
C/C++学院(60)
语音识别控制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);
HWND win = FindWindowA(&TXGuiFoundation&, &QQ2013&);
if (win != NULL)
ShowWindow(win, SW_HIDE);
HWND win = FindWindowA(&TXGuiFoundation&, &QQ2013&);
if (win != NULL)
RECT//区域,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//区域,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//区域,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//区域,lefr ,right ,top,bottom
GetWindowRect(win, &rectwind);//获取区域
SetWindowPos(win, NULL, rectwind.left + 100, rectwind.top, 300, 300, 1);//设置区域位置
void main()
Sleep(3000);
Sleep(2000);
Sleep(2000);
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();
szAppName[] = &TsinghuaYincheng&;
BOOL b_initSR;
BOOL b_Cmd_G
CComPtr&ISpRecoContext&m_cpRecoC
//语音识别程序接口
CComPtr&ISpRecoGrammar&m_cpCmdG //识别语法
CComPtr&ISpRecognizer&m_cpRecoE //语音识别引擎
int speak(wchar_t *str);
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,PSTR szCmdLine,int iCmdShow)
wndclass.cbClsExtra
wndclass.cbWndExtra
wndclass.hbrBackground
=(HBRUSH)GetStockObject(WHITE_BRUSH);
wndclass.hCursor
=LoadCursor(NULL,IDC_ARROW);
wndclass.hIcon
=LoadIcon(NULL,IDI_APPLICATION);
wndclass.hInstance
wndclass.lpfnWndProc
wndclass.lpszClassName
wndclass.lpszMenuName
wndclass.style
=CS_HREDRAW|CS_VREDRAW;
if(!RegisterClass(&wndclass))
MessageBox(NULL,TEXT(&This program requires Windows NT!&),szAppName,MB_ICONERROR);
speak(L&谭胜是一个猥琐男&);
hwnd=CreateWindow(szAppName,
TEXT(&传智播客C/C++学院语音识别教程&),
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
hInstance,
ShowWindow(hwnd,iCmdShow);
UpdateWindow(hwnd);
while(GetMessage(&msg,NULL,0,0))
TranslateMessage(&msg);
DispatchMessage(&msg);
return msg.wP
LRESULT CALLBACK WndProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam)
PAINTSTRUCT
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);
case WM_RECOEVENT:
GetClientRect(hwnd,&rect);
hdc=GetDC(hwnd);
USES_CONVERSION;
while(event.GetFrom(m_cpRecoCtxt)==S_OK)
switch(event.eEventId)
case SPEI_RECOGNITION:
static const WCHAR wszUnrecognized[]=L&&Unrecognized&&;
CSpDynamicString dstrT
//取得识别结果
if(FAILED(event.RecoResult()-&GetText(SP_GETWHOLEPHRASE,SP_GETWHOLEPHRASE,TRUE,&dstrText,NULL)))
dstrText=wszU
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&亲爱的主人,好&);
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&亲爱的主人,好&);
closeqq();
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&我固然很蠢,但是我的创造者谭胜大哥聪明的惊天地泣鬼神&);
if (strcmp(&你很好&, lpszText2) == 0)
speak(L&我一直很牛逼,多亏谭大爷&);
if (strcmp(&中秋快乐&, lpszText2) == 0)
speak(L&谭大爷叫你回家吃月饼&);
return TRUE;
case WM_PAINT:
hdc=BeginPaint(hwnd,&ps);
EndPaint(hwnd,&ps);
case WM_DESTROY:
PostQuitMessage(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);
HWND win = FindWindowA(&TXGuiFoundation&, &QQ2013&);
if (win != NULL)
ShowWindow(win, SW_HIDE);
HWND win = FindWindowA(&TXGuiFoundation&, &QQ2013&);
if (win != NULL)
RECT//区域,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//区域,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//区域,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//区域,lefr ,right ,top,bottom
GetWindowRect(win, &rectwind);//获取区域
SetWindowPos(win, NULL, rectwind.left + 100, rectwind.top, 300, 300, 1);//设置区域位置
&?xml version=&1.0& encoding=&utf-8&?&
&GRAMMAR LANGID=&804&&
&ID NAME=&CMD& VAL=&10&/&
&RULE NAME=&COMMAND& ID=&CMD& TOPLEVEL=&ACTIVE&&
&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&
&/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);
szAppName[] = &TsinghuaYincheng&;
BOOL b_initSR;
BOOL b_Cmd_G
CComPtr&ISpRecoContext&m_cpRecoC
//语音识别程序接口
CComPtr&ISpRecoGrammar&m_cpCmdG //识别语法
CComPtr&ISpRecognizer&m_cpRecoE //语音识别引擎
int speak(wchar_t *str);
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,PSTR szCmdLine,int iCmdShow)
wndclass.cbClsExtra
wndclass.cbWndExtra
wndclass.hbrBackground
=(HBRUSH)GetStockObject(WHITE_BRUSH);
wndclass.hCursor
=LoadCursor(NULL,IDC_ARROW);
wndclass.hIcon
=LoadIcon(NULL,IDI_APPLICATION);
wndclass.hInstance
wndclass.lpfnWndProc
wndclass.lpszClassName
wndclass.lpszMenuName
wndclass.style
=CS_HREDRAW|CS_VREDRAW;
if(!RegisterClass(&wndclass))
MessageBox(NULL,TEXT(&This program requires Windows NT!&),szAppName,MB_ICONERROR);
speak(L&谭胜是一个猥琐男&);
hwnd=CreateWindow(szAppName,
TEXT(&传智播客C/C++学院语音识别教程&),
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
hInstance,
ShowWindow(hwnd,iCmdShow);
UpdateWindow(hwnd);
while(GetMessage(&msg,NULL,0,0))
TranslateMessage(&msg);
DispatchMessage(&msg);
return msg.wP
LRESULT CALLBACK WndProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam)
PAINTSTRUCT
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);
case WM_RECOEVENT:
GetClientRect(hwnd,&rect);
hdc=GetDC(hwnd);
USES_CONVERSION;
while(event.GetFrom(m_cpRecoCtxt)==S_OK)
switch(event.eEventId)
case SPEI_RECOGNITION:
static const WCHAR wszUnrecognized[]=L&&Unrecognized&&;
CSpDynamicString dstrT
//取得识别结果
if(FAILED(event.RecoResult()-&GetText(SP_GETWHOLEPHRASE,SP_GETWHOLEPHRASE,TRUE,&dstrText,NULL)))
dstrText=wszU
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)
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)
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);
case WM_DESTROY:
PostQuitMessage(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&&
&ID NAME=&CMD& VAL=&10&/&
&RULE NAME=&COMMAND& ID=&CMD& TOPLEVEL=&ACTIVE&&
&P&旋风刀&/P&
&P&大风吹&/P&
&P&充气&/P&
&P&跳跃&/P&
&P&趴下&/P&
&P&前进&/P&
&P&后退&/P&
&/GRAMMAR&
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:580309次
积分:9740
积分:9740
排名:第1743名
原创:379篇
评论:140条
文章:19篇
阅读:46816
文章:14篇
阅读:11329
文章:60篇
阅读:71606
阅读:6373
文章:23篇
阅读:44637
文章:79篇
阅读:158735
(1)(4)(4)(5)(5)(5)(6)(4)(5)(6)(6)(4)(5)(4)(5)(11)(7)(8)(9)(8)(11)(12)(17)(14)(2)(1)(6)(6)(5)(2)(7)(8)(3)(6)(20)(27)(36)(47)(46)C&语音识别用法实例
这篇文章主要介绍了C#语音识别用法,实例分析了C#利用微软操作系统自动的语音识别功能,读取信息的技巧,需要的朋友可以参考下
本文实例讲述了C#语音识别用法。分享给大家供大家参考。具体分析如下:
C#可以利用微软操作系统自动的语音识别功能,读取信息。步骤如下:
在项目中添加
引入命名空间:
using SpeechL
读取的代码:
SpeechVoiceSpeakFlags flag = SpeechVoiceSpeakFlags.SVSFlagsA
SpVoice voice = new SpVoice();
voice.Voice = voice.GetVoices(string.Empty, string.Empty).Item(0);
voice.Speak("你是一个大美女,我试一个大帅锅,哈哈", flag);
1. SpeechVoiceSpeakFlags 是一个枚举。
SpVoice标志:
SVSFDefault = 0
SVSFlagsAsync = 1
SVSFPurgeBeforeSpeak = 2
SVSFIsFilename = 4
SVSFIsXML = 8
SVSFIsNotXML = 16
SVSFPersistXML = 32
正规化标志:
SVSFNLPSpeakPunc = 64
SVSFNLPMask = 64
SVSFVoiceMask = 127
SVSFUnusedFlags = -128
结束枚举分子
SVSFDefault
指定应使用的默认设置。默认值是:
讲定的文本字符串同步(覆盖与SVSFlagsAsync),
不清除挂起说话请求(覆盖与SVSFPurgeBeforeSpeak),
为了解析XML的文本,如果第一个字符是左尖括号(覆盖与SVSFIsXML或SVSFIsNotXML),
不坚持全球XML状态更改在讲电话(覆盖SVSFPersistXML),
不扩展的标点字符成字(覆盖与SVSFNLPSpeakPunc)的。
SVSFlagsAsync
指定的讲调用应该是异步的。也就是说,它会立即返回排队的讲请求后。
SVSFPurgeBeforeSpeak
清除所有悬而未决的发言请求,在此之前讲的呼叫。
SVSFIsFilename
的说话方式传递的字符串是一个文件名,而不是文字。其结果,没有发言字符串本身而是该文件的路径,该路径是口头的处理。
输入的文本将被解析为XML标记。
SVSFIsNotXML
输入的文本将不会被解析的XML标记。
SVSFPersistXML
XML标记的全局状态的变化将持续到说话的呼叫。
SVSFNLPSpeakPunc
,标点符号应扩大到字(例如:“这是什么。”将成为“这是这期”)。
SVSFNLPMask
SAPI(而不是文本到语音引擎)处理此掩码中的标志。
SVSFVoiceMask
此面膜具有每一个标志位设置。
SVSFUnusedFlags
此面膜具有每一个未使用的位集。
2. SpVoice
SpVoice类是支持语音合成(TTS)的核心类。通过SpVoice对象调用TTS引擎,从而实现朗读功能。
SpVoice类有以下主要属性:
Voice:表示发音类型,相当于进行朗读的人,包括Microsoft Mary,Microsoft Mike,Microsoft Sam和Microsoft Simplified Chinese四种。其中前三种只能读英文,最后一种可以读中文,也可以读英文,但对于英文单词只能将其包括的各个字母逐一朗读出来。下面的程序中我们将会想办法解决这个问题。
Rate:语音朗读速度,取值范围为-10到+10。数值越大,速度越快。
Volume:音量,取值范围为0到100。数值越大,音量越大。
SpVoice有以下主要方法:
Speak:完成将文本信息转换为语音并按照指定的参数进行朗读,该方法有Text和Flags两个参数,分别指定要朗读的文本和朗读方式(同步或异步等)。
Pause:暂停使用该对象的所有朗读进程。该方法没有参数。
Resume:恢复该对象所对应的被暂停的朗读进程。该方法没有参数。
希望本文所述对大家的C#程序设计有所帮助。
Copyright (C) , All Rights Reserved.
版权所有 闽ICP备号
processed in 0.071 (s). 12 q(s)宁肯像种子一样等待 也不愿像疲惫的陀螺 旋转得那样勉强
  明后两天就是公司一年一度的Fedex Day了。我的理解就是技术界的头脑风暴,idea喷如泉涌的盛大节日。
  对于这次活动每个人或者两三个人一组需要有个idea,针对当前的产品现状,提出自己的改进或者丰富产品的想法,我拿出自己的手机并登了经常去的网站,语音识别这个名词脱颖而出,击中我的脑海。相比较以前手指时代的手工输入,各种在中英文乃至数字之间进行切换,往往还会因为走神或者手抖导致输入出错,然后又是一通狂按删除键,一遍一遍的输入,面对偌大的屏幕,有种使不上劲的感觉。语音输入就可以告别这一烦恼,如今的语音识别准确率高,使用简单易操作,更是为解放双手铺平了道路。你可以对着siri说帮我查看最近的天气或者定个闹铃,你可以使用讯飞语音输入法,说到哪就输入到哪,你可以让各种品牌的手机自带的语音助手给你讲个笑话&&
  今天闲来想先动动手,了解下这个语音识别技术,有什么好用的api可以调用。因为用的是度娘,所以映入眼帘的就是百度语音,"永久免费智能语音开放平台"的旗号还是深深的把我打动了。
  摸索下来,看了两种方式,一是基于REST API的方式完成语音识别,另一个是基于移动端Android平台的app语音识别。
一 、获得入场券
1.注册成为开发者
  点击进入,用你的百度账号完成登录,如果在点击&应用管理&选项卡后发现如下图所示
  说明你需要完成注册验证,提交完毕后,你就是一名百度开发者用户了。
2.创建应用
  完成上面操作后,点击&应用管理&,如果页面中没有任何应用列表,说明你还需要添加一个应用,点击页面右上角&创建新应用&,填好应用类别并给他个名字,这样就完成了应用创建。创建成功后就会看到类似下面这样的效果。
  在&查看Key&中,我们可以看到后面我们需要用到的App ID, API Key和Secret Key
3.开通服务
  创建了应用后,我们需要开通语音识别的服务之后才能使用语音识别。点击应用卡片上的&开通服务&,选择语音识别即可。
  至此,您已经获得了入场券资格。
二、 基于REST API 的语音识别
  百度语音支持android、ios和REST API三种平台。这里先介绍REST API,相对来说不用搭建android或者ios开发环境。
  进入下载REST API的示例和文档。
  示例分别有java、linux c和php版本,还附带了一个test.pcm的音频文件。
  选择java版本,导入eclipse中,代码很简单就一个测试类。
package com.baidu.speech.
import java.io.BufferedR
import java.io.DataOutputS
import java.io.F
import java.io.FileInputS
import java.io.IOE
import java.io.InputS
import java.io.InputStreamR
import java.net.HttpURLC
import java.net.URL;
import javax.xml.bind.DatatypeC
import org.json.JSONO
public class Sample {
private static final String serverURL = "/server_api";
private static String token = "";
private static final String testFileName = "C:\\Users\\Administrator\\workspace\\speechrecognition\\src\\test.pcm";
//put your own params here
private static final String apiKey = "***";//这里的apiKey就是前面申请在应用卡片中的apiKey
private static final String secretKey = "***";//这里的secretKey就是前面申请在应用卡片中的secretKey
private static final String cuid = "***";//cuid是设备的唯一标示,因为我用的是PC,所以这里用的是网卡Mac地址
public static void main(String[] args) throws Exception {
getToken();
method1();
method2();
private static void getToken() throws Exception {
String getTokenURL = "/oauth/2.0/token?grant_type=client_credentials" +
"&client_id=" + apiKey + "&client_secret=" + secretK
HttpURLConnection conn = (HttpURLConnection) new URL(getTokenURL).openConnection();
token = new JSONObject(printResponse(conn)).getString("access_token");
private static void method1() throws Exception {
File pcmFile = new File(testFileName);
HttpURLConnection conn = (HttpURLConnection) new URL(serverURL).openConnection();
// construct params
JSONObject params = new JSONObject();
params.put("format", "pcm");
params.put("rate", 8000);
params.put("channel", "1");
params.put("token", token);
params.put("cuid", cuid);
params.put("len", pcmFile.length());
params.put("speech", DatatypeConverter.printBase64Binary(loadFile(pcmFile)));
// add request header
conn.setRequestMethod("POST");
conn.setRequestProperty("Content-Type", "application/ charset=utf-8");
conn.setDoInput(true);
conn.setDoOutput(true);
// send request
DataOutputStream wr = new DataOutputStream(conn.getOutputStream());
wr.writeBytes(params.toString());
wr.flush();
wr.close();
printResponse(conn);
private static void method2() throws Exception {
File pcmFile = new File(testFileName);
HttpURLConnection conn = (HttpURLConnection) new URL(serverURL
+ "?cuid=" + cuid + "&token=" + token).openConnection();
// add request header
conn.setRequestMethod("POST");
conn.setRequestProperty("Content-Type", "audio/ rate=8000");
conn.setDoInput(true);
conn.setDoOutput(true);
// send request
DataOutputStream wr = new DataOutputStream(conn.getOutputStream());
wr.write(loadFile(pcmFile));
wr.flush();
wr.close();
printResponse(conn);
private static String printResponse(HttpURLConnection conn) throws Exception {
if (conn.getResponseCode() != 200) {
// request error
return "";
InputStream is = conn.getInputStream();
BufferedReader rd = new BufferedReader(new InputStreamReader(is));
StringBuffer response = new StringBuffer();
while ((line = rd.readLine()) != null) {
response.append(line);
response.append('\r');
rd.close();
System.out.println(new JSONObject(response.toString()).toString(4));
return response.toString();
private static byte[] loadFile(File file) throws IOException {
InputStream is = new FileInputStream(file);
long length = file.length();
byte[] bytes = new byte[(int) length];
int offset = 0;
int numRead = 0;
while (offset & bytes.length
&& (numRead = is.read(bytes, offset, bytes.length - offset)) &= 0) {
offset += numR
if (offset & bytes.length) {
is.close();
throw new IOException("Could not completely read file " + file.getName());
is.close();
  整个类运行和普通的类运行完全没两样,得到的控制台的信息如下:
"access_token": "***66a6adc3bb14***99.335-7***",
"refresh_token": "25.344b6***6aa***335-7***",
"scope": "public audio_voice_assistant_get wise_adapt lebo_resource_base lightservice_public hetu_basic lightcms_map_poi kaidian_kaidian",
"session_key": "9mzdC***7BvKTa4HuiEVYXrXOUPY***RSS8h4936rRxxd***V4PMq1Y+6OVKac+18rRxRtsT",
"session_secret": "*352***e9a7a664ef***775e",
"expires_in": 2592000
"result": ["百度语音提供技术支持,"],
"err_msg": "success.",
"corpus_no": "4435529",
"err_no": 0
"result": ["百度语音提供技术支持,"],
"err_msg": "success.",
"corpus_no": "8680030",
"err_no": 0
  从结果看出,装在test.pcm的那段语音内容就是&百度语音提供技术支持&。于是,我也利用windows自带的录音机功能,录制了一段wav格式的语音,一开始报错3301,查看文档说是识别错误,打开音频文件,发现没有录入任何东西,于是重新录入进行识别,虽然没有报错,但是识别的并非语音内容,估计是噪音太大。
三、基于Android平台的语音识别
  显然,光是REST API模式还是玩的不过瘾,想着在来试试移动端的效果如何,移动平台有android和ios,考虑到自己本子的情况,还是选择了android,当然,这两者都不熟悉。
  网上找了一个可以直接使用的android环境,下载了一通eclipse、sdk和adt等等,凭着之前搭建过一次android平台的记忆,勉强把环境弄好了。
  于是还是如REST API中一样需要下载android的sdk和文档。SDK目录包含以下内容:
  各个模块的功能如下:
  导入demo项目到eclipse中,配置好virtual device,就可以启动虚拟机(我在实际操作过程中,发现将libbdEASRAndroid.so和libBDVoiceRecognitionClient_MFE_V1.so导入classpath时会报错,于是我删除了这两个包),运行起来的效果如下:
  点击下面工具栏的中间按钮,进入全部应用,可以找到应用&Speech Recorder&:
  点击进入应用:
目前在点击&Record&,应用会闪退,还没摸清是什么原因,后面在研究下(有遇到过的欢迎留言指教)~~~
总得来说,百度语音还是蛮好上手的,文档也比较详细,但是就个人录制的音频识别来说,效果还有待提高(可能是音频文件噪音过大)。
先混个脸熟,了解下支持的平台,api的调用方式,后面两天趁Fedex Day好好看看这块。
如果您觉得阅读本文对您有帮助,请点一下&推荐&按钮,您的&推荐&将是我最大的写作动力!如果您想持续关注我的文章,请扫描二维码,关注JackieZheng的微信公众号,我会将我的文章推送给您,并和您一起分享我日常阅读过的优质文章。
如果你觉得博主的文章对你那么一点小帮助,恰巧你又有想打赏博主的小冲动,那么事不宜迟,赶紧扫一扫,小额地赞助下,攒个奶粉钱,也是让博主有动力继续努力,写出更好的文章^^。
    1. 支付宝                          2. 微信
                      
阅读(...) 评论()

我要回帖

更多关于 c 讯飞语音识别 的文章

 

随机推荐