欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

SAPI实现TTS

发布时间:2025/5/22 编程问答 37 豆豆
生活随笔 收集整理的这篇文章主要介绍了 SAPI实现TTS 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

废话不多说,直接上代码

//tts_module.h #ifndef __TTS_MODULE_HH__ #define __TTS_MODULE_HH__#ifdef WIN32 #ifdef TTS_MODULE_EXPORTS #define TTS_MODULE_API __declspec(dllexport) #else #define TTS_MODULE_API __declspec(dllimport) #endif #else #define TTS_MODULE_API #endifclass TTS_MODULE_API TssModule { public:TssModule();~TssModule();int Initialise();int Readout(const char * text);void Uninitialise();private:void* pSpVoice; };#endif //tts_module.cpp #include "tts_module.h" #include <sphelper.h>TssModule::TssModule() {pSpVoice = NULL; }TssModule::~TssModule() {}int TssModule::Initialise() {pSpVoice = NULL;// Initialize COMCoInitialize(NULL);// Create the voice interface objectif (FAILED(CoCreateInstance(CLSID_SpVoice, NULL, CLSCTX_INPROC_SERVER, IID_ISpVoice, (void **)&pSpVoice))){printf("Fail to create instance of ISpVoice!");return -1;}CComPtr<IEnumSpObjectTokens> cpEnum;CComPtr<ISpObjectToken> cpToken;//if (FAILED(SpEnumTokens(SPCAT_VOICES, L"Name=Ekho Mandarin", NULL, &cpEnum)))if (FAILED(SpEnumTokens(SPCAT_VOICES, L"Name=Microsoft Lili", NULL, &cpEnum))){printf("Fail to get voices!");return -2;}//Get the closest tokenif (FAILED(cpEnum->Next(1, &cpToken, NULL))){printf("Fail to get voice EkhoVoice!");return -3;}//set the voice if (FAILED(((ISpVoice*)pSpVoice)->SetVoice(cpToken))){printf("Fail to set voice EkhoVoice!");return -4;}return 0; }int TssModule::Readout(const char * text) {int nLen = MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, text, -1, NULL, 0);if (nLen == 0){printf("MultiByteToWideChar get length = 0");return -1;}wchar_t* pResult = new wchar_t[nLen];MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, text, -1, pResult, nLen);((ISpVoice*)pSpVoice)->Speak(pResult, SPF_DEFAULT, NULL);delete pResult;return 0; }void TssModule::Uninitialise() {CoUninitialize(); }

总结

以上是生活随笔为你收集整理的SAPI实现TTS的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。