资源描述:
《Microsoft Speech SDK孤立词语音识别》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、基于MicrosoftSpeechSDK实现用户孤立词识别的过程如下:1、初始化COM端口:在CWinApp的子类中,调用CoInitializeEx函数进行COM初始化:::CoInitializeEx(NULL,COINIT_APARTMENTTHREADED);2、创建识别引擎:微软SpeechSDK5.1支持两种模式的:共享(Share)和独享(InProc)。一般情况下可以使用共享型,大的服务型程序使用InProc。如下:hr=m_cpRecognizer.CoCreateInstance(CLSID_S
2、pSharedRecognizer);//Sharehr=m_cpRecognizer.CoCreateInstance(CLSID_SpInprocRecognizer);//InProc如果是Share型,直接到步骤3;如果是InProc型,必须使用ISpRecognizer::SetInput设置输入:CComPtrcpAudioToken;hr=SpGetDefaultTokenFromCategoryId(SPCAT_AUDIOIN,&cpAudioToken);if(SU
3、CCEEDED(hr)){hr=m_cpRecognizer->SetInput(cpAudioToken,TRUE);}或者:CComPtrcpAudio;hr=SpCreateDefaultObjectFromCategoryId(SPCAT_AUDIOIN,&cpAudio);hr=m_cpRecoEngine->SetInput(cpAudio,TRUE);3、创建识别上下文接口:调用ISpRecognizer::CreateRecoContext创建识别上下文接口:hr=m_cpRec
4、oEngine->CreateRecoContext(&m_cpRecoCtxt);4、设置识别消息:调用SetNotifyWindowMessage告诉Windows哪个是我们的识别消息,需要进行处理:hr=m_cpRecoCtxt->SetNotifyWindowMessage(m_hWnd,WM_RECOEVENT,0,0);5、设置事件:最重要的事件是“SPEI_RECOGNITION”:constULONGLONGullInterest=SPFEI(SPEI_SOUND_START)
5、SPFEI(SPEI
6、_SOUND_END)
7、SPFEI(SPEI_RECOGNITION);hr=m_cpRecoCtxt->SetInterest(ullInterest,ullInterest);6、创建语法规则:语法规则分为两种,一种是听说式(dictation),一种是命令式(commandandcontrol---C&C)。首先利用ISpRecoContext::CreateGrammar创建语法对象,然后加载不同的语法规则://dictationhr=m_cpRecoCtxt->CreateGrammar(GIDDICTA
8、TION,&m_cpDictationGrammar);if(SUCCEEDED(hr)){hr=m_cpDictationGrammar->LoadDictation(NULL,SPLO_STATIC);}//C&Chr=m_cpRecoCtxt->CreateGrammar(GIDCMDCTRL,&m_cpCmdGrammar);然后用ISpRecoGrammar::LoadCmdxxx加载语法:WCHARwszXMLFile[20]=L"";MultiByteToWideChar(CP_ACP,0,(LPCS
9、TR)"CmdCtrl.xml",-1,wszXMLFile,256);hr=m_cpCmdGrammar->LoadCmdFromFile(wszXMLFile,SPLO_DYNAMIC);7、激活语法进行识别:hr=m_cpDictationGrammar->SetDictationState(SPRS_ACTIVE);//dictationhr=m_cpCmdGrammar->SetRuleState(NULL,NULL,SPRS_ACTIVE);//C&C8、获取识别消息,进行处理:截获识别消息(WM_RE
10、COEVENT),然后处理。识别的结果放在CSpEvent的ISpRecoResult中:USES_CONVERSION;CSpEventevent;switch(event.eEventId){caseSPEI_RECOGNITION:{m_bGotReco=TRUE;staticconstWCHARwszUnrecognized[]=L"