




已阅读5页,还剩12页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
内容摘要:与机器进行语音交流,让机器发出需要的声音,这是人们长期以来梦寐以求的事情,文语转换系统就是让机器通过识别和理解文章段落把文字信号转变为相应的声音信号的高技术。文娱转换是一门交叉学科,近二十年来,文语转换技术取得了更加显著的进步,开始从实验室走向市场。热门娱记,未来10年,文语转换系统将进入工业、家电、通信、汽车电子、医疗、家庭服务、消费电子产品等各个领域。很多专家都认为文娱转换技术是2000至2010年间信息技术领域十大重要的科技发展技术之一。本文介绍了利用微软的Microsoft Speech SDK 5.1提供的TTS(text-to-speech)技术开发具有语音朗读功能的应用程序关键词:文语转换 MSSDK COMAbstract:And machinery for voice communication, so that the machine needs a voice, this is what people have long dreamed of, text-to-speech system is to allow machines to identify and understand the paragraphs of the article text signal into the voice signals in the corresponding high-tech. Civic conversion is a cross-discipline, the last 20 years, text-to-speech conversion technology have made more significant progress, starting from the laboratory to the market. Top Yuji, the next 10 years, text-to-speech system will enter the industrial, household appliances, telecommunications, automotive electronics, medical care, family services, consumer electronics and other fields. Many experts agree that cultural conversion technology is the 2000-2010 field of information technology among the 10 important scientific and technological development of the technology. this article introduces How to Create speech-enableed Apllications use the Microsoft Speech SDK 5.1 Key words:Test -To- Speech MSSDK COM1绪论1.1. TTS技术概述上世纪90年代中期以来,随着个人计算机的硬件和软件功能越来越强,和现代语音技术的发展,以前在科幻电影中才能看到的会说话的电脑已经成为现实.而TTS技术正是电脑能够说话的关键技术之一.TTS是text-to-speech的缩写,英文也称Speech Synthesis即语音合成.语音合成就是一个将文本转化为语音输出的过程,这个过程的工作主要是将输入的文本按字或词分解为音素,并且对文本中的数字、货币单位、单词变形以及标点等要特殊处理的符号进行分析,以及将音素生成数字音频然后用扬声器播放出来或者存为声音文件以后用多媒体软件播放.图1形象地描述了这个过程.语音应用程序“ONE O CLOCK”应用程序把语言以纯文本的形式输出语音合成引擎WAHN WO KLAOKD语音合成引擎把文本转换为音素和韵律符号并生成连续的数字音频声卡扬声器 硬件部分声卡将数字声音转换为声音信号并由扬声器播放出来“ONE O CLOCK”图1. text-to-speech实现过程当应用程序需要发声的时候就调用语音合成引擎(SPEECH SYNTHESIS ENGINE)进行语言合成,将文本处理后通过扬声器用近似于人的声音“读”出来,通常还可以通过改变对语音引擎的设置改变“说话” 的速度,声音频率(低沉或者尖锐),声音大小,还能模拟口形、唇形和舌位的变化对声音的影响.面前计算机通过语音合成发出的声音效果听起来就象是录音磁带发出的声音.与一些用预先录制的声音文件实现发声的应用程序相比,TTS的发声引擎只有几兆大小,不需要大量的声音文件支持,因此可以节省很大的储存空间,并且可以朗读预先未知的任何语句.现在已经有许多应用软件应用TTS技术实现语音功能,例如一些播音软件可以用来读小说或作校对工作,还可以朗读电子邮件,一些电子词典可以读出单词,还可以用于查询中心自动播放服务信息等.1.2关于Microsoft Speech SDK实现TTS的核心技术本身是非常复杂的,不是一般开发人员所能完成的,但是有了Microsoft Speech SDK这样的工具的帮助,只需要在应用程序中加入一些不太复杂的命令和操作,我们就可以创建具有TTS功能的应用程序了.国内外有许多高科技公司和科研机构致力于TTS技术的开发和研究,如微软公司、IBM公司以及国内的科大迅飞公司都有较成熟的语音产品,并且任何人都可以获得微软公司免费提供的语音软件开发工具: Microsoft Speech SDK.目前的Microsoft Speech SDK已经有4.0,5.1等几个版本,最近还推出了适合网络语音程序开发的The Microsoft Speech Application SDK的测试版,这些SDK主要包括语音应用程序编程接口SAPI(SAPI使我们象使用windows API一样方便地在程序中使用语音功能)和微软语音识别引擎和微软语音合成引擎,还提供了进行应用设计的例子.Microsoft Speech SDK 5.1 提供了英文和中文两种TTS引擎,即可以用它开发朗读中文和英文的应用程序,非常适合中国的开发者使用.利用这些SDK,开发人员可以很容易地把TTS技术集成到应用软件中,并可以自由发布.另外Microsoft Speech SDK还提供了详细的文档帮助开发者进行程序开发.1.3 文章结构本文分2大副本。第2章主要介绍了MSSDK的使用方法和实现过程,并安排了一个小小的例子,第3章则是对TTS系统的改进,使之更加接近真实语境语调。2MSSDK 的使用理论2.1 实现TTS的条件准备利用Microsoft Speech SDK进行TTS语音应用程序开发前要作一些软件和硬件的准备: 1)、去/speech/下载Microsoft Speech SDK 5.1或其它版本SDK,并且安装到自己的机器上.2)、Microsoft VC+ 6.0 ,service pack 3 或更新的版本.3)、声卡和喇叭4)、要实现该SDK的全部功能,则去/ 下载新的Platform SDK.另外要注意的是SAPI 5.1不支持windows 95.下载说明:(1)如果要下载例子程序,说明文档,SAPI以及用于开发的美国英语语音引擎,需要下载SpeechSDK51.exe,大约68M。(2)如果想要使用简体中文和日文的语音引擎,需要下载SpeechSDK51LangPack.exe。大约82M。下载完毕后,首先安装SpeechSDK51.exe,然后安装中文语言补丁包SpeechSDK51LangPack,然后展开msttss22l,自动将所需dll安装到系统目录。2.2 在应用程序中实现TTS功能 微软SAPI 5.1实现text-to-speech的核心是对COM接口IspVoice的应用,所以应用TTS技术最好要了解一下COM编程技术,但是即使从来没有用过COM编程,只要按照SDK的示例,也可以顺利的实现TTS的功能.SAPI 的API接口封装得很好,我们不需要了解任何发声引擎底层的工作细节.例如一旦在程序中创建了一个IspVoice对象,就可以通过调用ISpVoice:Speak实现文本朗读,通过调用ISpVoice:SetRate实现对朗读速度的控制,以及通过调用ISpVoice:SetVoice实现对朗读声音的不同人物或语言控制(男声/女生,中文/英文)等.事实上掌握对这个接口的应用就可以实现大多数TTS的应用.SAPI全称 The Microsoft Speech API.相关的SR和SS引擎位于Speech SDK开发包中。这个语音引擎支持多种语言的识别和朗读,包括英文、中文、日文等。SAPI包括以下组件对象(接口):(1)Voice Commands API。对应用程序进行控制,一般用于语音识别系统中。识别某个命令后,会调用相关接口是应用程序完成对应的功能。如果程序想实现语音控制,必须使用此组对象。(2)Voice Dictation API。听写输入,即语音识别接口。(3)Voice Text API。完成从文字到语音的转换,即语音合成。(4)Voice Telephone API。语音识别和语音合成综合运用到电话系统之上,利用此接口可以建立一个电话应答系统,甚至可以通过电话控制计算机。(5)Audio Objects API。封装了计算机发音系统。SAPI是架构在COM基础上的,微软还提供了ActiveX控件,所以不仅可用于一般的windows程序,还可以用于网页、VBA甚至EXCEL的图表中。在下面介绍的程序中,用VC+6.0实现了Text-to-Speech的应用.(1)创建一个工程建立一个工程,Projects选项卡中选择MFC AppWizard (exe);下一步中选择Dialog based类型.(2) 设置SAPI路径应用TTS必须用到头文件sapi.h和sapi.lib,为了能编译通过必须设置SAPI路径: a.、 在选中tools菜单中的option子项.b.、 选中Directories选项卡.c.、 选中Show directries for列表框中选中include files项,并在Directories中添加sapi头文件路径: 例如: C:Program FilesMicrosoft Speech SDK 5.1Include.d.、 选中Show directries for列表框中选中Library files项,并在Directories中添加sapi LIB文件路径: 例如: C:Program FilesMicrosoft Speech SDK 5.1Libi386.(3) 设计程序界面 添加如图所示的编辑框和命令按钮.图2 程序界面(4) 添加代码 双击speak按钮,添加朗读代码: void CExe1Dlg:Onspeak() UpdateData(); ISpVoice * pVoice = NULL; / 1)初始化COM if (FAILED(CoInitialize(NULL) AfxMessageBox(Error to intiliaze COM);return; 1 / 2)初始化SAPI HRESULT hr = CoCreateInstance(CLSID_SpVoice, NULL, CLSCTX_ALL, IID_ISpVoice, (void *)&pVoice); if( SUCCEEDED( hr ) ) / 3)朗读编辑框中的文字 hr = pVoice-Speak(m_mytext.AllocSysString(), 0, NULL); /完成发声后可以将声音对象释放 pVoice-Release(); pVoice = NULL; / 4)与CoInitialize(NULL)成对使用,释放COM CoUninitialize();1注: m_mytext是编辑框的变量名.需要定义它。以上的代码中主要做了几件TTS最基本的事情: 1)、初始化COM ,因为SAPI是基于COM的应用,使用之前必须首先初始化COM.2)、创建voice对象,即一个COM对象.3)、实现朗读,即调用speak方法.另外必须把头文件sapi.h加到前面: #include 编译通过后就可以运行程序了,在编辑框中输入一段文字,按speak按钮,我们就能听到电脑读出的令人兴奋的声音了. Microsoft的TTS引擎提供了4种朗读文字的声音,其中三种英文声音: Mary(女),mike和sam(男)一种中文声音: simplyfied Chinese.因为默认的TTS引擎是英文发声,如果要想朗读中文或选择不同的人进行朗读,可以在朗读前调用ISpVoice:SetVoice方法进行声音的设定,或者在朗读前双击用控制面板中的语音图标(安装Microsoft Speech SDK后自动添加的),选择文字语音转换选项卡进行默认声音的设置.2.3 一个简单的TTS实例: 为了简便我们使用一个WIN32平台作为工程平台。并建立一个空的工程。#include sapi.h #include stdafx.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; 6 短短20几行代码就实现了文本语音转换。SDK提供的SAPI是基于COM封装的,无论你是否熟悉COM,只要按部就班地用CoInitialize(), CoCreateInstance()获取IspVoice接口就够了,需要注意的是初始化COM后,程序结束前一定要用CoUninitialize()释放资源。 上述程序的流程是获取IspVoice接口,然后用ISpVoice:Speak()把文本输出为语音,可见,程序的核心就是IspVoice接口。除了Speak外IspVoice接口还有许多成员函数,具体用法请参考SDK的文档。下面择要说一下几个主要函数的用法: HRESULT Speak(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 ); 功能:暂停和恢复。 HRESULT SetRate(long RateAdjust ); HRESULT GetRate(long *pRateAdjust); 功能:设置/获取播放速度,范围:-10 to 10 HRESULT SetVolume(USHORT usVolume); HRESULT GetVolume(USHORT *pusVolume); 功能:设置/获取播放音量,范围:0 to 100 HRESULT SetSyncSpeakTimeout(ULONG msTimeout); HRESULT GetSyncSpeakTimeout(ULONG *pmsTimeout); 功能:设置/获取同步超时时间。由于在同步模式中,电泳Speak后程序就会进入阻塞状态等待Speak返回,为免程序长时间没相应,应该设置超时时间,msTimeout单位为毫秒。 HRESULT SetOutput(IUnknown *pUnkOutput,BOOL fAllowFormatChanges); 功能:设置输出,下文会讲到用SetOutput把Speak输出问WAV文件。 这些函数的返回类型都是HRESULT,如果成功则返回S_OK,错误有各自不同的错误码。 3对于MSSDK的文语转换系统增强3.1使用XML 个人认为这个TTS api功能最强大之处在于能够分析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种声音,另外两种是Microsoft Sam和Microsoft Mike。 VOLUME LEVEL=100 把音量设为100,音量范围是0100。 另外:标志音调(-1010): PITCH MIDDLE=10text/PITCH 注意: 号在C/C+中前面要加 ,否则会出错。 标志语速(-1010): RATE SPEED=-10text/RATE 逐个字母读: SPELLtext/SPELL 强调: EMPHtext/EMPH 停顿200毫秒(最长为65,536毫秒): SILENCE MSEC=200 / 控制发音: PRON SYM = h eh - l ow 1/ 这个标签的功能比较强,重点讲一下:所有的语言发音都是由基本的音素组成,拿中文发音来说,拼音是组成发音的最基本的元素,只要知道汉字的拼音,即使不知道怎么写,我们可知道这个字怎么都,对于TTS引擎来说,它不一定认识所有字,但是你把拼音对应的符号(SYM)给它,它就一定能够读出来,而英语发音则可以用音标表示,h eh - l ow 1就是hello这个单词对应的语素。至于发音与符号SYM具体对应关系请看SDK文档中的Phoneme Table。 5 再另外,数字、日期、时间的读法也有一套规则,SDK中有详细的说明,这里不说了(懒得翻译了),下面随便抛个例子: context ID = date_ ymd1999.12.21/context 会读成 December twenty first nineteen ninety nine XML标签可以嵌套使用,但是一定要遵守XML标准。XML标签确实好用,效果也不错,但是缺点: 麻烦,如果给一大段文字加标签,简直痛不欲生。 3.2 把文本语音输出为WAV文件 #include sapi.h #include sphelper.h #pragma comment(lib,ole32.lib) #pragma comment(lib,sapi.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 ) ) CComPtrISpStream cpWavStream; CComPtrISpStreamFormat cpOldStream; CSpStreamFormat OriginalFmt; pVoice-GetOutputStream( &cpOldStream ); OriginalFmt.AssignFormat(cpOldStream); hr = SPBindToFile( LD:output.wav,SPFM_CREATE_ALWAYS, &cpWavStream,&OriginalFmt.FormatId(), OriginalFmt.WaveFormatExPtr() ); if( SUCCEEDED( hr ) ) pVoice-SetOutput(cpWavStream,TRUE); WCHAR WTX = LVOICE REQUIRED=NAME=Microsoft Mary/text to wave; pVoice-Speak(WTX, SPF_IS_XML, NULL); pVoice-Release(); pVoice = NULL; :CoUninitialize(); return TRUE; SPBindToFile把文件绑定到输出流上,而SetOutput把输出设为绑定文件的流上。 4. 结束和展望未来4.1 结束语SPAI 5.1不仅适合用VC进行开发,还可以用VB、c#等进行开发,具体方法可以参考SDK帮助文档.结合windows程序设计的其它技术,只要取得文本的内容,就可以实现对对word、IE、电子邮件等各种文字的朗读.本人利用windows API剪贴板操作函数和模拟键盘的方法在朗读程序中实现了对任意文本内容的获取,包括IE、WORD、PDF等所有可以被鼠标选中的文本.另还外利用中英文内码的不同对所取得的文本进行中英文分析并按不同的语言分段,在朗读前利用ISpVoice:SetVoice方法进行中文或英文声音的设定,从而实现了中英文混合文本的朗读.合成这些方法和技术实现了一个电脑播音软件.此外Microsoft Speech SD
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 教育应用数学试卷
- 2025年复烤烟叶项目申请报告
- 传染病知识培训到基层课件
- 荆门9年级数学试卷
- 临川市小考数学试卷
- 莒南初一数学试卷
- 聊城高考一模数学试卷
- 2025年数据库系统工程师考试数据库系统性能优化案例分析试卷
- 2025年外贸跟单员职业资格考试试卷:外贸跟单员业务拓展与客户关系管理试题
- 2025年事业单位招聘考试综合类职业能力倾向测验真题模拟试卷(文物类)
- 中医艾灸养生护理
- 2025届湖南省长沙市一中物理高一上期中达标检测模拟试题含解析
- 工程施工重点、难点分析及保证措施
- 2024城市电缆线路岩土工程勘察规范
- 变电站巡检维护服务方案
- 华为质量回溯(根因分析与纠正预防措施)模板
- 2023版评审准则和CNAS对照表
- CATIA CAA 二次开发详细教程(11) 程序的发布
- 分布式光伏发电项目可行性分析报告(方案)讲解演示模板ppt课件-图文
- 高空作业安全刷漆施工方案
- 医疗康养项目运营方案
评论
0/150
提交评论