背景

微软的提供的SAPI工具包,用于语音技术开发,提供包括语音识别和语音合成两方面的内容。我们可以通过其中Voice Text API完成从文字到语音的转换。

初始化COM框架

SAPI需要用到COM框架,在程序开始和结束的地方需要分别初始化和释放COM框架

TextSpeaker::TextSpeaker() {CoInitializeEx(nullptr, COINIT_MULTITHREADED);......
}TextSpeaker::~TextSpeaker() {CoUninitialize();
}

枚举音频相关资源

可以通过SpEnumTokens接口,枚举指定的对象资源。能够查询出当前支持的人声以及可以输出的设备。

#include <atlbase.h>
#include <sapi.h>
#pragma warning(push)
#pragma warning(disable : 4996)
#include <sphelper.h>
#pragma warning(pop)static std::vector<std::pair<std::wstring, CComPtr<ISpObjectToken>>> GetTokens(const wchar_t* registryKey) {std::vector<std::pair<std::wstring, CComPtr<ISpObjectToken>>> ret;CComPtr<IEnumSpObjectTokens> cpEnum;if (!SUCCEEDED(SpEnumTokens(registryKey, nullptr, nullptr, &cpEnum))) {return ret;}unsigned long count = 0;if (!SUCCEEDED(cpEnum->GetCount(&count))) {return ret;}for (size_t i = 0; i < count; ++i) {CComPtr<ISpObjectToken> token;if (!SUCCEEDED(cpEnum->Next(1, &token, nullptr))) {return ret;}LPWSTR str = nullptr;token->GetStringValue(nullptr, &str);ret.push_back({ std::wstring{ str }, std::move(token) });}return ret;
}// WIN10后新的资源注册表地址
static std::wstring NEW_WIN10_REG_KEY= L"HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Speech_OneCore\\Voices";
// 获取系统语音资源
mVoices = GetTokens(SPCAT_VOICES);
{// 合并WIN10后新的资源std::vector<std::pair<std::wstring, CComPtr<ISpObjectToken>>>extraVoices = GetTokens(NEW_WIN10_REG_KEY.c_str());mVoices.insert(mVoices.end(), extraVoices.begin(), extraVoices.end());
}

通过获取的语音资源,可以查看系统支持的语音资源。打印出来后结果如下:

for (const std::pair<std::wstring, CComPtr<ISpObjectToken>>& v : mVoices) {wprintf(L"%zu : %s\n", i + 1, v.first.c_str());
}1 : Microsoft Huihui Desktop - Chinese (Simplified)
2 : Microsoft Zira Desktop - English (United States)
3 : Microsoft Huihui - Chinese (Simplified, PRC)
4 : Microsoft Kangkang - Chinese (Simplified, PRC)
5 : Microsoft Yaoyao - Chinese (Simplified, PRC)

改变注册表位置,可以获取能够输出的音频设备

mDevices = GetTokens(SPCAT_AUDIOOUT);
for (const std::pair<std::wstring, CComPtr<ISpObjectToken>>& v : mDevices) {wprintf(L"%zu : %s\n", i + 1, v.first.c_str());
}1 : 扬声器 (Jabra EVOLVE 30 II)
2 : LEN P24i-10 (英特尔(R) 显示器音频)
3 : 扬声器 (Realtek(R) Audio)

通过ISpVoice进行语音合成

通过ISpVoice接口可以设置和播放语音。

CComPtr<ISpVoice> voicePtr;
voicePtr.CoCreateInstance(CLSID_SpVoice);
// 设置音量,支持范围0~100
voicePtr->SetVolume(vol);
// 设置人声速度,支持-10~10
voicePtr->SetRate(speed);
// 设置播放的人声,可以使用GetTokens中获取的人声资源ISpObjectToken
// 如果不设置,则合成操作使用默认语音,在HKEY_CURRENT_USER\Software\Microsoft\Speech Server\v11.0\Voices\DefaultTokenId指定
voicePtr->SetVoice(selectedVoice);
// 设置播放的设备,可以使用GetTokens中获取的设备资源ISpObjectToken
// 如果不设置,则使用默认设备播放
voicePtr->SetOutput(device, TRUE);

完成ISpVoice的设置后,就可以开始播放文字

// 设置为异步播放,避免使用时阻塞
mDefaultSpeaker->Speak(sentence.c_str(), SPF_DEFAULT | SPF_ASYNC, nullptr);
// 停止播放,SPF_PURGEBEFORESPEAK可以舍弃队列中剩余要合成的数据
mDefaultSpeaker->Speak(L"", SPF_DEFAULT | SPF_PURGEBEFORESPEAK | SPF_ASYNC, nullptr);

windows文字转语音示例相关推荐

  1. python语音转文字_Python文字转语音示例

    python语音转文字 Here you will get python text to speech example. 在这里,您将获得python文本语音转换示例. As we know, som ...

  2. C#使用微软TTS语音引擎实现文字转语音示例

    转载:http://www.mzwu.com/article.asp?id=3845 在VS2012创建Windows窗体应用程序项目,添加引用COM组件Microsoft Speech Object ...

  3. python 利用pyttsx3文字转语音 适用于macOS windows树莓派

    2019-04-04 by 崔斐然 python 利用pyttsx3文字转语音 更新于2019-05-08: 树莓派安装pyodbc失败参考这里: 安装 unixodbc-dev, sudo apt ...

  4. java实现文字转语音功能(仅Windows)

    一.pom.xml引入jar包依赖 <!-- https://mvnrepository.com/artifact/com.jacob/jacob 文字转语音 --> <depend ...

  5. python 文字语音朗读-python 利用pyttsx3文字转语音过程详解

    这篇文章主要介绍了python 利用pyttsx3文字转语音过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 # -*- coding: ut ...

  6. python脚本语言采用声音作为手段_python 利用pyttsx3文字转语音过程详解

    这篇文章主要介绍了python 利用pyttsx3文字转语音过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下# -*- coding: utf ...

  7. python 百度ai批量识别_Python基于百度AI的文字识别的示例

    Python基于百度AI的文字识别的示例 使用百度AI的文字识别库,做出的调用示例,其中filePath是图片的路径,可以自行传入一张带有文字的图片,进行识别. 下载baidu-aip这个库,可以直接 ...

  8. python发音语言-python 利用pyttsx3文字转语音过程详解

    这篇文章主要介绍了python 利用pyttsx3文字转语音过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下# -*- coding: utf ...

  9. python发音模块-python 利用pyttsx3文字转语音过程详解

    这篇文章主要介绍了python 利用pyttsx3文字转语音过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 # -*- coding: ut ...

  10. NET 3行代码实现文字转语音功能

    在人工智能时代,文字转语音是现在人工智能比较热门的功能,各大公司都有这方面的业务,可以通过接口对各种文字转语音,甚至能模拟真人,非常的强大,.NET东家微软其实也有这方面的服务.如果大家对语言转文字的 ...

最新文章

  1. php 清空一个数组_PHP工程师学Python数据类型
  2. 新年快乐轮播特效html,基于owl-carousel的卡片水平轮播展示特效
  3. 【推荐视频】中科院赵军:知识图谱关键技术及其在推荐系统中的应用
  4. 浮躁的世界里 我们要的是生活
  5. Drawing with GoogLeNet
  6. c语言 char *b,C语言:char*a,*b; *b*=a是什么意思? 如图所示
  7. 我们需要什么样的计算
  8. 先科机顶盒一直出现android,网络电视机顶盒停留在开机界面,无法开机的解决办法...
  9. 标准情况下绝对湿度与相对湿度excel表
  10. 压降不同的二极管并联
  11. Android11(R)新特性梳理
  12. golang 使用ssl连接smtp发送邮件
  13. 零基础入门金融风控之贷款违约预测挑战赛-task01
  14. 使用photoshop2021对有阴影的背光摄影照片进行调色修改
  15. nginx的安装和html部署问题
  16. 如何解决The emulator process for AVD was killed.
  17. FPGA学习-m序列信号发生器
  18. 反射型XSS实战演练
  19. 《数据结构课程实践》_02_隐式图的搜索问题_实现
  20. 【FTP】一、什么是FTP?

热门文章

  1. 蒲公英智能云数据管理|蒲公英智能云|TARA
  2. windows系统VS code coderunner 运行shell脚本
  3. SageMath密码学密码体制及加解密
  4. curve BLS12-377/381 BN256 SageMath脚本
  5. cad lisp 背景遮罩_单行文字转多行文字带背景遮罩
  6. Dapper Object must implement IConvertible.
  7. 忆典s1Android,忆典S1四核(RK3128)官方固件+安卓4.4.4已Root权限精简固件+刷机教程
  8. android:scrollbars代码控制,android:scrollbars属性和弹出键盘的问题
  9. 正则表达式学习实践心得——来源于codesheep(羊哥)
  10. 【ESD专题】1.ESD基础及IEC61000-4-2标准