張紅斌,李廣麗
(華東交通大學 1.軟件學院;2.信息工程學院,江西 南昌 330013)
計算機輔助學習已經(jīng)成為時下流行的學習模式,英語的學習也不例外。例如,人們在學習英語或閱讀英語文章時常會遇到生詞,很多人會立即求助于詞庫軟件進行單詞查詢。目前流行的詞庫軟件多為單機版本,如谷歌金山詞霸、靈格斯翻譯等,它們的使用具有一定的局限性,即無法面向Web進行單詞查詢、語音表達、口語糾正以及學習資源共享等。故本文敘述了在Web環(huán)境下如何構造1個英語自助學習軟件系統(tǒng)。
英語學習強調(diào)“聽”“說”“寫”3個方面的技能訓練[1],中國學生的英語閱讀能力普遍較好,但由于缺乏語言環(huán)境,他們的聽力和口語能力卻有待提高。因此,如何利用Web網(wǎng)站技術、多媒體技術、語音識別技術完成1個可以面向Web用戶的開放式英語學習系統(tǒng),并側(cè)重于聽力及口語訓練,對于提高中國學生的英語綜合素質(zhì)是1件十分有意義的事情。
英語自助學習系統(tǒng)的核心功能是聽力訓練和口語訓練,實現(xiàn)的關鍵技術是文本語音轉(zhuǎn)換技術(Text To Speech,TTS)和語音識別技術(Speech Recognition,SR)。文語轉(zhuǎn)移TTS的主要功能是將計算機中任意出現(xiàn)的文字轉(zhuǎn)換成自然流暢的語音輸出[2]。運用TTS技術可實現(xiàn)英文單詞、詞組、句子及文章的在線朗讀,指引學生完成基于Web的英語聽力訓練。運用SR技術則可實現(xiàn)學生所朗讀單詞、句子的實時語音識別,指引學生完成基于Web的英語口語訓練。目前,國內(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)兩大技術[1]。它可以為我們提供清晰和標準的美式英語發(fā)音和標準普通話的簡體中文男生發(fā)音[3]。該組件包是實現(xiàn)基于Web的英語自助學習系統(tǒng)的重要基礎。
在Speech SDK中TTS功能的工作原理如圖1所示。語音應用程序編程接口SAPI是介于語音應用程序和語音引擎之間的中間層[4]。其中SpVoice對象需要實現(xiàn)ISpVoice和ISpTTSEngineSite兩個接口[2]。IS-pVoice是應用程序能正常操作TTS功能的接口,它是控制文本語音轉(zhuǎ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在應用程序和語音引擎之間提供了1個高級別的接口。SAPI實現(xiàn)了所有必需的對各種語音引擎的實時控制和管理等低級別細節(jié)。SAPI還支持對SpVoiceObject以ActiveX控件的形式進行調(diào)用,故在基于Web的英語自助學習系統(tǒng)中,當網(wǎng)頁加載時,同時加載SpVoiceObject,就可完成基于Web的文本語音轉(zhuǎn)換功能。
圖1 在Speech SDK中的TTS原理
ISpRecoContext是語音識別的主接口,它是語音程序接收被請求的語音識別事件通知的媒介[5]。創(chuàng)建1個共享的ISpRecoContext接口后,即可完成語音識別的環(huán)境設置,而要創(chuàng)建該接口則必須先創(chuàng)建1個SAPI默認的音頻輸入流,然后設置語音識別事件通知,其中最重要的事件通知是SPEI-RECOGNITION。最后,創(chuàng)建應用程序,加載并激活1個ISpRecoGrammar,即指定被識別的語音規(guī)則。
要實現(xiàn)基于Web的語音識別,其轉(zhuǎn)換引擎必須以ActiveX的方式嵌入到網(wǎng)頁中[6]。加拿大的Geoff Bailey基于Speech SDK 5.1和ATL技術封裝了1個可完成語音識別的ActiveX控件WebVoiceCtl,該控件可以嵌入到網(wǎng)頁中,接受用戶的語音輸入,然后根據(jù)Grammar完成對指定單詞、句子的識別,即識別滿足正確發(fā)音標準的英語語音[7]。
WebVoicceCtl的語音識別工作流程如圖2所示。待識別的內(nèi)容存儲在1個XML文件WebVoice.xml中,程序人員可以對其進行編程把需要識別的單詞、句子等裝載進去,為語音識別做好準備。識別的語音規(guī)則被存儲在Grammar.xml中,當WebVoiceCtl控件被成功編譯后,該規(guī)則即被裝載到控件中,不能再修改,故必須在編譯生成控件前就設定好語音規(guī)則。在語音識別過程中,語音識別引擎會把輸入的用戶語音與正在運行的語音規(guī)則進行比較,如果識別規(guī)則匹配,則提示正確識別,否則提示用戶重新輸入語音信息。
圖2 WebVoiceCtl控件語音識別功能的流程圖
基于Web的英語自助學習系統(tǒng)綜合運用了TTS,SR,XML和數(shù)據(jù)庫等技術,其中關鍵技術的集成如圖3所示。軟件在使用前客戶端必須首先正常安裝Microsoft Speech SDK 5.1。當TTSPage.AspX網(wǎng)頁加載到客戶端瀏覽器后,即通過JavaScript腳本實現(xiàn)1個Spvoice對象,該對象內(nèi)嵌在網(wǎng)頁中,當用戶檢索英語詞庫獲取單詞、詞組、句子等英文文本信息時,Spvoice對象就會調(diào)用客戶端電腦的TTS引擎,執(zhí)行Speak方法將文本信息轉(zhuǎn)換為語音信息,并通過客戶端電腦的揚聲器發(fā)出。
在SRPage.AspX網(wǎng)頁中內(nèi)嵌了WebVoiceCtl控件,它必須首先在客戶端的注冊表中完成注冊。當客戶端與服務器連接后,服務器立即為該客戶端復制1份WebVoice.xml文件,用戶可以輸入英文單詞、詞組、句子等,并將其注入到WebVoice.xml文件中,在語音識別引擎初始化后,WebVoiceCtl接受客戶端語音輸入,然后讀取WebVoice.xml文件,遵循圖2的流程完成語音識別功能。
圖3 基于Web的英語自助學習系統(tǒng)的關鍵技術集成示意圖
軟件開發(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)。
在英文文本朗讀的同時,用戶還可設置朗讀者的朗讀口型。微軟設計了1組較合理的口型圖片順序[1],該口型圖片序列能較準確地模擬人的英語發(fā)音口型,腳本代碼如下。其中VisemeId為口型編號,它從1變化到21,循環(huán)反復。
function VoiceObj::Viseme(StreamNum,StreamPos,Duration,VisemeType,Feature,VisemeId){
此外,用戶可基于Web進行轉(zhuǎn)換語音的語速、音量、朗讀者等屬性設置,以優(yōu)化其人機交互界面,腳本代碼不再敘述,可見Microsoft Speech SDK的幫助文檔。
以單個英語單詞的語音識別為例,詞組、句子及文章的識別依賴于逐個英文單詞的正確識別,故英文單詞的語音識別是整個語音識別功能的關鍵。
第1步 創(chuàng)建SRPage.AspX并將WebVoiceCtl控件嵌入到網(wǎng)頁中。當客戶端發(fā)出語音識別請求后,它可以響應并正確處理,其代碼如下
<object 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中,為語音識別做好準備,這是提供給二次開發(fā)者的編程接口,實現(xiàn)代碼如下
第4步 完成語音識別。WebVoiceCtl雖然內(nèi)嵌在網(wǎng)頁中,但它卻是1個ActiveX控件,可以響應Windows消息,故在其封裝代碼中,首先為語音識別指定消息響應列表MESSAGE-HANDLER(WM-RECOEVENT,OnRecoEvent),即當該控件接受到WM-RECOEVENT消息后,立即執(zhí)行OnRecoEvent函數(shù),而在On-RecoEvent函數(shù)中通過ProcessRecoEvent函數(shù)處理語音識別,ProcessRecoEvent函數(shù)代碼如下,以下均為引用。
基于Web的英語自助學習系統(tǒng)使學習者足不出戶就可輕松完成英語學習,其學習內(nèi)容涵蓋了英語學習的聽、說、寫等訓練,并強調(diào)了聽力訓練和口語訓練的重要性,該系統(tǒng)具有較好的通用性和推廣價值。日后,筆者仍會在語音識別的效率以及多語種自助學習的Web應用等方面做進一步的研究,期望有更多的智能化的語言學習系統(tǒng)能夠得到應用,以滿足更加豐富、多樣的語言學習需求。
[1]李廣麗,張紅斌.基于TTS和SR技術的英語自學系統(tǒng)的設計[J].華東交通大學學報,2009,26(2):86-90.
[2]廖日坤,紀越峰,黃小迅.基于TTS文語轉(zhuǎn)換的Web語音瀏覽器[J].蘭州工業(yè)高等專科學校學報,2006,13(2):10-13.
[3]趙強,左婭佳,房維強,等.診斷學仿真實驗系統(tǒng)中應用TTS技術創(chuàng)建虛擬問診功能的研發(fā)設計[J].電化教育研究,2009,(10):62-63.
[4]林茜,歐建林,蔡駿.基于Microsoft Speeeh SDK的語音關鍵詞檢出系統(tǒng)的設計與實現(xiàn)[J].心智與計算,2007,1(4):433-441.
[5]袁軍,張思民.嵌入式中文TTS系統(tǒng)的研究與實現(xiàn)[J].電腦知識與技術,2008,(6):1 345-1 347.
[3]尹惠玲,楊帆,于虹,等.基于COM的智能TTS系統(tǒng)的設計與實現(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.