#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;
}