TTS 文本转语音

文本转语音

TTS 文本转语音包SpeechSDK51 SpeechSDK51LangPack
地址https://www.microsoft.com/en-us/download/details.aspx?id=10121#

tts.cpp

代码块

// SDK下载地址 https://www.microsoft.com/en-us/download/details.aspx?id=10121
// TTS.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include "TTS.h"

#include <sapi.h>

#pragma comment(lib, "ole32.lib") //CoInitialize CoCreateInstance需要调用ole32.dll

#pragma comment(lib, "sapi.lib") //sapi.lib在SDK的lib目录,必需正确配置

#ifdef _DEBUG
#define new DEBUG_NEW
#endif


// 唯一的应用程序对象

CWinApp theApp;

using namespace std;

int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
{
    int nRetCode = 0;

    HMODULE hModule = ::GetModuleHandle(NULL);

    if (hModule != NULL)
    {
        // 初始化 MFC 并在失败时显示错误
        if (!AfxWinInit(hModule, NULL, ::GetCommandLine(), 0))
        {
            // TODO:  更改错误代码以符合您的需要
            _tprintf(_T("错误:  MFC 初始化失败\n"));
            nRetCode = 1;
        }
        else
        {
            // TODO:  在此处为应用程序的行为编写代码。
            ISpVoice * pVoice = NULL;
            //COM初始化:
            if (FAILED(::CoInitialize(NULL)))
                return FALSE;
            //获取ISpVoice接口:
            HRESULT hr = CoCreateInstance(CLSID_SpVoice, NULL, CLSCTX_ALL, IID_ISpVoice, (void **)&pVoice);
            if( SUCCEEDED( hr ) )
            {
                hr = pVoice->SetVolume(50);
                if (FAILED(hr))
                {
                    return FALSE;
                }
                hr = pVoice->Speak(L"你好?你好。你好!你好;你好哪", 0, NULL);
                if (FAILED(hr))
                {
                    return FALSE;
                }
                pVoice->Release();
                pVoice = NULL;
            }
            ::CoUninitialize();
            return TRUE;
        }
    }
    else
    {
        // TODO:  更改错误代码以符合您的需要
        _tprintf(_T("错误:  GetModuleHandle 失败\n"));
        nRetCode = 1;
    }

    return nRetCode;
}

TextToSpeech.h

代码块

#pragma once
#include <sapi.h>

class CTextToSpeech
{
public:
    CTextToSpeech();
    virtual ~CTextToSpeech();
    BOOL Init();
    void Release();
    BOOL SetVolume(USHORT vol);

    BOOL Speak(
        /* [string][in][annotation] */
        LPCWSTR pwcs,
        /* [in] */ DWORD dwFlags,
        /* [out][annotation] */
        ULONG *pulStreamNumber);

private:
    ISpVoice* _pVoice;
    BOOL _init;
};

TextToSpeech.cpp

代码块

#include "stdafx.h"

#include "TextToSpeech.h"

#include <sapi.h>
#pragma comment(lib, "ole32.lib") //CoInitialize CoCreateInstance需要调用ole32.dll
#pragma comment(lib, "sapi.lib") //sapi.lib在SDK的lib目录,必需正确配置

CTextToSpeech::CTextToSpeech()
    : _pVoice(NULL)
    , _init(FALSE)
{

}


CTextToSpeech::~CTextToSpeech()
{

}
BOOL CTextToSpeech::Init()
{
    //COM初始化:
    if (FAILED(::CoInitialize(NULL)))
        return FALSE;
    //获取ISpVoice接口:
    HRESULT hr = CoCreateInstance(CLSID_SpVoice, NULL, CLSCTX_ALL, IID_ISpVoice, (void **)&_pVoice);
    if (FAILED(hr))
        return FALSE;

    hr = _pVoice->SetVolume(50);
    if (FAILED(hr))
    {
        _pVoice->Release();
        _pVoice = NULL;
        return FALSE;
    }
    _init = TRUE;
    return TRUE;
}

void CTextToSpeech::Release()
{
    if (!_init)
    {
        return ;
    }
    _pVoice->Release();
    _pVoice = NULL;
    ::CoUninitialize();
    _init = FALSE;
    return ;
}

BOOL CTextToSpeech::SetVolume(USHORT vol)
{
    if (!_init)
    {
        return FALSE;
    }
    if (FAILED(_pVoice->SetVolume(vol)))
    {
        return FALSE;
    }
    return TRUE;
}

BOOL CTextToSpeech::Speak(
    /* [string][in][annotation] */
    LPCWSTR pwcs,
    /* [in] */ DWORD dwFlags,
    /* [out][annotation] */
    ULONG *pulStreamNumber)
{
//     ISpVoice * _pVoice = NULL;
//     //COM初始化:
//     if (FAILED(::CoInitialize(NULL)))
//         return FALSE;
//     //获取ISpVoice接口:
//     HRESULT hr = CoCreateInstance(CLSID_SpVoice, NULL, CLSCTX_ALL, IID_ISpVoice, (void **)&_pVoice);
//     if (SUCCEEDED(hr))
//     {
//         hr = _pVoice->SetVolume(50);
//         if (FAILED(hr))
//         {
//             return FALSE;
//         }
//         hr = _pVoice->Speak(L"你好?你好。你好!你好;你好哪", 0, NULL);
//         if (FAILED(hr))
//         {
//             return FALSE;
//         }
//         _pVoice->Release();
//         _pVoice = NULL;
//     }
//     ::CoUninitialize();
//     return TRUE;
    if (!_init)
    {
        return FALSE;
    }
    if (FAILED(_pVoice->Speak(pwcs, dwFlags, pulStreamNumber)))
        return FALSE;
    return TRUE;    
}

最后更新时间 2016-07-16 13:18:23

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值