关于SAPI的两段小代码(c++)
来源:互联网 发布:ios放置类游戏 知乎 编辑:程序博客网 时间:2024/06/07 22:57
要运行这些代码需要进行配置编译器的.
SAPI配置基于vc++6.0
语音模式:
#include <sapi.h> #pragma comment(lib,"ole32.lib") //CoInitialize CoCreateInstance需要调用ole32.dll #pragma comment(lib,"sapi.lib") //sapi.lib在SDK的lib目录,必需正确配置 int main(int argc, char* argv[]) { ISpVoice * pVoice = NULL; //COM初始化: if (FAILED(::CoInitialize(NULL))) return FALSE; //获取ISpVoice接口: HRESULT hr = CoCreateInstance(CLSID_SpVoice, NULL, CLSCTX_ALL, IID_ISpVoice, (void **)&pVoice); if( SUCCEEDED( hr ) ) { hr = pVoice->Speak(L"Hello world", 0, NULL); pVoice->Release(); pVoice = NULL; } //千万不要忘记: ::CoUninitialize(); return TRUE; }
监听模式:
#include <windows.h>#include <sapi.h>#include <stdio.h>#include <string.h>#include <atlbase.h>#include "sphelper.h"inline HRESULT BlockForResult(ISpRecoContext * pRecoCtxt, ISpRecoResult ** ppResult){ HRESULT hr = S_OK; CSpEvent event; while (SUCCEEDED(hr) && SUCCEEDED(hr = event.GetFrom(pRecoCtxt)) && hr == S_FALSE) { hr = pRecoCtxt->WaitForNotifyEvent(INFINITE); } *ppResult = event.RecoResult(); if (*ppResult) { (*ppResult)->AddRef(); } return hr;}const WCHAR * StopWord(){ const WCHAR * pchStop; LANGID LangId = ::SpGetUserDefaultUILanguage(); switch (LangId) { case MAKELANGID(LANG_JAPANESE, SUBLANG_DEFAULT): pchStop = L"}42N86\0b70e50fc0ea0e70fc/05708504608a087046";; break; default: pchStop = L"Stop"; break; } return pchStop;} int main(int argc, char* argv[]){ HRESULT hr = E_FAIL; bool fUseTTS = true; // turn TTS play back on or off bool fReplay = true; // turn Audio replay on or off // Process optional arguments if (argc > 1) { int i; for (i = 1; i < argc; i++) { if (_stricmp(argv[i], "-noTTS") == 0) { fUseTTS = false; continue; } if (_stricmp(argv[i], "-noReplay") == 0) { fReplay = false; continue; } printf ("Usage: %s [-noTTS] [-noReplay] ", argv[0]); return hr; } } if (SUCCEEDED(hr = ::CoInitialize(NULL))) { { CComPtr<ISpRecoContext> cpRecoCtxt; CComPtr<ISpRecoGrammar> cpGrammar; CComPtr<ISpVoice> cpVoice; hr = cpRecoCtxt.CoCreateInstance(CLSID_SpSharedRecoContext); if(SUCCEEDED(hr)) { hr = cpRecoCtxt->GetVoice(&cpVoice); } if (cpRecoCtxt && cpVoice && SUCCEEDED(hr = cpRecoCtxt->SetNotifyWin32Event()) && SUCCEEDED(hr = cpRecoCtxt->SetInterest(SPFEI(SPEI_RECOGNITION), SPFEI(SPEI_RECOGNITION))) && SUCCEEDED(hr = cpRecoCtxt->SetAudioOptions(SPAO_RETAIN_AUDIO, NULL, NULL)) && SUCCEEDED(hr = cpRecoCtxt->CreateGrammar(0, &cpGrammar)) && SUCCEEDED(hr = cpGrammar->LoadDictation(NULL, SPLO_STATIC)) && SUCCEEDED(hr = cpGrammar->SetDictationState(SPRS_ACTIVE))) { USES_CONVERSION; const WCHAR * const pchStop = StopWord(); CComPtr<ISpRecoResult> cpResult; printf( "I will repeat everything you say. Say "%s" to exit. ", W2A(pchStop) ); while (SUCCEEDED(hr = BlockForResult(cpRecoCtxt, &cpResult))) { cpGrammar->SetDictationState( SPRS_INACTIVE ); CSpDynamicString dstrText; if (SUCCEEDED(cpResult->GetText(SP_GETWHOLEPHRASE, SP_GETWHOLEPHRASE, TRUE, &dstrText, NULL))) { printf("I heard: %s ", W2A(dstrText)); if (fUseTTS) { cpVoice->Speak( L"I heard", SPF_ASYNC, NULL); cpVoice->Speak( dstrText, SPF_ASYNC, NULL ); } if (fReplay) { if (fUseTTS) cpVoice->Speak( L"when you said", SPF_ASYNC, NULL); else printf (" when you said "); cpResult->SpeakAudio(NULL, 0, NULL, NULL); } cpResult.Release(); } if (_wcsicmp(dstrText, pchStop) == 0) { break; } cpGrammar->SetDictationState( SPRS_ACTIVE ); } } } ::CoUninitialize(); } return hr;}
0 0
- 关于SAPI的两段小代码(c++)
- SAPI的学习 安装SAPI扩展包
- SAPI SDK的介绍
- PHP的SAPI
- SAPI SDK的介绍
- SAPI SDK的介绍
- php的生命周期:SAPI
- PHP内核-Apache2的SAPI
- SAPI—SpVoice的使用方法
- 关于C 代码优化的方法总结
- 关于+—~有意思的一段C代码
- 关于C与Java的输出代码
- 关于随机数生成的一些代码(C/C++)
- C-发布一个关于数据结构的C语言代码
- SAPI 语音识别 Grammar的设置
- 【VB】SAPI 的应用开发 - (1)
- 利用微软的SAPI进行语音合成
- 微软SAPI:让你的软件能说会道
- OC/Swift基本控件(针对入门级别程序猿)--上
- OpenCV 3.0.0+contrib+VS2013配置方法
- Android 控件之一:Button 按钮
- iOS FMDB
- 学习Java语言的小技巧
- 关于SAPI的两段小代码(c++)
- 黑马程序员----oc基础笔记----多态
- 【c++】大牛解析虚函数表
- VS之mht文件显示
- 3.2.5.3 search()函数和match()函数区别
- 排序算法时间复杂度对比
- ZOJ 2412 Farm Irrigation
- vuGen回放https录制出错
- jQuery-选择器