Windows TTS语音引擎VC编程入门

来源:互联网 发布:李元霸有多厉害知乎 编辑:程序博客网 时间:2024/05/16 10:54

        以前看过不少软件像foxitreader,office等软件带有语音朗读功能,现在也有机会做做这方面的应用,查过些资料,引用比较多的是这个网站:

http://write.blog.csdn.net/postedit?ref=toolbar

   Windows Speech SDK包含语音识别SR引擎和语音合成SS引擎两种语音引擎。语音识别引擎用于识别语音命令,调用接口完成某个功能,实现语音控制。语音合成引擎用于将文字转换成语音输出。

       SAPI包括以下几类接口:Voice Commands API、Voice Dictation API、Voice Text API、Voice Telephone API和Audio Objects API。我们要实现语音合成需要的是Voice Text API。

       下面是根据此网站内容做了一个通用类,方便我们的工程调用。

UserTTSAPI.h文件

#pragma once
#include <sapi.h>
#include <sphelper.h>
#pragma comment(lib,"sapi.lib")
#pragma comment(lib,"ole32.lib")


class CUserTTSAPI
{
public:
CUserTTSAPI(void);
~CUserTTSAPI(void);
public:
ISpVoice* pSpVoice;//初始化COM对象
IEnumSpObjectTokens *pSpEnumTokens;
ISpObjectToken *pSpToken;


BOOL blOpenTTSAPI(void);
void vSysReadBySST(CString strData);
void vCloseTTSAPI(void);
};


extern CUserTTSAPI m_UserTTSAPI;

UserTTSAPI.app文件

#include "StdAfx.h"
#include "UserTTSAPI.h"


CUserTTSAPI m_UserTTSAPI;


CUserTTSAPI::CUserTTSAPI(void)
{
::CoInitialize(NULL);
pSpVoice = NULL;//初始化COM对象
pSpEnumTokens = NULL;
pSpToken = NULL;
}


CUserTTSAPI::~CUserTTSAPI(void)
{
::CoUninitialize();
}


BOOL CUserTTSAPI::blOpenTTSAPI(void)
{
CLSID CLSID_SpVoice;
CLSIDFromProgID(_T("SAPI.SpVoice"),&CLSID_SpVoice);


//获取ISPVoice接口
if (FAILED(CoCreateInstance(CLSID_SpVoice,NULL,CLSCTX_INPROC_SERVER,IID_ISpVoice,(void**)&pSpVoice)))
{
return FALSE;
}
//列举所有的语音token,可以通过pSpenumTokens指向的接口得到
if (SUCCEEDED(SpEnumTokens(SPCAT_VOICES,NULL,NULL,&pSpEnumTokens)))
{
pSpEnumTokens->Item(0,&pSpToken);
pSpVoice->SetVoice(pSpToken);
}
return TRUE;
}


void CUserTTSAPI::vSysReadBySST(CString strData)
{
if (g_Channel.blPrompt == TRUE)
{
long lSpeeh = 0;
switch(g_Channel.bySoundSpeed)
{
case 0:
lSpeeh = -10;
break;
case 1:
lSpeeh = -8;
break;
case 2:
lSpeeh = -5;
break;
case 3:
lSpeeh = -3;
break;
case 4:
lSpeeh = 0;
break;
case 5:
lSpeeh = 3;
break;
case 6:
lSpeeh = 5;
break;
case 7:
lSpeeh = 8;
break;
case 8:
lSpeeh = 10;
break;
}
pSpVoice->SetRate(lSpeeh);//设置声音快慢
unsigned short usVolume = g_Channel.bySoundVolume * 10;
pSpVoice->SetVolume(usVolume);//设置音量
//pSpVoice->Pause();
pSpVoice->Speak(NULL,SPF_PURGEBEFORESPEAK,0);
pSpVoice->Speak(strData,SPF_ASYNC,NULL);//异步
//pSpVoice->Speak(strData,SPF_DEFAULT,NULL);
//pSpVoice->Resume();
}
}


void CUserTTSAPI::vCloseTTSAPI(void)
{
if (g_Channel.blPrompt == TRUE)
{
g_Channel.blPrompt = FALSE;
pSpToken->Release();
pSpEnumTokens->Release();
pSpVoice->Release();
}
}


本类实现TTS语音引擎的初始化以及关闭流程,中间的g_Channel.bySoundSpeed声音速度,g_Channel.bySoundVolume 声音大小,g_Channel.blPrompt指示开启的标志。

0 0
原创粉丝点击