qt项目使用tts后,SUCCEEDED判断错误,无语音播报

本文介绍了一个C++函数`intTextToSpeak`,用于通过COM接口进行语音合成。遇到`REGDB_E_CLASSNOTREG`错误时,文章分析了原因可能是COM组件未正确安装或注册,并提供了修复方法,如更新MicrosoftSpeechPlatform相关包并针对32/64位系统选择对应的安装版本。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

int TextToSpeak(char *buffer)
{
	if (FAILED(::CoInitialize(NULL)))
		return -1;

	ISpVoice * pVoice = NULL;
	HRESULT hr = CoCreateInstance(CLSID_SpVoice, NULL, CLSCTX_ALL, IID_ISpVoice, (void **)&pVoice);

	if (SUCCEEDED(hr))
	{
		printf("SUCCEEDEDSUCCEEDEDSUCCEEDEDSUCCEEDEDSUCCEEDEDSUCCEEDED\n");
		USES_CONVERSION;

		wchar_t* tmpBuff = A2W(buffer);
		printf(buffer);
		hr = pVoice->Speak(tmpBuff, 0, NULL);
		if (SUCCEEDED(hr))
		{
			printf("SUCCEEDEDSUCCEEDEDSUCCEEDEDSUCCEEDEDSUCCEEDEDSUCCEEDED\n");
		}
		else
			printf("SpeakSpeakSpeakSpeakSpeakSpeakSpeak\n");
		pVoice->Release();
		pVoice = NULL;

		::CoUninitialize();
		return SUCCEEDED(hr);
	}
	else
	{
		printf("11111111111111111111");
		return  -1;
	}
		
}

源码是这样的,由于SUCCEEDED(hr)一直判断失败,调试查看hr的值。

REGDB_E_CLASSNOTREG Class not registered

出现这个错误可能有以下几种原因:

  1. 相应的COM组件没有正确安装或注册到系统中。
  2. 注册表中的相关信息被删除或损坏。
  3. 使用的COM组件版本与注册表中的版本不匹配。

涉及到注册表 看起来比较麻烦其实可以先更新一下之前安装的语音程序包:

语音包:Microsoft Speech Platform - Runtime Languages (Version 11)

找到MSSpeech_TTS_zh-CN_HuiHui.msi安装。可以使用这个语音包,来实现桌面版Huihui的播放效果。

这个语音包安装的时候双击安装就消失了,没有交互界面。

语音引擎:Microsoft Speech Platform - Runtime (Version 11)

对应选择计算机位数64安装x64,32位机选择x86即可

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值