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

关闭SDL:

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

C++ 简单的语音合成(TTS,即文字转语音)类_少年磊的博客-CSDN博客_c++ tts

微软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;
	return false;
bool TTS::Speak(std::wstring word)
	StopVoice();
	if (InitVoice())
		HRESULT ret = m_pSpVoice->Speak(word.c_str(), SPF_ASYNC, NULL);
		return ret;
		return false;
bool TTS::IsUseful()
	bool bRet = InitVoice();
	StopVoice();
	return bRet;
void TTS::StopVoice()
	if (m_pSpVoice!=nullptr)
		m_pSpVoice->Release();

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

下面链接是Qt实现的语音播报功能,可以调节音量、音色、播报速率,跨平台,功能更强大:

Qt的QTextToSpeech类实现语音播报功能

在9.0的系统rom定制化开发中,在产品开发中,一些内置的app需要用到tts语音播报功能,所以需要用到讯飞语音引擎作为默认的系统tts语音引擎功能,所以就需要 了解系统关于tts语音引擎默认的设置方法,然后在设置讯飞语音引擎为默认的tts语音引擎来实现tts语音播报功能的实现,接下来分析下相关的tts默认引擎的设置 方法,来实现默认tts语音引擎的设置
我们都知道现在的语音合成TTS是可以通过微软的SAPI实现的,好处我就不多说了,方便而已,因为在微软的操作系统里面就自带了这个玩意,主要的方式有两种: 1、使用COM组件技术,不管是C++,C#,Delphi都能玩的转,开发出来的东西在XP和WIN7都能跑。(要引入SpeechLib,好像在项目上点引用,然后选到系统COM吧,好久没弄,记不清楚了) 2、使用WIN7的windows api,其实最终还是调用了SAPI,所以开发出来的东西就只能在WIN7上面跑。 其实不管是哪一种,都是调用SAPI,可能后一种代码比较简单,使用已经安装的TTS引擎,现在一般用NeoSpeech,这个就不解释了,
这就是我们的感受,也是我们制作滋补品的原因。 // Tonic是信号发生器和处理器的集合TriangleWave tone1 = TriangleWave(); SineWave tone2 = SineWave(); SineWave颤音= SineWave()。freq(10); SineWave颤音= SineWave()。freq(1); //您可以使用直观的运算符进行合并Generator GeneratorSignal =(tone1 + tone2)* tremolo; //并插入一个
当然可以!Qt 是一个跨平台的 C++ 应用程序开发框架,它提供了丰富的库和工具,支持多种操作系统和平台。在 Qt 中,你可以使用 QString 来进行文本操作,包括转换语言、编码和解码等。 要将语音转换为文本,你需要使用语音识别 API 或库,例如 Google Cloud Speech-to-Text 或 Microsoft Azure Speech Services。一旦你获得了语音的文本表示,你就可以使用 QString 的 fromUtf8() 或 fromLocal8Bit() 函数将其转换为 Qt 中的文本格式。 以下是一个示例代码片段,展示了如何将一个 UTF-8 编码的字符串转换为 QString 的实例: #include <QString> int main() const char* utf8Str = "你好,世界!"; QString str = QString::fromUtf8(utf8Str); // 在 str 中,文本已被正确地转换为 Unicode 格式 return 0; 希望这可以帮助你开始使用 Qt 进行语音转文本的开发