windows文字转语音示例
背景
微软的提供的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文字转语音示例相关推荐
- python语音转文字_Python文字转语音示例
python语音转文字 Here you will get python text to speech example. 在这里,您将获得python文本语音转换示例. As we know, som ...
- C#使用微软TTS语音引擎实现文字转语音示例
转载:http://www.mzwu.com/article.asp?id=3845 在VS2012创建Windows窗体应用程序项目,添加引用COM组件Microsoft Speech Object ...
- python 利用pyttsx3文字转语音 适用于macOS windows树莓派
2019-04-04 by 崔斐然 python 利用pyttsx3文字转语音 更新于2019-05-08: 树莓派安装pyodbc失败参考这里: 安装 unixodbc-dev, sudo apt ...
- java实现文字转语音功能(仅Windows)
一.pom.xml引入jar包依赖 <!-- https://mvnrepository.com/artifact/com.jacob/jacob 文字转语音 --> <depend ...
- python 文字语音朗读-python 利用pyttsx3文字转语音过程详解
这篇文章主要介绍了python 利用pyttsx3文字转语音过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 # -*- coding: ut ...
- python脚本语言采用声音作为手段_python 利用pyttsx3文字转语音过程详解
这篇文章主要介绍了python 利用pyttsx3文字转语音过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下# -*- coding: utf ...
- python 百度ai批量识别_Python基于百度AI的文字识别的示例
Python基于百度AI的文字识别的示例 使用百度AI的文字识别库,做出的调用示例,其中filePath是图片的路径,可以自行传入一张带有文字的图片,进行识别. 下载baidu-aip这个库,可以直接 ...
- python发音语言-python 利用pyttsx3文字转语音过程详解
这篇文章主要介绍了python 利用pyttsx3文字转语音过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下# -*- coding: utf ...
- python发音模块-python 利用pyttsx3文字转语音过程详解
这篇文章主要介绍了python 利用pyttsx3文字转语音过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 # -*- coding: ut ...
- NET 3行代码实现文字转语音功能
在人工智能时代,文字转语音是现在人工智能比较热门的功能,各大公司都有这方面的业务,可以通过接口对各种文字转语音,甚至能模拟真人,非常的强大,.NET东家微软其实也有这方面的服务.如果大家对语言转文字的 ...
最新文章
- php 清空一个数组_PHP工程师学Python数据类型
- 新年快乐轮播特效html,基于owl-carousel的卡片水平轮播展示特效
- 【推荐视频】中科院赵军:知识图谱关键技术及其在推荐系统中的应用
- 浮躁的世界里 我们要的是生活
- Drawing with GoogLeNet
- c语言 char *b,C语言:char*a,*b; *b*=a是什么意思? 如图所示
- 我们需要什么样的计算
- 先科机顶盒一直出现android,网络电视机顶盒停留在开机界面,无法开机的解决办法...
- 标准情况下绝对湿度与相对湿度excel表
- 压降不同的二极管并联
- Android11(R)新特性梳理
- golang 使用ssl连接smtp发送邮件
- 零基础入门金融风控之贷款违约预测挑战赛-task01
- 使用photoshop2021对有阴影的背光摄影照片进行调色修改
- nginx的安装和html部署问题
- 如何解决The emulator process for AVD was killed.
- FPGA学习-m序列信号发生器
- 反射型XSS实战演练
- 《数据结构课程实践》_02_隐式图的搜索问题_实现
- 【FTP】一、什么是FTP?
热门文章
- 蒲公英智能云数据管理|蒲公英智能云|TARA
- windows系统VS code coderunner 运行shell脚本
- SageMath密码学密码体制及加解密
- curve BLS12-377/381 BN256 SageMath脚本
- cad lisp 背景遮罩_单行文字转多行文字带背景遮罩
- Dapper Object must implement IConvertible.
- 忆典s1Android,忆典S1四核(RK3128)官方固件+安卓4.4.4已Root权限精简固件+刷机教程
- android:scrollbars代码控制,android:scrollbars属性和弹出键盘的问题
- 正则表达式学习实践心得——来源于codesheep(羊哥)
- 【ESD专题】1.ESD基础及IEC61000-4-2标准