文本朗读器的设计与制作
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
发表评论
-
Programming Applications for Microsoft Windows - 第七部分 附录
2012-01-20 10:14 698Programming Applications for Mi ... -
windows线程学习
2012-01-20 10:14 555windows线程学习 2010年09月01日 线程(t ... -
WINCE及MOBILE常用代码(转)
2012-01-20 10:14 623WINCE及MOBILE常用代码(转) 2010年06月05 ... -
一个对Winsock完成端口模型封装的类
2012-01-20 10:13 539一个对Winsock完成端口模型封装的类 2011年01月0 ... -
MFC架构之CWinThread类
2012-01-20 10:13 736MFC架构之CWinThread类 2010 ... -
MATLAB安装问题解决方案大集锦
2012-01-19 15:14 816MATLAB安装问题解决方案大集锦 2011年05月08日 ... -
ubuntu编译安装php5 mysql nginx
2012-01-19 15:14 660ubuntu编译安装php5 mysql nginx 201 ... -
MySql安装、优化和安全配置(转)
2012-01-19 15:14 490MySql安装、优化和安全配置(转) 2010年11月21日 ... -
Grub4dos典型菜单文件示范解读
2012-01-19 15:14 836Grub4dos典型菜单文件示 ... -
Grub4dos典型菜单文件示范解读[转贴]
2012-01-19 15:14 510Grub4dos典型菜单文件示范解读[转贴] 2011年07 ... -
C段错误总结
2012-01-17 05:01 461C段错误总结 2012年01月07日 最近一段时间在li ... -
了解学习
2012-01-17 05:01 434了解学习 2011年06月30日 前言 石头说数据同步很 ... -
VB9
2012-01-17 05:01 699VB9 2011年05月11日 习题9答案 9-1 ... -
Ajax优于JSF的原因
2012-01-16 03:52 556Ajax优于JSF的原因 2009年 ... -
AS3 框架 不断更新
2012-01-16 03:52 484AS3 框架 不断更新 2011 ... -
RIA
2012-01-16 03:52 391RIA 2010年04月12日 Ja ... -
如何让自己的网站在百度中注册
2012-01-16 03:52 411如何让自己的网站在百度中注册 2009年11月04日 新 ... -
46个Flex和actionscript3开源项目
2012-01-16 03:52 34646个Flex和actionscript3开源项目 2011 ...
相关推荐
个可以语音(国语女声)朗读文本(.TXT)内容的小巧实用软件。软件完全真人发音,语调自然,接近真人朗读,如果哪位朋友经常在网上看书、学习,眼睛累了,可以使用本软件来用耳朵获取信息,以减轻眼睛疲劳。 软件...
屏幕文本朗读器是一款用于屏幕文本朗读和屏幕文本抓取的软件,它借助鼠标来朗读和抓取屏幕中任意地方的文本(比如网页、软件界面、文本编辑器等中的文本),实现文字的即点即读,即选即读。用户只需要将鼠标悬停于需要...
文本语音朗读器,可以朗读,可以转换为Mp3文件
屏幕文本朗读器是一款用于屏幕文本朗读和屏幕文本抓取的软件,它借助鼠标来朗读和抓取屏幕中任意地方的文本(比如网页、软件界面、文本编辑器等中的文本),实现文字的即点即读,即选即读。用户只需要将鼠标悬停于需要...
文本朗读器
C# 文本朗读代码,能够将输入的文字朗读出来,已封装成一个类文件,方便大家使用。
易语言文本朗读源码,文本朗读
vs平台下开发的一个基于tts的文本发音小软件,做的有些简单,里面包含了windows用于发音的dll文件
C#文本语音朗读,调用本地语音包,朗读文本。XP系统需要下载语音包,程序中有下载链接。
自己写的文本语音朗读器,基于命令行,可以自动朗读指定文本。需要.net3.0及语音库的支持。使用方法:DosSpeaker 这是一段测试代码
delphi 自制语音文本朗读程序。。支持快进快退。。鼠标可以拖动进度条进行快进,快退。。和音乐视频播放器操作类似,界面不是很美观,但很实用。。(不是源码)
在你的软件中加入文本朗读功能,支持中文,英文朗读,免费提供多种语音库 能将文本变成语音的软件开发包,这种技术被称为Text to Speech(TTS),能用不同的语音来朗读文本。支持简体中文语音包,英文语音包,分别...
系统开发实例精粹>的源码 appendix014---文本朗读器
c#朗读文本 c#朗读文本 c#朗读文本 c#朗读文本c#朗读文本
调用安卓自带文本朗读.rar,太多无法一一验证是否可用,程序如果跑不起来需要自调,部分代码功能进行参考学习。
易语言文本高亮朗读源码,文本高亮朗读,采样率列表子程序,回调函数,重新列举语音库,设置朗读属性子程序,列举语音库,设置语音库,输出wav,方法1,文本到语音,设置语速,设置声音大小,停止,继续,暂停
Balabolka【文本朗读器】是文本到语音(TTS)的计划。全部电脑声音系统上安装可供Balabolka。屏幕上的文字可以被保存为一个WAV,MP3播放,OGG或者WMA文件。该软件可以读取剪贴板的内容,查看来自商务部,RTF格式,...