热度 2
2019-9-23 10:02
2357 次阅读|
1 个评论
VC用TTS实现文字语音朗读 Schwimmer 1 人评论 985人阅读 2010-11-01 14:31:46 文本语音(Text-to-Speech,以下简称TTS),它的作用就是把通过TTS引擎把文本转化为语音输出。本文不是讲述如何建立自己的TTS引擎,而是简单介绍如何运用Microsoft Speech SDK 建立自己的文本语音转换应用 程序 。 Microsoft Speech SDK简介 Microsoft Speech SDK是微软提供的 软件开发 包,提供的Speech API (SAPI)主要包含两大方面: 1. API for Text-to-Speech 2. API for Speech Recognition 其中API for Text-to-Speech,就是微软TTS引擎的接口,通过它我们可以很容易地建立功能强大的文本语音 程序 ,金山词霸的单词朗读功能就用到了这写API,而目前几乎所有的文本朗读 工具 都是用这个SDK开发的。至于API for Speech Recognition就是与TTS相对应的语音识别,语音技术是一种令人振奋的技术,但由于目前语音识别技术准确度和识别速度不太理想,还未达到广泛应用的要求。 Microsoft Speech SDK可以在微软的网站免费下载,目前的版本是5.1,为了支持中文,还要把附加的语言包(LangPack)一起下载。 为了在VC中使用这SDK,必需在工程中添加SDK的include和lib目录,为免每个工程都添加目录,最好的办法是在VC的 Directoris立加上SDK的include和lib目录。 一个最简单的例子 先看一个入门的例子: #include #pragma comment(lib,"ole32.lib") //CoInitialize CoCreateInstance需要调用ole32.dll #pragma comment(lib,"sapi.lib") //sapi.lib在SDK的lib目录,必需正确配置 int main(int argc, char* argv ) { ISpVoice * pVoice = NULL; if (FAILED(::CoInitialize(NULL))) return FALSE; HRESULT hr = CoCreateInstance(CLSID_SpVoice, NULL, CLSCTX_ALL, IID_ISpVoice, (void **)&pVoice); if( SUCCEEDED( hr ) ) { CComPtr cpWavStream; CComPtr cpOldStream; CSpStreamFormat OriginalFmt; GetOutputStream( &cpOldStream ); OriginalFmt.AssignFormat(cpOldStream); hr = SPBindToFile( L"D:\\output.wav",SPFM_CREATE_ALWAYS, &cpWavStream,&OriginalFmt.FormatId(), OriginalFmt.WaveFormatExPtr() ); if( SUCCEEDED( hr ) ) { SetOutput(cpWavStream,TRUE); WCHAR WTX[] = L" text to wave"; Speak(WTX, SPF_IS_XML, NULL); Release(); pVoice = NULL; } } ::CoUninitialize(); return TRUE; } SPBindToFile把文件绑定到输出流上,而SetOutput把输出设为绑定文件的流上。 出处: http://www.programbbs.com/doc/5136.htm