论文部分内容阅读
微软Microsoft Speech SDK工具包的推出使得应用程序中实现文本向语音转换变得很方便。在Authorware中,利用TextToSpeech Class 控件或Speech Xtra即可实现英文或中文的朗读,但若是两者混合则难以实现。用英文TTS引擎时无法识别中文,用中文TTS引擎时遇到英文单词却是逐个字母朗读。本文提出了根据文本类型实时更换中英文TTS引擎的方法,实现中英文混合朗读的效果良好,方法简便,具有一定的现实意义。
一、英文或中文朗读的实现原理
1.安装Microsoft Speech SDK5.1和TTS中文语言包
Microsoft Speech SDK5.1和TTSLangPack可以到微软网站下载得到,将其分别安装到系统中。在安装语言包时,可以只安装中文。
2.调用Speech Xtra插件功能
利用Speech Xtra插件实现中英文朗读的具体过程为:打开Authorware函数窗口,在分类列表中选择Xtra SpeechXtra,如图1所示。其中控制朗读的最关键的两个函数是VoiceSet(VoiceIndex)和VoiceSpeak("StringToSpeak")。
VoiceSet函数的功能是选择当前要使用的语音,参数VoiceIndex为语音索引号,最小索引号为1,最大索引号可以通过函数VoiceCount()获得。选用不同的语音索引号,发音就不一样,朗读中文必须选用中文语音引擎Microsoft Simplified Chinese的索引号。安装了TTS中文语言包后,在Windows控制面板中的语音属性窗口中可看到系统具有如图2所示的五种语音。系统中所具有的所有语音可通过Speech Xtra中的VoiceGetAll()函数获得,VoiceGetAll()返回描述系统当前语音的属性列表。列表格式为:[#name:string,#age:string,#gender:string,#index:integer],其中“name”、“age”、“gender”属性由系统安装的语音引擎决定(往往表示人名、年龄和制造商),“index”属性指示当前语音在语音列表中的位置索引。例如:[#name:"Microsoft Mary",#age:"Adult",#gender:"Female",#index:1]。根据VoiceGetAll()函数的返回值,我们可以得到每种语音的索引号。根据索引号,就可以选择当前要使用的语音。
VoiceSpeak("StringToSpeak")函数的功能是根据字符串参数StringToSpeak的内容开始播放语音,并中断当前正在播放的语音。
通过以上分析,我们只需要根据朗读文本的类型(中文或英文),用VoiceSet函数设置好相应语音,再调用VoiceSpeak函数即可实现中文或是英文的朗读。
二、中英文混合朗读的实现
要实现中英文混合朗读关键是要动态分析文本串,判断即将朗读的文本类型,并根据文本类型实时自动转换语音引擎。实现流程如图3所示。
1.读取文本串中的单词并依据其类型选择语音引擎
对中英文混合字符串,首先要读取文本串中的每一个单词,再判断该单词的类型是中文或是英文。Authorware中的字符类系统函数WordCount("string")可获得文本串string的单词个数(连续的中文字符算一个单词)。如文本串“熟悉JavaScript的Authorware设计人员现在有了一个崭新的选择”有5个单词,分别是“熟悉”、“JavaScript”、“的”、“Authorware”和“设计人员现在有了一个崭新的选择”,这种单词的特殊划分方法正是我们所期待的。系统函数GetWord(n, "string")可获得文本串中的第n个单词。利用这两个函数,读取单词并依据其类型设置相应语音引擎的关键代码如下:
i:=i 1//指向下一个单词
if i <= WordCount(str) then//没到文本末尾,参数str为要朗读的文本串变量
if (GetWord(i,str)>"A")
一、英文或中文朗读的实现原理
1.安装Microsoft Speech SDK5.1和TTS中文语言包
Microsoft Speech SDK5.1和TTSLangPack可以到微软网站下载得到,将其分别安装到系统中。在安装语言包时,可以只安装中文。
2.调用Speech Xtra插件功能
利用Speech Xtra插件实现中英文朗读的具体过程为:打开Authorware函数窗口,在分类列表中选择Xtra SpeechXtra,如图1所示。其中控制朗读的最关键的两个函数是VoiceSet(VoiceIndex)和VoiceSpeak("StringToSpeak")。
VoiceSet函数的功能是选择当前要使用的语音,参数VoiceIndex为语音索引号,最小索引号为1,最大索引号可以通过函数VoiceCount()获得。选用不同的语音索引号,发音就不一样,朗读中文必须选用中文语音引擎Microsoft Simplified Chinese的索引号。安装了TTS中文语言包后,在Windows控制面板中的语音属性窗口中可看到系统具有如图2所示的五种语音。系统中所具有的所有语音可通过Speech Xtra中的VoiceGetAll()函数获得,VoiceGetAll()返回描述系统当前语音的属性列表。列表格式为:[#name:string,#age:string,#gender:string,#index:integer],其中“name”、“age”、“gender”属性由系统安装的语音引擎决定(往往表示人名、年龄和制造商),“index”属性指示当前语音在语音列表中的位置索引。例如:[#name:"Microsoft Mary",#age:"Adult",#gender:"Female",#index:1]。根据VoiceGetAll()函数的返回值,我们可以得到每种语音的索引号。根据索引号,就可以选择当前要使用的语音。


VoiceSpeak("StringToSpeak")函数的功能是根据字符串参数StringToSpeak的内容开始播放语音,并中断当前正在播放的语音。
通过以上分析,我们只需要根据朗读文本的类型(中文或英文),用VoiceSet函数设置好相应语音,再调用VoiceSpeak函数即可实现中文或是英文的朗读。
二、中英文混合朗读的实现
要实现中英文混合朗读关键是要动态分析文本串,判断即将朗读的文本类型,并根据文本类型实时自动转换语音引擎。实现流程如图3所示。

1.读取文本串中的单词并依据其类型选择语音引擎
对中英文混合字符串,首先要读取文本串中的每一个单词,再判断该单词的类型是中文或是英文。Authorware中的字符类系统函数WordCount("string")可获得文本串string的单词个数(连续的中文字符算一个单词)。如文本串“熟悉JavaScript的Authorware设计人员现在有了一个崭新的选择”有5个单词,分别是“熟悉”、“JavaScript”、“的”、“Authorware”和“设计人员现在有了一个崭新的选择”,这种单词的特殊划分方法正是我们所期待的。系统函数GetWord(n, "string")可获得文本串中的第n个单词。利用这两个函数,读取单词并依据其类型设置相应语音引擎的关键代码如下:
i:=i 1//指向下一个单词
if i <= WordCount(str) then//没到文本末尾,参数str为要朗读的文本串变量
if (GetWord(i,str)>"A")