微软TTS示例
#include "sphelper.h" #include "sapi.h" #pragma comment(lib, "sapi.lib") int CtestMFCDlg::testTTS(TCHAR* szWords) { if ( NULL == szWords || 0 == szWords[0] ) return -1; ::CoInitialize(NULL); // COM初始化 CLSID CLSID_SpVoice; CLSIDFromProgID(_T("SAPI.SpVoice"), &CLSID_SpVoice); ISpVoice *pSpVoice = NULL; IEnumSpObjectTokens *pSpEnumTokens = NULL; // 获取ISpVoice接口 if (FAILED(CoCreateInstance(CLSID_SpVoice, NULL, CLSCTX_INPROC_SERVER, IID_ISpVoice, (void**)&pSpVoice))) { return -1; } // 列举所有的语音token,可以通过pSpEnumTokens指向的接口得到 if (SUCCEEDED(SpEnumTokens(SPCAT_VOICES, NULL, NULL, &pSpEnumTokens))) { ISpObjectToken *pSpToken = NULL; // 依次获取每个token并朗读字符串 if (SUCCEEDED(pSpEnumTokens->Next(1, &pSpToken, NULL)) && pSpToken != NULL) { pSpVoice->SetVolume(100); pSpVoice->SetVoice(pSpToken); // 设置当前语音token为pSpToken pSpVoice->Speak(szWords, SPF_DEFAULT, NULL); // 朗读中文和英文的混合字符串 pSpToken->Release(); // 释放token } pSpEnumTokens->Release(); // 释放pSpEnumTokens接口 } pSpVoice->Release(); ::CoUninitialize(); return 0; }