博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
VC6.0 C++ 如何调用微软windows系统SDK 语音API
阅读量:6277 次
发布时间:2019-06-22

本文共 2557 字,大约阅读时间需要 8 分钟。

下载3个语音API安装包 http://www.microsoft.com/en-us/download/details.aspx?id=10121

 需要安装微软语音API安装包:SpeechSDK51LangPack、SpeechSDK51以及 msttss22L、

 

为了在VC中使用这SDK,必需在工程中添加SDK的include和lib目录,为免每个工程都添加目录,最好的办法是在VC的
    
    Option->Directoris立加上SDK的include和lib目录。也可以直接将sapi.h sapi.lib 分别放到VC6的 头文件合库文件中

 

有关TTS用法:https://msdn.microsoft.com/en-us/library/ms720165(v=vs.85).aspx#InitializeCOM

    
    一个最简单的例子
 

#include 
#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"欢迎使用本系统,管理员请登录或者注册", 0, NULL);pVoice->Release();pVoice = NULL;}::CoUninitialize(); //释放return TRUE;}

 

详细解释:

void voice_succeed(){ISpVoice * pVoice; //pVoice指针::CoInitialize(NULL);  //初始化COM库//获取核心的应用程序接口ISpVoice接口 CoCreateInstance(CLSID_SpVoice, NULL, CLSCTX_ALL, IID_ISpVoice, (void **)&pVoice);//创建识别引擎 pVoice->Speak(L"登录成功!欢迎使用!", 0,NULL);

//发音 speak 参数详解:1.用来输入文本字符串 2.标志speak的方式 3.获取当前文本输入等候播放队列位置

pVoice->Release();//释放资源

pVoice->Release();//释放资源::CoUninitialize(); //释放资源}

 

 

 用CoInitialize(), CoCreateInstance()获取IspVoice接口就够了, 程序结束前一定要用CoUninitialize()释放资源。

    
 获取IspVoice接口,然后用ISpVoice::Speak()把文本输出为语音,程序的核心就是IspVoice接口。

 把文本语音输出为WAV文件

 

#include 
#include
#pragma comment(lib,"ole32.lib") #pragma comment(lib,"sapi.lib") int main(int argc, char* argv[]) { ISpVoice * pVoice = NULL; if (FAILED(::CoInitialize(NULL))) return FALSE; HRESULT hr = CoCreateInstance(CLSID_SpVoice, NULL, CLSCTX_ALL, IID_ISpVoice, (void **)&pVoice); if( SUCCEEDED( hr ) ) { CComPtr
cpWavStream; CComPtr
cpOldStream; CSpStreamFormat OriginalFmt; pVoice->GetOutputStream( &cpOldStream ); OriginalFmt.AssignFormat(cpOldStream); hr = SPBindToFile( L"D:\\output.wav",SPFM_CREATE_ALWAYS, &cpWavStream,&OriginalFmt.FormatId(), OriginalFmt.WaveFormatExPtr() ); if( SUCCEEDED( hr ) ) { pVoice->SetOutput(cpWavStream,TRUE); WCHAR WTX[] = L"
text to wave"; pVoice->Speak(WTX, SPF_IS_XML, NULL); pVoice->Release(); pVoice = NULL; } } ::CoUninitialize(); return TRUE; }

 

转载地址:http://gdwva.baihongyu.com/

你可能感兴趣的文章
我的友情链接
查看>>
android工程目录结构,及相关文件获取方式(1)
查看>>
Vsftpd内网映射相关原理及配置
查看>>
Linux非对称路由
查看>>
在iOS 8中使用UIAlertController
查看>>
第2课:通过案例对SparkStreaming 透彻理解三板斧之二:解密SparkStreaming运行机制和架构...
查看>>
IOS开发—App 在 IOS 8 的simulator运行时,定位卡死bug解决
查看>>
windows 密钥登陆 linux
查看>>
IOS 录制视频
查看>>
limit检查
查看>>
Android Things 简介
查看>>
菜鸟学Linux 第049篇笔记 DNS log, zone, view
查看>>
菜鸟学Linux 第054篇笔记 建立加密的http
查看>>
ListView 的多选模式
查看>>
宏正自动科技发表新款8/16端口双滑轨LCD KVM多电脑切换器
查看>>
解决 Missing GL version
查看>>
VS 编译链接错误集锦
查看>>
Dns域名服务器之,ACL ,转发域及子域授权的基本配置
查看>>
Android权限列表
查看>>
Linux中的网络监控命令
查看>>