如果出现以下错误:

error C4996: ‘GetVersionExA': 被声明为已否决

关闭SDL:

Project Properties > Configuration Properties > C/C++ > General > SDL checks关掉

转载于

https://blog.csdn.net/sssaaaannnddd/article/details/100113198

微软win7及以上版本自带的语音合成引擎,可以直接拿来用,不需要额外的dll文件,只需要引用头文件即可, 封装一个简单的类用来做语音合成如下:
tts.h

#pragma once
#include <Windows.h>
#include "sapi.h"
#include <list>
#include <string>
#include "sphelper.h"
#pragma comment(lib, "sapi.lib")class TTS
{
public:TTS();~TTS();bool Speak(std::wstring);bool IsUseful();private:ISpVoice*  m_pSpVoice;bool InitVoice();void StopVoice();
};

tts.cpp

#include "tts.h"TTS::TTS()
{m_pSpVoice = nullptr;
}TTS::~TTS()
{StopVoice();::CoUninitialize();
}bool TTS::InitVoice()
{HRESULT ret = ::CoInitialize(NULL);ret = CoCreateInstance(CLSID_SpVoice, NULL, CLSCTX_INPROC_SERVER, IID_ISpVoice, (void**)&m_pSpVoice);if (0 == ret && m_pSpVoice){m_pSpVoice->SetVolume(80);IEnumSpObjectTokens *pSpEnumTokens = NULL;if (SUCCEEDED(SpEnumTokens(SPCAT_VOICES, NULL, NULL, &pSpEnumTokens)))     //找到lili语音进行朗读, 否则就跳出{ISpObjectToken *pSpToken = NULL;while (SUCCEEDED(pSpEnumTokens->Next(1, &pSpToken, NULL)) && pSpToken != NULL){LPWSTR pId = new WCHAR[32];pSpToken->GetId(&pId);int nLen = WideCharToMultiByte(CP_ACP, 0, (LPCWSTR)pId, -1, NULL, 0, NULL, NULL);char *s = new char[nLen + 1];WideCharToMultiByte(CP_ACP, 0, (LPCWSTR)pId, -1, s, nLen, NULL, NULL);if (0 == strcmp(s, ("HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Speech\\Voices\\Tokens\\MS-Lili-2052-20-DSK"))){m_pSpVoice->SetVoice(pSpToken);      // 设置lili语音pSpToken->Release();delete[] s;break;}delete[] s;pSpToken->Release();}pSpEnumTokens->Release();}return true;}else{}return false;
}bool TTS::Speak(std::wstring word)
{StopVoice();if (InitVoice()){HRESULT ret = m_pSpVoice->Speak(word.c_str(), SPF_ASYNC, NULL);return ret;}else{return false;}}bool TTS::IsUseful()
{bool bRet = InitVoice();StopVoice();return bRet;
}void TTS::StopVoice()
{if (m_pSpVoice!=nullptr){m_pSpVoice->Release();}
}

实例化对象,使用Speak函数就行了,后一次会把前一次没播放完的停掉,注意参数是wstring型

C++ 简单的语音合成(TTS,即文字转语音)类相关推荐

  1. 口播神器,基于Edge,微软TTS(text-to-speech)文字转语音免费开源库edge-tts实践(Python3.10)

    不能否认,微软Azure在TTS(text-to-speech文字转语音)这个人工智能细分领域的影响力是统治级的,一如ChatGPT在NLP领域的随心所欲,予取予求.君不见几乎所有的抖音营销号口播均采 ...

  2. PHP使用阿里云(语音合成)实现文字转语音“TTS“

    在做前,我发现阿里云竟然没有PHP文字转语音的SDK包,有点尴尬啊,没办法我选择了RESTful API 2.0的方式请求: 1:第一步:打开阿里云-->产品分类-->人工智能--> ...

  3. Android TTS 中文 文字转语音 使用TextToSpeech Svox .

    Android默认没有安装TTS数据包,无法文字转语音,而在设置里推荐的语音包是Pico TTS,并不支持中文,如果需要读中文,需要下载另外的第三方语音包,如:eSpeak,Svox,个人建议Svox ...

  4. 【实用小工具】如何用Python语音合成,以及文字转语音~

    文章目录 前言 正文 直接使用 1. 获取权限 1.1 环境准备: 1.2 获取权限 1.2.1 登录 1.2.2 创建新应用 1.2.3 选择服务 2. 代码实现 2.1 获取access_toke ...

  5. Android TTS 中文 文字转语音 使用TextToSpeech Svox

    Android默认没有安装TTS数据包,无法文字转语音,而在设置里推荐的语音包是Pico TTS,并不支持中文,如果需要读中文,需要下载另外的第三方语音包,如:eSpeak,Svox,个人建议Svox ...

  6. 微软语音合成助手 TTS-VUE 文字转语音工具

    前言 我们在刷短视频的时候经常会听到一些AI合成声音,它们有各种音色.语调,甚至不同的情绪,听起来与人声无异 其实这些大都是利用微软Azure的文字转语音技术来实现的 虽然国内也有很多配音工具,但体验 ...

  7. 微信小程序 -- 语音合成:将文字转为语音(插件:微信同声传译)

    直接上手吧. 1. 小程序后台添加插件:微信同声传译以及在app.json进行配置 具体可看另外一篇博客:https://blog.csdn.net/qq_41638795/article/detai ...

  8. 微信小程序 -语音合成:将文字转为语音(小程序插件:微信同声传译)

    1.小程序后台添加微信同声传译插件 效果图: 2.wxml文件代码 <view class="yuyinWrap"><textarea class='yuyinC ...

  9. 前端实现tts(文字转语音)

    <!--* @Author: xss 995550359@qq.com* @Date: 2022-09-23 15:16:20* @LastEditors: xss 995550359@qq.c ...

最新文章

  1. ovs router
  2. 监视Rails进程内存泄漏的技巧
  3. Alibaba Cloud Linux 2 开源后又有什么新动作?
  4. java widget_自己的AppWidget一个简单教程 - 开发 - Android - JavaEye群组
  5. Java Hex 16进制的 byte String 转换类
  6. [导入]16:50论坛终于恢复了
  7. bug篇——Windows启动redis报错Creating Server TCP listening socket 127.0.0.1:6379: bind: No error...
  8. oracle roseha 配置,RoseHA 9.0 for Windows配合Oracle11g配置文档_v2.0-2015-04.pdf
  9. Android应用的persistent属性
  10. java使用poi读写word中的图片(二)
  11. Qt5设置应用程序图标
  12. 英雄联盟(LOL)3d模型显示
  13. 【动态规划】钢条切割问题
  14. shell 判断字符串长度
  15. 5G手机开打价格战,4G手机将被加速淘汰
  16. 怎样用计算机计算度分秒的计算器,如何用计算器把角度换成度分秒??
  17. MATLAB线性回归实例 平炉炼钢
  18. 2018-2021,60+篇阿里研发效能提升合集,都在这里了
  19. linuxCPU负载类比知识
  20. optimization method (理论)

热门文章

  1. 电气控制原理动图22张,超赞!
  2. 我来自双非二本,未来的路该怎么走?
  3. html卡片布局按钮,Material Design风格动态网格卡片布局UI设计
  4. linux的yun命令是访问互联网,如何在Linux终端中知道你的公有IP?
  5. verilog中值滤波算法实现及仿真
  6. 我的世界java手机版怎么调按键_如何在10秒内,让我的世界立即“自爆”?一个隐藏的mc快捷键...
  7. 电子邮箱里面的服务器,搭建电子邮件服务器
  8. php中的round是什么,phpround函数怎么用
  9. Redis报错:redis.exceptions.ResponseError: MISCONF Redis is configured to save RDB snap
  10. 移植 uC/OS-III 到 STM32