文本朗读器的设计与制作

文本朗读器的设计与制作
2010年07月29日
  文本朗读器的设计与制作
  声音是携带信息的极其重要的媒体,是多媒体技术研究的一个重要的内容。而声音又包括人的话音、乐器声、动物发出的声音、及其产生的声音以及自然界声音。本实验设计一个文本朗读器,使计算机可以把文本转化为语音,即把文本内容朗读出来。这种技术有广泛的应用前景,比如IVR(Interactive Voice Response),电子政务,语音短信,以及计算机软件的语音交互。声音、图像、视频如果能够出现在软件的界面上,定为软件增色不少,增加界面的友好性。不少软件设计者花了很多时间在用户界面希望能做成更友好的界面,但未见有很大的改善。在软件编程中,要把界面做得更友好,声音是一种吸引用户的方式,特别是计算机能够根据文字朗读发声的程序。
  文本朗读器,又称文语转换(TTS: Text-To-Speech)系统,是语音合成技术的一个重要应用,其主要功能是把输入计算机的文本文件,通过扬声器朗读出来。一定的软硬件转换后由计算机或其他语音系统输出语音,并尽量使合成的语音有较高的可理解度和自然度。本实验通过可视化的编程语言,调用Microsoft公司开发出的语音合成引擎(TTS Engine),制作一个同时支持中英文的文语转换软件。
  一、 实验目的:
  通过本实验,能够学会利用Microsoft Visual C++和Visual Basic两种高级语言编辑环境进行文本朗读器的设计与制作,并且能够理解语音在计算机中的表示方法以及计算机中文本转化为语音的基本原理。
  二、 实验要求
  1.硬件基本配置:
  Intel Pentinum 级处理器;
  256 M内存或更大;
  VGA或更高分辨率显示器;
  16位或更好的声卡和扬声器。
  2.软件要求:
  操作系统,Windows XP 或Windows 2000;
  声卡、显卡驱动程序;
  TTS引擎语音包。
  3.实验学时:2小时。
  4.熟悉掌握实验预备知识,能够理解TTS、SpeechAPI 、SpeechSDK等概念。
  5.按照实验步骤认真完成实验,写出实验报告。
  三、 实验预备知识
  1. 语音合成技术简介
  1.1语音编码的特性
  声音在计算机中以数字的形式存储,通过声音数字化的编码之后,声音就可以以文件的形式存储在计算机中。声音数字化包括采样和量化,如图1-1所示。
  图1-1 声音的采样和量化
  语音波形有自己的特性,了解这些特性对声音数据的压缩编码、声音的识别、文本语音的转换都有很重要的意义。
  当肺部中的空气沿着声道通过声门发出时,就产生了话音,压缩空气根据声门激励声道滤波器。根据激励方式不同,发出的话音分成三种类型:
  ①浊音 (voiced sounds)
  浊音是一种准周期脉冲激励所发出的声音,这种准周期脉冲是在声门打开然后关闭时中断肺部到声道的气流所产生的脉冲,浊音表现在音节上有高度的周期性。
  ②清音(unvoiced sounds)
  清音是由不稳定的气流激励所产生的,这种气流是在声门处在打开状态下强制空气在声道里高速收缩产生的。
  ③爆破音(plosive sounds)
  爆破音是在声道关闭之后产生的压缩空气然后突然打开声道所发出的声音。
  虽然各种各样的话音都有可能产生,但是声道的形状和激励方式的变化相对较慢,因此话音在短时间周期里可以被认为是准定态的,也就是基本不变的,这是由于声门的准周期性的震动和声道的谐振所引起的。话音编码器就是企图揭示这种周期性,目的是为了减少数据率而又尽可能不牺牲声音的质量。
  通常把已有的话音编码器分成以下三种类型:波形编译码器,音源编译码器,混合编译码器。一般来说,波形编译码器的话音质量高,但数据率也很高;音源编译码器的数据率很低,产生的合成话音的音质有待提高;混合编译码器使用音源编译码技术和波形编译码技术,数据率和音质介于它们之间。图1-2表示了这三种编译码器的音质与数据率
  图1-2 普通编译码器的音质与数据率
  1.2语音合成技术的基本原理
  TTS是Text To Speech的缩写,也成为Speech Synthesis 即语音合成,语音合成技术是把文本文件通过一定的软硬件转换后由计算机或其他语音系统输出语音,并尽量使合成的语音有较高的可理解度和自然度。这个过程的主要工作是经输入的文本按字或词分解为音素,并且对文本中的数字、货币单位、单词变形以及标点等要处理的符号进行分析,以及将音素生成数字音频,然后用扬声器播放出来或者存为声音文件以后用多媒体软件播放。这一技术在人机对话、电话咨询、自动播音、助讲助读、语音教学等方面有着广阔的应用前景。
  国内外对语音合成技术的研究有几十年的历史,有了一些成熟的系统被研发出来。“微软”、“IBM”、“Motorola”等大公司,投入了大量的物力财力进行语音合成技术的研究,陆续出现了英语、日语、汉语、西班牙语等语种的TTS商品。例如,微软公司开发的TTS引擎以及SapiSDK语音应用开发工具包,对语音合成技术提供了强有力的支持,本实验也是在计算机中,以微软的语音合成技术为基础,制作一个会发音的文语转换软件。
  语音合成技术的实现依赖于各种规则,包括语义学规则,词汇规则,语音学规则。它首先接受键盘或者文件按照一定格式所输入的文本信息,然后按照所给定的语言学规则决定各字的发音基元序列以及基元组合时的韵律特性,从而决定了为合成整个文本所需要的言语码;在用这些代码控制机器在语音库中取出相应得语音参数,进行合成运算,得到语音输出。
  一个成功的语音合成系统应该包括文本分析、合成语音以及韵律控制模块,最终输出音质清晰,自然流畅的语音。其原理如图1-3所示。
  语音数据库
  韵律控制
  文本输入
  文本分析
  合成语音
  语音输出
  图1-3 语音合成系统框架
  实现TTS的核心技术是非常复杂的,不是一般开发人员所能完成的,但是有了诸如微软公司开发的TTS引擎这样工具的帮助,只需要在应用程序中加入一些命令和操作,我们就可以创建具有TTS功能的应用程序。
  2.TTS简介
   2.1  TTS概述  
  如前所述,TTS(Text-To-Speech)是微软公司出品的一套文字朗读引擎,它是基于COM/DCOM技术之上的一种能够将文本内容转化为语音的工具。利用它可以实现文本内容的流畅朗读。因为TTS技术是建立在阅读规则上的语音合成技术,并不是将单词或者文字一个一个机械地进行朗读,因此在语气的转折和单词的连接上非常自然,问句和祈使句的升降调也能够表现出来。此外,它还可以由使用者自己设定男女发音、调节音量和朗读速度。
  微软的TTS引擎是免费提供给用户的,TTS引擎所需要的Microsoft Text to Speech Engine与Microsoft Speech API软件(文件名分别为mstts.exe与spchapi.exe)都可以到微软的站点免费下载(http://www.microsoft.com/speech)。而在微软的Windows 2000和Windows XP操作系统中已经集成了TTS5.0的引擎,无须另行安装。安装完TTS引擎以后,在操作系统的Windows目录下会生成一个Speech子目录。Speech子目录中的Xvoice.dll和Vtxt.dll文件就是TTS控件对应的文件,它们对应的控件的名称分别是:Microsoft Direct Text-to-Speech 和 Microsoft Voice Text。这两种控件的用法、功能以及外表的形式完全一样,我们都把它称为TTS控件,不过这种TTS控件只能对英文字符和阿拉伯数字读音。如果朗读中文,还得安装Speech SDK5.1以及简体中文语言包Language Pack。此时会产生另一个Speech文件夹(C:\Program Files\Common Files\Microsoft Shared\Speech)以及安装路径(C:\Program Files\Microsoft Speech SDK 5.1)。
  Microsoft Speech SDK5.1是微软中国研究院推出的支持中文语音应用程序开发的工具包。它也是采用COM标准开发,底层协议都以COM组件的形式独立于应用程序层。因此,我们在实现语音合成软件的时候,只需考虑系统的功能实现和页面控制,不用考虑复杂的语音技术的实现算法。Microsoft Speech SDK5.1包含与微软Win-32兼容的语音应用程序编程接口Speech API(SAPI),SDK包括微软连续语音识别引擎(Microsoft continuous speech recognition engine)和微软串联语音合成引擎(Microsoft concatenated speech synthesis engine(也称TTS引擎))。SR(Speech Recongnition)就是语音识别,是一种令人振奋的技术,但由于目前语音识别技术准确度和识别速度不太理想,还未达到广泛应用的要求。SS(Speech Synthesis)就是语音合成,通过它可以很容易地建立功能强大的文本语音程序,实现文本的朗读功能。可以使用Windows的编程语言来开发具有语音识别或语音合成功能的应用软件。Speech API结构在应用程序和语音引擎之间,提供了一系列的接口,它本身并不能做任何事情,因此利用API编写的程序需要语音引擎的支持才能运行。它们之间的关系如图1-4所示,DDI(Device Driver Interface)。
  图1-4 应用程序调用语音引擎
  安装Microsoft Speech SDK5.1再安装Microsoft Speech language pack (简体中文语言包),这时你的计算机就具有中英文语音能力了。安装好之后,电脑上也同时安装好了语音编程接口SAPI。
  SAPI包括以下一些高级组件对象(接口)。
  ①Voice Commands API: 功能是对应用程序进行控制,一般在语音识别系统,识别了一个命令后,会调用此接口使某个应用程序完成一定的功能,如果你的程序想使用语音控制功能就必须使用此组对象。
  ②Voice Dictation API(API for Speech Recongnition): 功能是进行听写输入,即语音识别。
  ③Voice Text API(API for Text-To-Speech):此组对象完成从文字到语音的转换功能,即语音合成,本次实验会用到此对象。
  ④Voice Telephone API: 它把语音识别和语音合成综合利用到了电话系统上,利用此对象可以建立一个电话应答系统,甚至可以通过电话控制你的计算机。
  ⑤Audio Objects API:主要封装了计算机的发音系统。
  当应用程序需要发声的时候,就调用TTS引擎以及Microsoft Speech SDK进行语音合成,将文本处理后通过扬声器用近似于人的声音“读”出来,通常还可以对语音引擎进行设置来改变“说话”的速度、声音频率、声音大小,还能模拟口形、唇形和舌位的变化对声音的影响,这些设置通过改变属性和方法即能够实现。
  下面是对语音合成的核心类,以及属性和方法的介绍:
  SpVoice 是支持语音合成(TTS)的核心类。通过SpVoice对象调用TTS引擎,从而实现朗读功能。语音应用程序可以创建任意多个SpVoice对象,彼此之间独立但又有相互联系。SpVoice类常用的属性方法介绍:
  属性:
  ①voice:表示发音类型,相当于进行朗读的人,包括Microsoft simplified Chinese、 Microsoft Mary、 Microsoft mike、 Microsoft sam 四种。
  ②Rate:语音朗读速度,取值范围从-10至+10。
  ③Volume:表示音量大小,取值范围从0到100。
  方法:
  ①speak:完成将文本信息转换成语音并按照指定的参数进行朗读,有Test和Flags两个参数,分别指定朗读的语气内容和语气优先级。
  ②Pause:暂停使用该对象的所有朗读进程。
  ③Resume:恢复该对象所对应的被暂停的朗读进程。
  SpVoice(Event)自动化对象定义了SpVoice对象能够从TTS引擎接受到的消息类型。主要有:StartStream 表示TTS引擎开始朗读文本流;Endstream 表示TTS引擎朗读完文本流。
  2。2 Speech API与COM
  与微软其他的API一样,SAPI是架构在COM(Component Object Model)组件基础之上,用对象的方式提供编程接口。COM是编写Windows程序的基础,比较复杂,所以SAPI编程需要懂得COM编程与使用的原理。另外,在COM组件基础之上微软还提供了ActiveX Control控件(ActiveX控件是以COM组件技术为基础的一种组件控件,可以嵌入到浏览器以及Office中使用),这样就方便我们在网页上使用SAPI的功能,使网页可以发声,用兴趣的同学可以自己制作发声网页。
  四、 文本朗读器的Visual C++实现
  1. 在VC6.0中配置SAPI SDK的两种方法
  一个是在VC6.0环境中进行配置,这样VC6.0中开发的所有的应用程序都可以调用其中的相关文件。另一个是在建立的应用程序中,加入SAPI SDK的动态链接库。这两种方法只能用其中的一种进行配置。
  1.1环境配置
  假设Sapi5.1 SDK安装路径是:C:\Program Files\Microsoft Speech SDK 5.1,那么在建立VC6.0工程之前,必须要进行附加包含路径和附加库路径的设置。
  附加包含路径的设置主要告诉VC工程在哪里可以找到编译程序所需要的SAPI头文件。设置方式如图1-5所示,选择菜单Project-Settings或者按下快捷键Alt+F7弹出设置界面,如图1-5所示,然后在C/C++属性页的Preprocessor分类的“附加包含路径”下输入C:\Program Files\Microsoft Speech SDK 5.1\Include就可以了。
  图1-5 附加包含路径的设置
  附加库路径的设置是告诉VC工程在哪里可以找到链接程序所需要的SAPI lib文件。设置方式如下图1-6 所示,在设置界面的Link属性页的Input分类下的“附加库路径”下输入C:\Program Files\Microsoft Speech SDK 5.1\Lib\i386,在链接时就能找到所需要的Sapi.lib库文件。
  图1-6 附加库路径的设置
  1.2向应用程序中加入动态链接库
  ①新建工程
  选择菜单File―New―Projects―MFC AppWizard(exe)。在Project Name中输入新建工程的名字TTS,勾选Create New Workplace,在Location选项中选择工程存放的位置,本例存放在E:\CD\TTS目录,点击ok,如下图1-7-1。
  图1-7-1 新建工程设置
  在此,勾选Dialogue Based项,表明此工程是基于对话框的项目,如图1-7-2。
  图1-7-2 新建工程设置
  点击下一步,勾选Automation项,如图1-7-3,点击下一步,直到结束。
  图1-7-3 新建工程设置
  ②在程序中导入动态链接库sapi.dll
  选择菜单View―Class Wizard打开MFC ClassWizard设置界面,在Automation选项卡中,点击右边的Add Class按钮,选择From a Type Library。如图1-8-1所示。
  图1-8-1 添加动态链接库Sapi.dll
  打开C:\Programe Files\Common Files\Microsoft Shared\speech文件夹下的动态链接库文件sapi.dll。按住shift选择所有类,如图1-8-2所示,点击ok。这样就可以在ClassView中看到所加入的类。
  图1-8-2 添加动态链接库Sapi.dll
  2. 界面布局设计
  这里实现一个利用Visual C++开发出能够根据文字内容朗读的实例,可以朗读一段文字或者一篇文章。可以选择中文或者英文进行朗读,也可以选择不同类型的人物语音进行朗读,另外还可以改变语音朗读的速度和音量大小。如图1-9所示:
  图1-9 文本朗读器的运行界面
  在窗体界面中,添加10个Button控件,4个Statistic Text控件,3个Edit Box控件,1个Combo Box控件,各控件所占的空间和布局如上图所示。
  2.1各控件的属性设置与功能介绍
  ①窗体
  设置Caption属性:右键单击窗体选择“Properties”在对话框中进行如下设置。
  Caption=“TTS”//把窗体的名称改为TTS
  ② 按钮控件
  ⑴按钮Speak English 和Speak Chinese,用于朗读英语和汉语的发音实例,英语为“Apple”,汉语为“苹果”。用于检测能否正常发音,这两个控件的属性设置如下:
  Button1:ID=”IDC_BUTTON_Speak”;Caption=”Speak English”
  Button2:ID=”IDC_BUTTON_SpeechChs”;Caption=”Speak Chinese”
  ⑵按钮English和Chinese,用于选择发音的语言种类,然后就可以朗读英语或者汉语。其属性设置为:
  Button3:ID=“IDC_BUTTON_Eng”;Caption=“English”
  Button4:ID=“IDC_BUTTON_Chs”;Caption=“Chinese”
  ⑶按钮Read和Stop,用于朗读和停止朗读文本中的内容,其属性设置如下:
  Button5:ID=“IDC_BUTTON_Read”;Caption=“Read”
  Button6:ID=“IDC_BUTTON_Stop”;Caption=“Stop”
  ⑷下面一对“+”“-”按钮,用来改变朗读的速度和音量大小
  Button7:ID=“IDC_BUTTON_RAdd”;Caption=“+”
  Button8:ID=“IDC_BUTTON_RDel”;Caption=“-”
  Button9:ID=“IDC_BUTTON_VAdd”;Caption=“+”
  Button10:ID=“IDC_BUTTON_VDel”;Caption=“-”
  ③ 静态文本控件
  此类控件在程序中,用于显示功能提示文字:
  Statistic Text1:ID=“IDC_STATIC”;Caption=“Input Text:”
  Statistic Text2:ID=“IDC_STATIC”;Caption=“Rate:”
  Statistic Text3:ID=“IDC_STATIC”;Caption=“Volume:”
  Statistic Text4:ID=“IDC_STATIC”;Caption=“Voice:”
  ④ 可编辑的文本框控件
  Edit Box1:ID=”IDC_EDIT_Input” 用于接收朗读的文本
  Edit Box2:ID=“IDC_EDIT_Rate”用于显示朗读的速度大小
  Edit Box3:ID=“IDC_EDIT_Vol”用于显示朗读的音量大小
  ⑤ 复选框控件
  Combo Box:ID=“IDC_COMBO_Voice”,用于显示可以选择的朗读语音类型,注意在设计时要拉大复选框的高度,以便可以显示所用的语音类型描述。
  2.2声明成员变量
  与控件相关的成员变量,在Visual C++中我们可以在对话框中进行声明设置。选择菜单View
Delphi中英文语音朗读程序(控件及源码)调试OK 先安装Microsoft Speech SDK 5.1,这是微软的声音支持控件 前面安装不多做介绍,一步一步安装即可 安装完成后,需要加载Delphi控件 在Delphi IDE中选择菜单Project,Import Type Library—点击按钮Add(C:\Program Files\Common Files\Microsoft Shared\Speech\ sapi.dll)—点击按钮Install-在Install对话框中点击按钮OK—在Confirm对话框中点击按钮Yes—在对话框中点击按钮OK。至此,共19个控件被添加到Delphi组件板ActiveX页上。其中spvoice控件是我们要使用的 Microsoft Speech SDK 5.1下载地址:http://intraweb.5d6d.com/thread-280-1-1.html SpVoice详解 属性 描述 AlertBoundary 取得或设置停顿分界线。 AllowAudioOutputFormatChangesOnNextSet 设置是否允许声音自动调整到合适状态以适应其音频输出。 AudioOutput .取得或设置当前声音使用的的音频输出对象 AudioOutputStream 取得或设置当前声音使用的的音频输出流对象。 EventInterests 取得或设置当前声音返回的事件类型。 Priority 取得或设置声音的优先级。 Rate 取得或设置阅读的速度。 Status 返回一个ISpeechVoiceStatus 对象用于显示当前阅读和事件的状态 SynchronousSpeakTimeout 取得或设置一个时间间隔,用于标识多久未获得一个输出设备后,一个同步的Speak 和SpeakStream将终止,以毫秒计算。 Voice 取得或设置发音对象。 Volume 取得或设置声音的大小 。 方法 描述 DisplayUI 是否在控制面板中展示详细设置。 GetAudioOutputs 返回一个可用的音频输出标记。 GetVoices 返回一个可用的发音对象。 IsUISupported 决定是否能通过控制棉板的音频设置来控制。 Pause 暂停朗读。. Resume 恢复暂停,继续播放。 Skip 在当前输入的文本流中向前或向后跳一定距离再播放。 Speak 阅读一个字符串。 SpeakCompleteEvent 得到一个朗读完毕的时间句柄 SpeakStream 朗读一个文本流或一个声音文件。 WaitUntilDone 阻塞进程,直到声音播放完毕或者超时。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值