语音系统前端—利用SAPI进行声音识别与发声
2014-10-26 13:45
323 查看
在前一章,自然语言问答系统的构造中将整个分为7大模块。这里讲解语音识别与发声模块。
在现有的技术中,windows平台能比较快速上手的应该就是微软的SAPI了。
SAPI中提供的两个主要接口是:
1.SR(Speech Recognition),能直接将语音信号转化成文字;
2.TTS(Text-To-Speech),能直接将文字读出来。(当然,你需要有语音包)
部分测试代码如下:
在现有的技术中,windows平台能比较快速上手的应该就是微软的SAPI了。
SAPI中提供的两个主要接口是:
1.SR(Speech Recognition),能直接将语音信号转化成文字;
2.TTS(Text-To-Speech),能直接将文字读出来。(当然,你需要有语音包)
部分测试代码如下:
//语音识别的初始化函数 //主要是创建识别器、上下文环境等 HRESULT InitializeSpeech() { HRESULT hr=E_FAIL; if (SUCCEEDED(hr = ::CoInitialize(NULL))) { /****/ //自己加一个recognizer,避免对系统自带语音的使用 hr=cpReconizer.CoCreateInstance(CLSID_SpInprocRecognizer); if(FAILED(hr)) { printf("Recognizer创建失败!"); //return; } CComPtr<ISpObjectToken> cpAudioToken; hr = SpGetDefaultTokenFromCategoryId(SPCAT_AUDIOIN, &cpAudioToken); //建立默认的音频输入对象 if (SUCCEEDED(hr)) { hr = cpReconizer->SetInput(cpAudioToken, TRUE); } hr=cpReconizer->CreateRecoContext(&cpRecoCtxt); /**/ //hr = cpRecoCtxt.CoCreateInstance(CLSID_SpSharedRecoContext); if(SUCCEEDED(hr)) { hr = cpRecoCtxt->GetVoice(&cpVoice); } //设置播放音量和速度 cpVoice->SetVolume(100); cpVoice->SetRate(3); return (cpRecoCtxt && cpVoice && SUCCEEDED(hr=LoadGrammarFile())&& SUCCEEDED(hr = cpGrammar->SetRuleState(NULL, NULL, SPRS_ACTIVE)) && SUCCEEDED(hr = cpRecoCtxt->SetInterest(SPFEI(SPEI_RECOGNITION), SPFEI(SPEI_RECOGNITION))) && SUCCEEDED(hr = cpRecoCtxt->SetNotifyWin32Event()) && SUCCEEDED(hr = cpRecoCtxt->SetAudioOptions(SPAO_RETAIN_AUDIO, NULL, NULL))); } return hr; }
//在离线模式下 //在xml进行匹配找到相应的字符串 void ProcessSpeech() { const float ConfidenceThreshold = 0.3f; SPEVENT curEvent; ULONG fetched=0; HRESULT hr=S_OK; cpRecoCtxt->GetEvents(1,&curEvent,&fetched); while(fetched>0) { switch(curEvent.eEventId) { case SPEI_RECOGNITION: if(SPET_LPARAM_IS_OBJECT==curEvent.elParamType) { ISpRecoResult *result=reinterpret_cast <ISpRecoResult*>(curEvent.lParam); SPPHRASE* pPhrase=NULL; hr=result->GetPhrase(&pPhrase); if(SUCCEEDED(hr)) { if ((pPhrase->pProperties != NULL) && (pPhrase->pProperties->pFirstChild != NULL)) { const SPPHRASEPROPERTY* pSemanticTag = pPhrase->pProperties->pFirstChild; //直接将xml中tag识别的值取出来 printf("读取到的信息是:.%s.",pSemanticTag->pszValue); //调用相应的反馈函数 DoAction(pSemanticTag->pszValue); } ::CoTaskMemFree(pPhrase); } } break; } cpRecoCtxt->GetEvents(1,&curEvent,&fetched); } return; }
相关文章推荐
- 利用HTK工具包快速建立一个语音命令识别系统
- 利用HTK快速建立一个语音命令识别系统
- Unity利用Sapi进行windows语音开发
- 安卓调用系统语音识别功能全解(谷歌语音服务):获取识别结果,使用语音识别进行搜索。
- WinXP如何开启语音识别系统根据口音进行语音识别
- c++ 用微软SAPI进行实时语音识别
- 试析FreeBSD桌面系统中利用Fontconfig进行字体配置的运作原理(一)
- Window7系统 opencv 利用DirectShow 进行视频采集的解决方案
- SAPI 5.1 语音合成 和 语音识别 [C#][1]
- 仿Live800做的带客服端winform软件的在线咨询系统,asp.net,利用PowerTalkBox以及整合anget精灵以及speech语音提示+飞信短信提示服务
- OpenCV学习——利用HandVu进行手部动作识别分析
- 利用微软的SAPI进行语音合成
- 利用勾子监视系统或进程中的各种事件消息,截获发往目标窗口的消息并进行处理
- 利用Grub4DOS进行多系统启动
- 如何对系统声音进行选择与设置
- 7Windows系统利用SNMP进行程序进程的监控
- 语音识别与朗读 with MS SAPI5.1
- SAPI 5.1 语音合成 和 语音识别 [C#][1]
- 厚积薄发,丰富的公用类库积累,助你高效进行系统开发(7)-----声音播放、硬件信息、键盘模拟及钩子、鼠标模拟及钩子等设备相关