VC编程实现文本语音转换.doc_第1页
VC编程实现文本语音转换.doc_第2页
VC编程实现文本语音转换.doc_第3页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

语音识别的基本原理 Fundamentals of Speech RecognitionVC编程实现文本语音转换文本语音(Text-to-Speech,以下简称TTS),它的作用就是把通过TTS引擎把文本转化为语音输出。本文不是讲述如何建立自己的TTS引擎,而是简单介绍如何运用Microsoft Speech SDK 建立自己的文本语音转换应用程序。 Microsoft Speech SDK简介 Microsoft Speech SDK是微软提供的软件开发包,提供的SpeechAPI(SAPI)主要包含两大方面: 1 API for Text-to-Speech 2 API for Speech Recognition 其中API forText-to-Speech,就是微软TTS引擎的接口,通过它我们可以很容易地建立功能强大的文本语音程序,金山词霸的单词朗读功能就用到了这写API,而目前几乎所有的文本朗读工具都是用这个SDK开发的。至于API for SpeechRecognition就是与TTS相对应的语音识别,语音技术是一种令人振奋的技术,但由于目前语音识别技术准确度和识别速度不太理想,还未达到广泛应用的要求。 Microsoft Speech SDK可以在微软的网站免费下载,目前的版本是5.1,为了支持中文,还要把附加的语言包(LangPack)一起下载。 为了在VC中使用这SDK,必需在工程中添加SDK的include和lib目录,为免每个工程都添加目录,最好的办法是在VC的 Option-Directoris立加上SDK的include和lib目录。 一个最简单的例子 先看一个入门的例子:#include sapi.h#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;/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-Speak(LHello world, 0, NULL);pVoice-Release();pVoice = NULL;/千万不要忘记::CoUninitialize();return TRUE;短短20几行代码就实现了文本语音转换,够神奇吧。SDK提供的SAPI是基于COM封装的,无论你是否熟悉COM,只要按部就班地用CoInitialize(),CoCreateInstance()获取IspVoice接口就够了,需要注意的是初始化COM后,程序结束前一定要用CoUninitialize()释放资源。 IspVoice接口主要函数上述程序的流程是获取IspVoice接口,然后用ISpVoice:Speak()把文本输出为语音,可见,程序的核心就是IspVoice接口。除了Speak外IspVoice接口还有许多成员函数,具体用法请参考SDK的文档。下面择要说一下几个主要函数的用法: HRESULTSpeak(const WCHAR *pwcs,DWORD dwFlags,ULONG *pulStreamNumber); 功能:就是speak了 参数: *pwcs 输入的文本字符串,必需为Unicode,如果是ansi字符串必需先转换为Unicode。 dwFlags 用来标志Speak的方式,其中SPF_IS_XML 表示输入文本含有XML标签,这个下文会讲到。 PulStreamNumber 输出,用来获取去当前文本输入的等候播放队列的位置,只有在异步模式才有用。HRESULT Pause ( void );HRESULT Resume ( void ); 功能:一看就知道了。HRESULTSetRate(long RateAdjust );HRESULT GetRate(long *pRateAdjust); 功能:设置/获取播放速度,范围:-10 to 10HRESULT SetVolume(USHORT usVolume);HRESULT GetVolume(USHORT *pusVolume); 功能:设置/获取播放音量,范围:0 to 100HRESULT SetSyncSpeakTimeout(ULONG msTimeout);HRESULT GetSyncSpeakTimeout(ULONG *pmsTimeout); 功能:设置/获取同步超时时间。由于在同步模式中,电泳Speak后程序就会进入阻塞状态等待Speak返回,为免程序长时间没相应,应该设置超时时间,msTimeout单位为毫秒。HRESULT SetOutput(IUnknown *pUnkOutput,BOOL fAllowFormatChanges); 功能:设置输出,下文会讲到用SetOutput把Speak输出问WAV文件。 这些函数的返回类型都是HRESULT,如果成功则返回S_OK,错误有各自不同的错误码。 使用XML引自:/web/198/22269.htm 个人认为这个TTSapi功能最强大之处在于能够分析XML标签,通过XML标签设置音量、音调、延长、停顿,几乎可以使输出达到自然语音效果。前面已经提过,把Speak参数dwFlags设为SPF_IS_XML,TTS引擎就会分析XML文本,输入文本并不需要严格遵守W3C的标准,只要含有XML标签就行了,下面举个例子: pVoice-Speak(LVOICE REQUIRED=NAME=Microsoft Mary/volumeVOLUME LEVEL=100turn up/VOLUME, SPF_IS_XML, NULL);VOICE REQUIRED=NAME=Microsoft Mary/ 标签把声音设为Microsoft Mary,英文版SDK中一共含有3种声音,另外两种是Mi

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论