MFC框架下使用Win7自带语音库函数 编写语音朗读的朋友,大概都遇到过 “CoCreateInstance函数返回值 ‘没有注册类’”。针对此问题我搜了好多网址、参考了好多博客,但是并没有解决(甚至思路被带到别的问题上)。后来考虑到应该是安装的系统不是完整版本(根据这个思考,搜索相关的信息果然找到了解决方法),针对这个问题的解决方式:
    下载 “win7或xpTTS语音引擎修复2.0.exe”,我参考的博客地址:http://blog.sina.com.cn/s/blog_88bdc35c0102vd0e.html。

下面贴上一个语音朗读的实例以供参考:

.h文件定义:

//包含win7系统自带的语音库文件
#include <sapi.h>
#include <sphelper.h>//定义语音类对象 使用类对象播放语音的时候不能释放(比如定义在对话框类中播放语音,需要把对象定义为类成员函数)
CComPtr<ISpVoice>   Voice;

.cpp文件代码示例:

//COM初始化
f (FAILED(::CoInitialize(NULL)))return ;//创建COM实例
hr = m_Voice.CoCreateInstance(CLSID_SpVoice );
//设置语音事件
hr = m_Voice->SetInterest(SPFEI(SPEI_VISEME), SPFEI(SPEI_VISEME));   CComPtr<IEnumSpObjectTokens>          nEnum;
ULONG                                 ulCount = 0;
CComPtr<ISpObjectToken>              VoiceToken;
//枚举所有语音包 如果没有语音包 nEnum为NULL
hr = SpEnumTokens(SPCAT_VOICES, NULL, NULL, &nEnum);
if(FAILED(hr))
{  return ;
} //获取到语音包的个数
hr = nEnum->GetCount(&ulCount);
if(FAILED(hr))
{ return ;
} CString StrRead = _T("Microsoft Simplified Chinese");
//在所有语音包中 找到指定的名称的那个语音包
while (SUCCEEDED(hr) && ulCount--)
{ hr = nEnum->Next( 1, &VoiceToken, NULL ); if(FAILED(hr)) { return ; } WCHAR *pDescription; hr = SpGetDescription(VoiceToken, &pDescription); if(FAILED(hr)) { return ; } if (! wcsicmp(pDescription, StrRead.AllocSysString())) { hr = m_Voice->SetVoice(VoiceToken); if(FAILED(hr)) { return ; } break; } VoiceToken.Release();
}
//设置音量
m_Voice->SetVolume(80);
//设置播放速度
m_Voice->SetRate(1);CString Str = _T("您好123");
//播放语音
hr = m_Voice->Speak(Str.AllocSysString(), SPF_ASYNC,NULL);

经过几天的探索以及参考网上的资料,完成了语音播报的基本功能,剩下根据需要下载相关的语音包使用(比如男声,女声等)。

MFC项目使用Win7自带语音库(包含COM函数返回 “没有注册类”解决方式)相关推荐

  1. python时间函数带时区_Python pytz时区函数返回的时区为9分钟 - python

    由于某些原因,我无法从以下代码中找出原因: >>> from pytz import timezone >>> timezone('America/Chicago' ...

  2. 在MFC项目中使用Quick PDF Library Lite读写pdf文件

    简介 安装 示例程序 Hello World Draw Text Fonts and Text Set Document Properties Image to pdf Add hyperlink t ...

  3. 开源项目barcodelib-C#条形码图像生成库

    介绍 该库旨在为开发人员提供一个简单的类,以便他们在需要根据数据字符串生成条形码图像时使用. 用法 该库包含一个名为BarcodeLib的类,其中包含三个构造函数: Barcode(); Barcod ...

  4. php常用系统函数库,PHP常用函数大全

    php usleep() 函数延迟代码执行若干微秒. unpack() 函数从二进制字符串对数据进行解包. uniqid() 函数基于以微秒计的当前时间,生成一个唯一的 ID. time_sleep_ ...

  5. springboot项目启动时提示错误: 找不到或无法加载主类

    问题: springboot项目启动时提示错误: 找不到或无法加载主类 解决方法:

  6. MFC中制作Dll中带对话框资源的动态库

    Data:2019/10/23 这篇文章本来是17年写的,现在对这边文章进行细化.更新的是有一些晚了些 想要在MFC中的dll里面添加对话框资源,首先必须的条件是,当前的dll库类型必须是可扩展的DL ...

  7. 【全志R329-NPU助力】Maix-Speech为嵌入式环境设计的离线语音库

    Maix-Speech是专为嵌入式环境设计的离线语音库,设计目标包括:ASR/TTS/CHAT 作者的设计初衷是完成一个低至Cortex-A7 1.0GHz 单核下可以实时运行的ASR库. 目前市面上 ...

  8. jacob TTS语音库异常ComFailException invoke of: Speak的产生原因,以及解决办法。

    问题描述 在本地开发调试语音库都没问题,一部署到机器上就出现下述异常. 这里要注意的是:jacob.jar和jacob.dll文件放置位置,jacob.dll放置C:/windows/System32 ...

  9. Anki发音及语音库配置

    这里讲的是安卓版Anki(AnkiDroid)的发音配置问题,其他版本应该也是类似的. 之前我采用的是设置通用语音库,但这种方法看似很好,说是可以共用媒体文件,实则鸡肋.因为我平时背的也就那么一个几千 ...

  10. Android自带语音播报+讯飞语音播报封装(直接用)

    一.Android自带的语音播报 1.查看是否支持中文,在测试的设备中打开'设置' -->找到 '语言和输入法'-->查看语音选项,是否支持中文,默认仅支持英文. 使用如下: public ...

最新文章

  1. C# xml通过xslt转换为html输出
  2. linux后台运行快捷键,Linux命令放入后台运行方法(和Ctrl+Z)详解版
  3. LeetCode算法题11:递归和回溯-解数独
  4. react 代码编写原则_如何编写易读的React代码— 10种编码风格技巧
  5. 华为P50系列确定29日发布:但遗憾的是...
  6. 斐波那契数列(递归和非递归实现)
  7. vim:the damn garbled of vim-devicons from nerdtree
  8. QT应用编程: 基于FFMPEG设计的流媒体播放器(播放rtmp视频流)
  9. Python中import的用法
  10. 如何管理你的客户?别用会员卡积分打折了,把客户变成粉丝
  11. WWW 2022最佳论文出炉!北京大学团队获唯一最佳学生论文奖
  12. 重磅!被称“新材料之王”“黑黄金”,中石化大丝束碳纤维投产,全球仅4家能产 | 美通社头条...
  13. 攻防世界-re-for-50-plz-50
  14. mmdetection(6):Gradient Harmonized Single-stage Detector
  15. 【每日一题】 959. 由斜杠划分区域
  16. 【03月13日】建筑材料行业的估值高度排名
  17. discuz插件,discuz采集插件,discuz插件工具
  18. python区间分布统计_常见概率统计分布及Python实现
  19. 第八场多校联盟 Problem A: 序号互换 【模拟】
  20. html中使用css实现版心定位

热门文章

  1. Junit 5 实现testsuite
  2. cad打印去掉边框_CAD打印的时候如何去掉打印线框?
  3. Linux使用libmodbus源码开发,LibModbus源码分析
  4. f1c100s 源码_F1C100S 简易 boot 原理
  5. **电压跟随器的原理**
  6. Android webview与js交互
  7. cuda历史版本下载
  8. 塑料成型计算机模拟技术,塑料成型模拟软件技术基础与应用
  9. 用于应用开发的新数据可视化模板
  10. 浅谈Java中的常量池