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
出现这个错误可能有以下几种原因:
- 相应的COM组件没有正确安装或注册到系统中。
- 注册表中的相关信息被删除或损坏。
- 使用的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即可