1内容摘要:与机器进行语音交流,让机器发出需要的声音,这是人们长期以来梦寐以求的事情,文语转换系统就是让机器通过识别和理解文章段落把文字信号转变为相应的声音信号的高技术。文娱转换是一门交叉学科,近二十年来,文语转换技术取得了更加显著的进步,开始从实验室走向市场。热门娱记,未来10年,文语转换系统将进入工业、家电、通信、汽车电子、医疗、家庭服务、消费电子产品等各个领域。很多专家都认为文娱转换技术是2000至2010年间信息技术领域十大重要的科技发展技术之一。本文介绍了利用微软的MicrosoftSpeechSDK5.1提供的TTS(text-to-speech)技术开发具有语音朗读功能的应用程序关键词:文语转换MSSDKCOMAbstract:Andmachineryforvoicecommunication,sothatthemachineneedsavoice,thisiswhatpeoplehavelongdreamedof,text-to-speechsystemistoallowmachinestoidentifyandunderstandtheparagraphsofthearticletextsignalintothevoicesignalsinthecorrespondinghigh-tech.Civicconversionisacross-discipline,thelast20years,text-to-speechconversiontechnologyhavemademoresignificantprogress,startingfromthelaboratorytothemarket.TopYuji,thenext10years,text-to-speechsystemwillentertheindustrial,householdappliances,telecommunications,automotiveelectronics,medicalcare,familyservices,consumerelectronicsandotherfields.Manyexpertsagreethatculturalconversiontechnologyisthe2000-2010fieldofinformationtechnologyamongthe10importantscientificandtechnologicaldevelopmentofthetechnology.thisarticleintroducesHowtoCreatespeech-enableedApllicationsusetheMicrosoftSpeechSDK5.1Keywords:Test-To-SpeechMSSDKCOM21绪论1.1.TTS技术概述上世纪90年代中期以来,随着个人计算机的硬件和软件功能越来越强,和现代语音技术的发展,以前在科幻电影中才能看到的会说话的电脑已经成为现实.而TTS技术正是电脑能够说话的关键技术之一.TTS是text-to-speech的缩写,英文也称SpeechSynthesis即语音合成.语音合成就是一个将文本转化为语音输出的过程,这个过程的工作主要是将输入的文本按字或词分解为音素,并且对文本中的数字、货币单位、单词变形以及标点等要特殊处理的符号进行分析,以及将音素生成数字音频然后用扬声器播放出来或者存为声音文件以后用多媒体软件播放.图1形象地描述了这个过程.图1.text-to-speech实现过程当应用程序需要发声的时候就调用语音合成引擎(SPEECHSYNTHESISENGINE)进行语言合成,将文本处理后通过扬声器用近似于人的声音“读”出来,语音应用程序“ONEOCLOCK”应用程序把语言以纯文本的形式输出语音合成引擎WAHNWOKLAOKD语音合成引擎把文本转换为音素和韵律符号并生成连续的数字音频声卡—扬声器硬件部分声卡将数字声音转换为声音信号并由扬声器播放出来“ONEOCLOCK”3通常还可以通过改变对语音引擎的设置改变“说话”的速度,声音频率(低沉或者尖锐),声音大小,还能模拟口形、唇形和舌位的变化对声音的影响.面前计算机通过语音合成发出的声音效果听起来就象是录音磁带发出的声音.与一些用预先录制的声音文件实现发声的应用程序相比,TTS的发声引擎只有几兆大小,不需要大量的声音文件支持,因此可以节省很大的储存空间,并且可以朗读预先未知的任何语句.现在已经有许多应用软件应用TTS技术实现语音功能,例如一些播音软件可以用来读小说或作校对工作,还可以朗读电子邮件,一些电子词典可以读出单词,还可以用于查询中心自动播放服务信息等.1.2关于MicrosoftSpeechSDK实现TTS的核心技术本身是非常复杂的,不是一般开发人员所能完成的,但是有了MicrosoftSpeechSDK这样的工具的帮助,只需要在应用程序中加入一些不太复杂的命令和操作,我们就可以创建具有TTS功能的应用程序了.国内外有许多高科技公司和科研机构致力于TTS技术的开发和研究,如微软公司、IBM公司以及国内的科大迅飞公司都有较成熟的语音产品,并且任何人都可以获得微软公司免费提供的语音软件开发工具:MicrosoftSpeechSDK.目前的MicrosoftSpeechSDK已经有4.0,5.1等几个版本,最近还推出了适合网络语音程序开发的TheMicrosoftSpeechApplicationSDK的测试版,这些SDK主要包括语音应用程序编程接口SAPI(SAPI使我们象使用windowsAPI一样方便地在程序中使用语音功能)和微软语音识别引擎和微软语音合成引擎,还提供了进行应用设计的例子.MicrosoftSpeechSDK5.1提供了英文和中文两种TTS引擎,即可以用它开发朗读中文和英文的应用程序,非常适合中国的开发者使用.利用这些SDK,开发人员可以很容易地把TTS技术集成到应用软件中,并可以自由发布.另外MicrosoftSpeechSDK还提供了详细的文档帮助开发者进行程序开发.41.3文章结构本文分2大副本。第2章主要介绍了MSSDK的使用方法和实现过程,并安排了一个小小的例子,第3章则是对TTS系统的改进,使之更加接近真实语境语调。52.MSSDK的使用理论2.1实现TTS的条件准备利用MicrosoftSpeechSDK进行TTS语音应用程序开发前要作一些软件和硬件的准备:1)、去下载MicrosoftSpeechSDK5.1或其它版本SDK,并且安装到自己的机器上.2)、MicrosoftVC++6.0,servicepack3或更新的版本.3)、声卡和喇叭4)、要实现该SDK的全部功能,则去下载新的PlatformSDK.另外要注意的是SAPI5.1不支持windows95.下载说明:(1)如果要下载例子程序,说明文档,SAPI以及用于开发的美国英语语音引擎,需要下载SpeechSDK51.exe,大约68M。(2)如果想要使用简体中文和日文的语音引擎,需要下载SpeechSDK51LangPack.exe。大约82M。下载完毕后,首先安装SpeechSDK51.exe,然后安装中文语言补丁包SpeechSDK51LangPack,然后展开msttss22l,自动将所需dll安装到系统目录。2.2在应用程序中实现TTS功能微软SAPI5.1实现text-to-speech的核心是对COM接口IspVoice的应用,所以应用TTS技术最好要了解一下COM编程技术,但是即使从来没有用过COM编程,只要按照SDK的示例,也可以顺利的实现TTS的功能.6SAPI的API接口封装得很好,我们不需要了解任何发声引擎底层的工作细节.例如一旦在程序中创建了一个IspVoice对象,就可以通过调用ISpVoice::Speak实现文本朗读,通过调用ISpVoice::SetRate实现对朗读速度的控制,以及通过调用ISpVoice::SetVoice实现对朗读声音的不同人物或语言控制(男声/女生,中文/英文)等.事实上掌握对这个接口的应用就可以实现大多数TTS的应用.SAPI全称TheMicrosoftSpeechAPI.相关的SR和SS引擎位于SpeechSDK开发包中。这个语音引擎支持多种语言的识别和朗读,包括英文、中文、日文等。SAPI包括以下组件对象(接口):(1)VoiceCommandsAPI。对应用程序进行控制,一般用于语音识别系统中。识别某个命令后,会调用相关接口是应用程序完成对应的功能。如果程序想实现语音控制,必须使用此组对象。(2)VoiceDictationAPI。听写输入,即语音识别接口。(3)VoiceTextAPI。完成从文字到语音的转换,即语音合成。(4)VoiceTelephoneAPI。语音识别和语音合成综合运用到电话系统之上,利用此接口可以建立一个电话应答系统,甚至可以通过电话控制计算机。(5)AudioObjectsAPI。封装了计算机发音系统。SAPI是架构在COM基础上的,微软还提供了ActiveX控件,所以不仅可用于一般的windows程序,还可以用于网页、VBA甚至EXCEL的图表中。在下面介绍的程序中,用VC++6.0实现了Text-to-Speech的应用.(1)创建一个工程建立一个工程,Projects选项卡中选择MFCAppWizard(exe);下一步中选择Dialogbased类型.(2)设置SAPI路径7应用TTS必须用到头文件sapi.h和sapi.lib,为了能编译通过必须设置SAPI路径:a.、在选中tools菜单中的option子项.b.、选中Directories选项卡.c.、选中Showdirectriesfor列表框中选中includefiles项,并在Directories中添加sapi头文件路径:例如:C:\ProgramFiles\MicrosoftSpeechSDK5.1\Include.d.、选中Showdirectriesfor列表框中选中Libraryfiles项,并在Directories中添加sapiLIB文件路径:例如:C:\ProgramFiles\MicrosoftSpeechSDK5.1\Lib\i386.(3)设计程序界面添加如图所示的编辑框和命令按钮.图2程序界面(4)添加代码双击speak按钮,添加朗读代码:voidCExe1Dlg::Onspeak()8{UpdateData();ISpVoice*pVoice=NULL;//1)初始化COMif(FAILED(CoInitialize(NULL))){AfxMessageBox(ErrortointiliazeCOM);return;}[1]//2)初始化SAPIHRESULThr=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;}9//4)与CoInitialize(NULL)成对使用,释放COMCoUninitialize();}[1]注:m_mytext是编辑框的变量名.需要定义它。以上的代码中主要做了几件TTS最基本的事情:1)、初始化COM,因为SAPI是基于COM的应用,使用之前必须首先初始化COM.2)、创建voice对象,即一个COM对象.3)、实现朗读,即调用speak方法.另外必须把头文件sapi.h加到前面:#includesapi.h编译通过后