C++ 简单的语音合成(TTS,即文字转语音)类
生活随笔
收集整理的這篇文章主要介紹了
C++ 简单的语音合成(TTS,即文字转语音)类
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
如果出現(xiàn)以下錯(cuò)誤:
error C4996: ‘GetVersionExA': 被聲明為已否決
關(guān)閉SDL:
Project Properties > Configuration Properties > C/C++ > General > SDL checks關(guān)掉
轉(zhuǎn)載于
https://blog.csdn.net/sssaaaannnddd/article/details/100113198
微軟win7及以上版本自帶的語音合成引擎,可以直接拿來用,不需要額外的dll文件,只需要引用頭文件即可, 封裝一個(gè)簡單的類用來做語音合成如下:
tts.h
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語音進(jìn)行朗讀, 否則就跳出{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); // 設(shè)置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();} }實(shí)例化對象,使用Speak函數(shù)就行了,后一次會(huì)把前一次沒播放完的停掉,注意參數(shù)是wstring型?
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)總結(jié)
以上是生活随笔為你收集整理的C++ 简单的语音合成(TTS,即文字转语音)类的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 创造与魔法霸王龙分布(关于创造的名言)
- 下一篇: 蓝牙耳机可以打电话吗(蓝牙无线技术)