微軟Microsoft Speech SDK工具包的推出使得應用程序中實現(xiàn)文本向語音轉換變得很方便。在Authorware中,利用TextToSpeech Class 控件或Speech Xtra即可實現(xiàn)英文或中文的朗讀,但若是兩者混合則難以實現(xiàn)。用英文TTS引擎時無法識別中文,用中文TTS引擎時遇到英文單詞卻是逐個字母朗讀。本文提出了根據(jù)文本類型實時更換中英文TTS引擎的方法,實現(xiàn)中英文混合朗讀的效果良好,方法簡便,具有一定的現(xiàn)實意義。
一、英文或中文朗讀的實現(xiàn)原理
1.安裝Microsoft Speech SDK5.1和TTS中文語言包
Microsoft Speech SDK5.1和TTSLangPack可以到微軟網(wǎng)站下載得到,將其分別安裝到系統(tǒng)中。在安裝語言包時,可以只安裝中文。
2.調(diào)用Speech Xtra插件功能
利用Speech Xtra插件實現(xiàn)中英文朗讀的具體過程為:打開Authorware函數(shù)窗口,在分類列表中選擇Xtra SpeechXtra,如圖1所示。其中控制朗讀的最關鍵的兩個函數(shù)是VoiceSet(VoiceIndex)和VoiceSpeak("StringToSpeak")。
VoiceSet函數(shù)的功能是選擇當前要使用的語音,參數(shù)VoiceIndex為語音索引號,最小索引號為1,最大索引號可以通過函數(shù)VoiceCount()獲得。選用不同的語音索引號,發(fā)音就不一樣,朗讀中文必須選用中文語音引擎Microsoft Simplified Chinese的索引號。安裝了TTS中文語言包后,在Windows控制面板中的語音屬性窗口中可看到系統(tǒng)具有如圖2所示的五種語音。系統(tǒng)中所具有的所有語音可通過Speech Xtra中的VoiceGetAll()函數(shù)獲得,VoiceGetAll()返回描述系統(tǒng)當前語音的屬性列表。列表格式為:[#name:string,#age:string,#gender:string,#index:integer],其中“name”、“age”、“gender”屬性由系統(tǒng)安裝的語音引擎決定(往往表示人名、年齡和制造商),“index”屬性指示當前語音在語音列表中的位置索引。例如:[#name:"Microsoft Mary",#age:"Adult",#gender:"Female",#index:1]。根據(jù)VoiceGetAll()函數(shù)的返回值,我們可以得到每種語音的索引號。根據(jù)索引號,就可以選擇當前要使用的語音。


VoiceSpeak("StringToSpeak")函數(shù)的功能是根據(jù)字符串參數(shù)StringToSpeak的內(nèi)容開始播放語音,并中斷當前正在播放的語音。
通過以上分析,我們只需要根據(jù)朗讀文本的類型(中文或英文),用VoiceSet函數(shù)設置好相應語音,再調(diào)用VoiceSpeak函數(shù)即可實現(xiàn)中文或是英文的朗讀。
二、中英文混合朗讀的實現(xiàn)
要實現(xiàn)中英文混合朗讀關鍵是要動態(tài)分析文本串,判斷即將朗讀的文本類型,并根據(jù)文本類型實時自動轉換語音引擎。實現(xiàn)流程如圖3所示。

1.讀取文本串中的單詞并依據(jù)其類型選擇語音引擎
對中英文混合字符串,首先要讀取文本串中的每一個單詞,再判斷該單詞的類型是中文或是英文。Authorware中的字符類系統(tǒng)函數(shù)WordCount("string")可獲得文本串string的單詞個數(shù)(連續(xù)的中文字符算一個單詞)。如文本串“熟悉JavaScript的Authorware設計人員現(xiàn)在有了一個嶄新的選擇”有5個單詞,分別是“熟悉”、“JavaScript”、“的”、“Authorware”和“設計人員現(xiàn)在有了一個嶄新的選擇”,這種單詞的特殊劃分方法正是我們所期待的。系統(tǒng)函數(shù)GetWor