張紅斌,李廣麗
(華東交通大學(xué) 1.軟件學(xué)院;2.信息工程學(xué)院,江西 南昌 330013)
計算機輔助學(xué)習(xí)已經(jīng)成為時下流行的學(xué)習(xí)模式,英語的學(xué)習(xí)也不例外。例如,人們在學(xué)習(xí)英語或閱讀英語文章時常會遇到生詞,很多人會立即求助于詞庫軟件進行單詞查詢。目前流行的詞庫軟件多為單機版本,如谷歌金山詞霸、靈格斯翻譯等,它們的使用具有一定的局限性,即無法面向Web進行單詞查詢、語音表達、口語糾正以及學(xué)習(xí)資源共享等。故本文敘述了在Web環(huán)境下如何構(gòu)造1個英語自助學(xué)習(xí)軟件系統(tǒng)。
英語學(xué)習(xí)強調(diào)“聽”“說”“寫”3個方面的技能訓(xùn)練[1],中國學(xué)生的英語閱讀能力普遍較好,但由于缺乏語言環(huán)境,他們的聽力和口語能力卻有待提高。因此,如何利用Web網(wǎng)站技術(shù)、多媒體技術(shù)、語音識別技術(shù)完成1個可以面向Web用戶的開放式英語學(xué)習(xí)系統(tǒng),并側(cè)重于聽力及口語訓(xùn)練,對于提高中國學(xué)生的英語綜合素質(zhì)是1件十分有意義的事情。
英語自助學(xué)習(xí)系統(tǒng)的核心功能是聽力訓(xùn)練和口語訓(xùn)練,實現(xiàn)的關(guān)鍵技術(shù)是文本語音轉(zhuǎn)換技術(shù)(Text To Speech,TTS)和語音識別技術(shù)(Speech Recognition,SR)。文語轉(zhuǎn)移TTS的主要功能是將計算機中任意出現(xiàn)的文字轉(zhuǎn)換成自然流暢的語音輸出[2]。運用TTS技術(shù)可實現(xiàn)英文單詞、詞組、句子及文章的在線朗讀,指引學(xué)生完成基于Web的英語聽力訓(xùn)練。運用SR技術(shù)則可實現(xiàn)學(xué)生所朗讀單詞、句子的實時語音識別,指引學(xué)生完成基于Web的英語口語訓(xùn)練。目前,國內(nèi)著名網(wǎng)站nciku已經(jīng)實現(xiàn)了基于Web的英文文本語音轉(zhuǎn)換,但卻無法完成英語口語的實時識別及診斷。
微軟開發(fā)了1套基于Windows環(huán)境的語音編程專用組件Microsoft Speech SDK5.1,該組件包含了語音識別(Speech Recognition)和語音合成(Speech Synthesis,SS)兩大技術(shù)[1]。它可以為我們提供清晰和標(biāo)準(zhǔn)的美式英語發(fā)音和標(biāo)準(zhǔn)普通話的簡體中文男生發(fā)音[3]。該組件包是實現(xiàn)基于Web的英語自助學(xué)習(xí)系統(tǒng)的重要基礎(chǔ)。
在Speech SDK中TTS功能的工作原理如圖1所示。語音應(yīng)用程序編程接口SAPI是介于語音應(yīng)用程序和語音引擎之間的中間層[4]。其中SpVoice對象需要實現(xiàn)ISpVoice和ISpTTSEngineSite兩個接口[2]。IS-pVoice是應(yīng)用程序能正常操作TTS功能的接口,它是控制文本語音轉(zhuǎn)換的關(guān)鍵。ISpTTSEngineSite用來寫音頻數(shù)據(jù)和消息隊列事件。TTS Engine實現(xiàn)ISpTTSEngine和ISpObjectWithToken兩個接口。ISpTTSEngine是SAPI調(diào)用TTS Engine的接口[5],而ISpObjectWithToken使得SAPI可以創(chuàng)建和初始化TTS Engine。如果用戶軟件存在界面(User Interface)則必須實現(xiàn)ISpTokenUI接口[1]。SAPI在應(yīng)用程序和語音引擎之間提供了1個高級別的接口。SAPI實現(xiàn)了所有必需的對各種語音引擎的實時控制和管理等低級別細節(jié)。SAPI還支持對SpVoiceObject以ActiveX控件的形式進行調(diào)用,故在基于Web的英語自助學(xué)習(xí)系統(tǒng)中,當(dāng)網(wǎng)頁加載時,同時加載SpVoiceObject,就可完成基于Web的文本語音轉(zhuǎn)換功能。

圖1 在Speech SDK中的TTS原理
ISpRecoContext是語音識別的主接口,它是語音程序接收被請求的語音識別事件通知的媒介[5]。創(chuàng)建1個共享的ISpRecoContext接口后,即可完成語音識別的環(huán)境設(shè)置,而要創(chuàng)建該接口則必須先創(chuàng)建1個SAPI默認的音頻輸入流,然后設(shè)置語音識別事件通知,其中最重要的事件通知是SPEI-RECOGNITION。最后,創(chuàng)建應(yīng)用程序,加載并激活1個ISpRecoGrammar,即指定被識別的語音規(guī)則。
要實現(xiàn)基于Web的語音識別,其轉(zhuǎn)換引擎必須以ActiveX的方式嵌入到網(wǎng)頁中[6]。加拿大的Geoff Bailey基于Speech SDK 5.1和ATL技術(shù)封裝了1個可完成語音識別的ActiveX控件WebVoiceCtl,該控件可以嵌入到網(wǎng)頁中,接受用戶的語音輸入,然后根據(jù)Grammar完成對指定單詞、句子的識別,即識別滿足正確發(fā)音標(biāo)準(zhǔn)的英語語音[7]。
WebVoicceCtl的語音識別工作流程如圖2所示。待識別的內(nèi)容存儲在1個XML文件WebVoice.xml中,程序人員可以對其進行編程把需要識別的單詞、句子等裝載進去,為語音識別做好準(zhǔn)備。識別的語音規(guī)則被存儲在Grammar.xml中,當(dāng)WebVoiceCtl控件被成功編譯后,該規(guī)則即被裝載到控件中,不能再修改,故必須在編譯生成控件前就設(shè)定好語音規(guī)則。在語音識別過程中,語音識別引擎會把輸入的用戶語音與正在運行的語音規(guī)則進行比較,如果識別規(guī)則匹配,則提示正確識別,否則提示用戶重新輸入語音信息。

圖2 WebVoiceCtl控件語音識別功能的流程圖
基于Web的英語自助學(xué)習(xí)系統(tǒng)綜合運用了TTS,SR,XML和數(shù)據(jù)庫等技術(shù),其中關(guān)鍵技術(shù)的集成如圖3所示。軟件在使用前客戶端必須首先正常安裝Microsoft Speech SDK 5.1。當(dāng)TTSPage.AspX網(wǎng)頁加載到客戶端瀏覽器后,即通過JavaScript腳本實現(xiàn)1個Spvoice對象,該對象內(nèi)嵌在網(wǎng)頁中,當(dāng)用戶檢索英語詞庫獲取單詞、詞組、句子等英文文本信息時,Spvoice對象就會調(diào)用客戶端電腦的TTS引擎,執(zhí)行Speak方法將文本信息轉(zhuǎn)換為語音信息,并通過客戶端電腦的揚聲器發(fā)出。
在SRPage.AspX網(wǎng)頁中內(nèi)嵌了WebVoiceCtl控件,它必須首先在客戶端的注冊表中完成注冊。當(dāng)客戶端與服務(wù)器連接后,服務(wù)器立即為該客戶端復(fù)制1份WebVoice.xml文件,用戶可以輸入英文單詞、詞組、句子等,并將其注入到WebVoice.xml文件中,在語音識別引擎初始化后,WebVoiceCtl接受客戶端語音輸入,然后讀取WebVoice.xml文件,遵循圖2的流程完成語音識別功能。

圖3 基于Web的英語自助學(xué)習(xí)系統(tǒng)的關(guān)鍵技術(shù)集成示意圖
軟件開發(fā)環(huán)境:Microsoft Visual Studio 2005+SQL Server 2000+Microsoft Speech SDK 5.1+WebVoiceCtl+IIS+XML,在Win2000 SP4/Win XP SP2下均可正常運行。
文本語音轉(zhuǎn)換功能的軟件實現(xiàn)思想如下(僅以單詞的TTS為例,詞組、句子等的TTS處理方法類似)。
第1步 通過腳本創(chuàng)建SpVoice對象,并將其加載到用戶瀏覽器中,腳本代碼:var VoiceObj=new ActiveXObject(”SAPI.SpVoice”)。
第2步 創(chuàng)建觸發(fā)TTS功能的圖片按鈕:<img src=”picture/tts-play.gif”style=”cursor:hand”alt=”單擊朗讀”onclick=”SpeakText()”/>。
第3步 實現(xiàn)SpeakText方法,將文本內(nèi)容轉(zhuǎn)換為語音:VoiceObj.Speak($('TxtWord').value,1)。
在英文文本朗讀的同時,用戶還可設(shè)置朗讀者的朗讀口型。微軟設(shè)計了1組較合理的口型圖片順序[1],該口型圖片序列能較準(zhǔn)確地模擬人的英語發(fā)音口型,腳本代碼如下。其中VisemeId為口型編號,它從1變化到21,循環(huán)反復(fù)。
function VoiceObj::Viseme(StreamNum,StreamPos,Duration,VisemeType,Feature,VisemeId){

此外,用戶可基于Web進行轉(zhuǎn)換語音的語速、音量、朗讀者等屬性設(shè)置,以優(yōu)化其人機交互界面,腳本代碼不再敘述,可見Microsoft Speech SDK的幫助文檔。
以單個英語單詞的語音識別為例,詞組、句子及文章的識別依賴于逐個英文單詞的正確識別,故英文單詞的語音識別是整個語音識別功能的關(guān)鍵。
第1步 創(chuàng)建SRPage.AspX并將WebVoiceCtl控件嵌入到網(wǎng)頁中。當(dāng)客戶端發(fā)出語音識別請求后,它可以響應(yīng)并正確處理,其代碼如下
<o(jì)bject id=”voice” classid=”CLSID:143D27F4-F40B-4F28-918B-FC156A72C07D” codebase=”http://www3.telus.net/CanGeordie/bin/WebVoiceCtl.dll”type=”application/x-oleobject”></object>
第2步 初始化語音識別轉(zhuǎn)換引擎。其代碼被封裝在WebVoiceCtl控件中,是C++實現(xiàn),Geoff Bailey已經(jīng)將其封裝好,以下均為引用。語音識別引擎通過按鈕點擊觸發(fā)初始化函數(shù),代碼如下


第3步 注入識別單詞。用戶選擇將待識別的單詞注入到WebVoice.xml中,為語音識別做好準(zhǔn)備,這是提供給二次開發(fā)者的編程接口,實現(xiàn)代碼如下

第4步 完成語音識別。WebVoiceCtl雖然內(nèi)嵌在網(wǎng)頁中,但它卻是1個ActiveX控件,可以響應(yīng)Windows消息,故在其封裝代碼中,首先為語音識別指定消息響應(yīng)列表MESSAGE-HANDLER(WM-RECOEVENT,OnRecoEvent),即當(dāng)該控件接受到WM-RECOEVENT消息后,立即執(zhí)行OnRecoEvent函數(shù),而在On-RecoEvent函數(shù)中通過ProcessRecoEvent函數(shù)處理語音識別,ProcessRecoEvent函數(shù)代碼如下,以下均為引用。


基于Web的英語自助學(xué)習(xí)系統(tǒng)使學(xué)習(xí)者足不出戶就可輕松完成英語學(xué)習(xí),其學(xué)習(xí)內(nèi)容涵蓋了英語學(xué)習(xí)的聽、說、寫等訓(xùn)練,并強調(diào)了聽力訓(xùn)練和口語訓(xùn)練的重要性,該系統(tǒng)具有較好的通用性和推廣價值。日后,筆者仍會在語音識別的效率以及多語種自助學(xué)習(xí)的Web應(yīng)用等方面做進一步的研究,期望有更多的智能化的語言學(xué)習(xí)系統(tǒng)能夠得到應(yīng)用,以滿足更加豐富、多樣的語言學(xué)習(xí)需求。
[1]李廣麗,張紅斌.基于TTS和SR技術(shù)的英語自學(xué)系統(tǒng)的設(shè)計[J].華東交通大學(xué)學(xué)報,2009,26(2):86-90.
[2]廖日坤,紀(jì)越峰,黃小迅.基于TTS文語轉(zhuǎn)換的Web語音瀏覽器[J].蘭州工業(yè)高等專科學(xué)校學(xué)報,2006,13(2):10-13.
[3]趙強,左婭佳,房維強,等.診斷學(xué)仿真實驗系統(tǒng)中應(yīng)用TTS技術(shù)創(chuàng)建虛擬問診功能的研發(fā)設(shè)計[J].電化教育研究,2009,(10):62-63.
[4]林茜,歐建林,蔡駿.基于Microsoft Speeeh SDK的語音關(guān)鍵詞檢出系統(tǒng)的設(shè)計與實現(xiàn)[J].心智與計算,2007,1(4):433-441.
[5]袁軍,張思民.嵌入式中文TTS系統(tǒng)的研究與實現(xiàn)[J].電腦知識與技術(shù),2008,(6):1 345-1 347.
[3]尹惠玲,楊帆,于虹,等.基于COM的智能TTS系統(tǒng)的設(shè)計與實現(xiàn)[J].微計算機信息,2009,25(5-3):172-173.
[4]GEOFF B.Voice-activated Web Browsing[EB/OL].2004[2009-08-16].http://www.codeproject.com/KB/audio-video/Web-VoicePkg.aspx.