基于微软SAPI进行语音合成

王朝other·作者佚名  2006-01-10
窄屏简体版  字體: |||超大  

最近关注语音信号处理的东西,顺便看到了微软的TTS引擎,也顺便进行了一些了解,本文就我的了解介绍一下使用微软的SAPI(Sound Applicaion Interface),这套API主要包含了基于Windows 桌面平台的语音识别&语音合成(Text-To-Speech),这里主要介绍一下就是语音合成的我的一些了解。

微软的这套API是基于COM组件的,使得不仅仅是C/C++可以使用这套API,DEPHI,VB都可以使用。下图示出了我下面介绍的SpVoice的接口。

使用COM组件,程序应该使用Unicode编码,这可以在VC的Project->Setting里面的C/C++的预编译里面增加_UNICODE以及UNICODE两个宏定义,然后在Link标签项中Output选项的程序入口设置为wWinMainCRTStartup,以避免_WinMain@16符号没有定义的错误(Unicode程序的入口是wWinMainCRTStartup,不是WinMain)。

然后在stdafx.h文件的#endif前面添加

#define _ATL_APARTMENT_THREADED

#include <atlbase.h>

extern CComModule _Module;

#include <atlcom.h>

在类声明中定义:

HRESULT hr;

ISpVoice * pVoice;

然后在对话框的初始化文件里面对COM组件进行初始化:

::CoInitialize(NULL);

hr = CoCreateInstance(CLSID_SpVoice, NULL, CLSCTX_ALL, IID_ISpVoice, (void **)&pVoice);

之后,就可是使用这套语音合成引擎了:

CString str;

GetDlgItemText(IDC_EDIT1,str);

if( SUCCEEDED( hr ) )

{

hr = pVoice->Speak((TCHAR*)str.GetBuffer(50), 0, NULL);

}

别完了用完了之后要进行销毁:

pVoice->Release();

pVoice = NULL;

::CoUninitialize();

这套引擎还可以使用XML进行格式化,使得声音更加自然。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航