微软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;
}

 

posted @ 2014-05-28 21:52  Tigmer  阅读(631)  评论(0编辑  收藏  举报