中英雙語(yǔ)語(yǔ)音合成系統的研究
陳建宇、楊真 2008/08/01
摘要:本文首先簡(jiǎn)要介紹了語(yǔ)音合成概念,然后詳細介紹了語(yǔ)音合成系統的核心,包括三個(gè)模塊:文本分析模塊、韻律控制模塊和語(yǔ)音合成模塊;接著(zhù)介紹了用Microsoft speech SDK5.1制作一個(gè)中英雙語(yǔ)音閱讀器的過(guò)程,解決了Microsoft speech SDK5.1不能中英文混讀的問(wèn)題。圖1 語(yǔ)音合成系統結構示意圖
2.1文本分析模塊
語(yǔ)音合成系統首先處理的是文字,也就是它要說(shuō)的內容。文本分析的主要功能是使計算機能從這些文本中認識文字,進(jìn)而知道要發(fā)什么音、怎么發(fā)音,并將發(fā)音的方式告訴計算機。另外,還要讓計算機知道,在文本中,哪些是詞,哪些是短語(yǔ)或句子,發(fā)音時(shí)應該到哪里停頓及停頓多長(cháng)時(shí)間等。其工作過(guò)程可以分為三個(gè)主要步驟:
(1)將輸入的文本規范化。在這個(gè)過(guò)程中,要查找拼寫(xiě)錯誤,并將文本中出現的一些不規范或無(wú)法發(fā)音的字符過(guò)濾掉。
(2)分析文本中詞或短語(yǔ)的邊界,確定文字的讀音,同時(shí)分析文本中出現的數字、姓氏、特殊字符、專(zhuān)有詞語(yǔ)以及各種多音字的讀音方式。
(3)根據文本的結構、組成和不同位置上出現的標點(diǎn)符號,確定發(fā)音時(shí)語(yǔ)氣的變換以及不同音的輕重方式。
最終,文本分析模塊將輸入的文字轉換成計算機能夠處理的內部參數,便于后續模塊進(jìn)一步處理并生成相應的信息。
2.2韻律控制模塊
早期的韻律生成方法均采用基于規則的方法。目前,基于規則的方法仍然被認作是行之有效的方法,大部分漢語(yǔ)語(yǔ)音合成系統依然采用這種方法。最近,通過(guò)神經(jīng)網(wǎng)絡(luò )或統計驅動(dòng)的方法進(jìn)行韻律生成已獲得成功的應用。其實(shí)現步驟是:首先設計或收集一個(gè)包含大量語(yǔ)音和文本信息的數據,然后建立一個(gè)訓練模型,并用從數據庫中提取出的韻律參數對模型進(jìn)行訓練,通過(guò)訓練而得到最終的韻律模型。
2.3語(yǔ)音合成模塊
系統產(chǎn)生的合成語(yǔ)音是通過(guò)一個(gè)聲學(xué)模塊來(lái)具體實(shí)現的。早期語(yǔ)音合成系統的聲學(xué)模型多是通過(guò)模擬人的口腔的聲道特性來(lái)產(chǎn)生的。其中比較著(zhù)名的有Klatt的共振峰(Formant)合成系統,后來(lái)又產(chǎn)生了基于LPC、LSP和LMA等聲學(xué)參數的合成系統,這些都可以歸結為參數合成系統。使用這些方法建立聲學(xué)模型的過(guò)程是:首先錄制聲音,這些聲音涵蓋了人發(fā)音過(guò)程中所有可能出現的讀音;然后,提取出這些聲音的聲學(xué)參數,并整合成一個(gè)完整的音庫。在發(fā)音過(guò)程中,首先根據發(fā)音需要從音庫中選擇合適的聲學(xué)參數,然后根據從韻律模型中得到的韻律參數,通過(guò)合成算法產(chǎn)生語(yǔ)音。參數合成方法的優(yōu)點(diǎn)是其音庫一般較小,并且整個(gè)系統能適應的韻律特征的范圍較寬,但其合成語(yǔ)音的音質(zhì)卻往往受到一定的限制。
近10年來(lái),采用波形拼接(PSOLA)合成語(yǔ)音的方法越來(lái)越被廣泛應用。這種方法的核心思想是直接對存儲于音庫的語(yǔ)音運用PSOLA算法進(jìn)行拼接,從而整合成完整的語(yǔ)音。
3.中英雙語(yǔ)閱讀器
3.1 Microsoft Speech SDK 5.1簡(jiǎn)介
Microsoft Speech SDK5.1是微軟中國研究院推出的支持中文語(yǔ)音應用程序開(kāi)發(fā)的工具包。它采用了COM標準開(kāi)發(fā),底層協(xié)議都以COM組件的形式獨立于應用程序層。因此,在實(shí)現特定語(yǔ)音應用系統時(shí),需考慮系統的功能實(shí)現和界面控制,不必考慮復雜的語(yǔ)音技術(shù)的實(shí)現算法,極大地降低了開(kāi)發(fā)語(yǔ)音應用系統需要的代碼量,從而為二次開(kāi)發(fā)提供方便快捷的途徑,并提供了系統的可擴展性和可維護性。它包括微軟連續語(yǔ)音識別引擎(Microsoft
continuous speech recognition engine)和微軟串聯(lián)語(yǔ)音合成引擎(Microsoft
concatenated speech synthesis engine(也稱(chēng)TTS引擎)。利用提供的工具、信息、例子、SAPI5.1引擎和應用,用戶(hù)可以方便地開(kāi)發(fā)包含語(yǔ)音識別和語(yǔ)音合成功能的應用程序。這個(gè)版本的開(kāi)發(fā)包含有一系列支持COM的語(yǔ)音自動(dòng)化接口。自動(dòng)化接口使得面向對象(Object-Oriented)開(kāi)發(fā)方法終于在語(yǔ)音開(kāi)發(fā)中得到了支持。Microsoft
Speech SDK5.1可在微軟網(wǎng)站(http://www.Microsoft.com/downloads/details.aspx?familyid=5e86ec97-40a7-453f-b0ee-6583171b4530&displaylang=en)
免費下載。下載Microsoft Speech SDK5.1以及一個(gè)支持中英文的Language Pack,并按先后順序分別安裝。
3.2 新建工程并建立引用
新建工程后,單擊工程—>引用,然后單擊瀏覽按鈕到程序文件夾\CommonFiles\Micro _softShared\Speech,選中Sapi.dll并單擊確定,可看到“Microsoft
Speech Object Library”被添加到可使用的引用列表。為了使用slider控件和CommonDialog控件,單擊工程—>部件,在彈出的對話(huà)框中選擇“Microsoft
Windows Common Controls 6.0”和“Microsoft Windows Common Dialog
Control 6.0” ,這樣所需要的控件就添加在了工具箱中。
3.3建立用戶(hù)界面并設置相應屬性
首先建立一個(gè)窗體,命名為Form1,作為啟動(dòng)窗體,將其Caption命名為“中英雙語(yǔ)閱讀器” 。在Form1中添加四個(gè)Frame控件,將它們的Caption分別命名為“請輸入閱讀的文檔”
、“格式選擇” 、“文件選擇”和“播放控制” 。在Frame1添加一個(gè)TextBox控件,將其命名為MainTxtBox,用于輸入文本。在Frame2添加四個(gè)Label控件,將它們的Caption分別命名為“語(yǔ)言:”
、“速度:” 、“音量:”和“格式:” ;兩個(gè)ComboBox控件,分別命名為VoiceCB和FormatCB,用來(lái)選擇閱讀的語(yǔ)言和輸出聲音的格式;兩個(gè)Slider控件,分別命名為RateSldr和VolumeSldr,分別控制閱讀的速度和音量。在Frame3添加四個(gè)Label控件,將它們的Caption分別命名為“Open”
、“Clear” 、“Save”和“Close” ;添加四個(gè)commandButton控件,將它們分別命名為“OpenBtn”
、“ClearBtn” 、“SaveTxtBtn”和“CloseBtn” ,將它們的Caption分別命名為“打開(kāi)(O)”
、“清除(L)” 、“保存(T)”和“關(guān)閉(C)” ,分別用來(lái)打開(kāi)要閱讀的文件、清除MainTxtBox中的內容、保存MainTxtBox中的內容和關(guān)閉中英文閱讀器;在Frame4添加四個(gè)Label控件,將它們的Caption分別命名為分別“Speak”
、“Pause” 、“Stop”和“Save” ;添加四個(gè)commandButton控件,將它們分別命名為“SpeakBtn”
、“PauseBtn” 、“StopBtn”和“SaveWavBtn” ,將它們的Caption分別命名為“朗讀(R)”
、“暫停(P)” 、“停止(S)”和“保存(W)” ,分別用于控制朗讀過(guò)程的開(kāi)始、暫停、停止和保存聲音(WAV)文件。最后再添加一個(gè)CommonDialog控件,將其命名為ComDlg,用來(lái)調出“公共對話(huà)框”。設置完成的界面如圖2所示。
圖2 中英文閱讀器的界面
3.4 中英雙語(yǔ)閱讀器的算法原理
(1)中英雙語(yǔ)閱讀器核心技術(shù)的解決方案
本論文要制作的中英雙語(yǔ)閱讀器的語(yǔ)音庫是引用Microsoft Speech SDK5.1的語(yǔ)音庫。由于Microsoft
Speech SDK5.1的語(yǔ)音庫在閱讀時(shí)存在的很多的問(wèn)題,因此我在制作中英雙語(yǔ)閱讀器時(shí)做了一些改進(jìn),使其有更好的閱讀效果。
中英混讀功能
中英混讀功能是本閱讀器最重要的功能,也是本研究要解決的核心問(wèn)題。中英混讀功能調用了Microsoft Speech
Object Library中的兩位朗讀者,中文時(shí)是Microsoft simplified Chinese,英文時(shí)是Microsoft
Sam。根據要閱讀的文本實(shí)時(shí)地調用閱讀引擎,達到了中英混讀功能。主要原理是:
Step1:檢測第一個(gè)字母設定初始閱讀引擎和標志;
Step2:逐一檢測每一個(gè)字符,并付給字符串str;
Step3:檢測到不同種語(yǔ)音的字符時(shí),調用閱讀函數讀出str,清空str并轉換閱讀引擎和標志;
Step4:檢測是否到了文本的末尾,不是的話(huà)就轉到Step2;
Step5:調用閱讀函數讀出str;
Step5:結束。
閱讀各種號碼的能力
Microsoft Speech SDK5.1的語(yǔ)音庫在閱讀時(shí)出現了很多問(wèn)題,其中一個(gè)是當遇到一串數字時(shí)只能讀成一個(gè)整體的數,比如“430074”它會(huì )讀成“四十三萬(wàn)零七十四”
,這個(gè)在有的時(shí)候是正確的,但有的時(shí)候這個(gè)讀法有是錯誤的,比如“武漢郵科院烽火科技學(xué)院的郵政編碼是430074” ,根據人們的習慣“430074”就應該讀成“四三零零七四”
,而不是“四十三萬(wàn)零七十四” 。類(lèi)似的還有電話(huà)號碼、傳真等。解決這個(gè)方法是:當遇到數字時(shí),就檢測字符串str,當字符串中有“電話(huà)”
、“號” 、“碼” 、“傳真”時(shí),就在數字后面添加空格,這樣就能實(shí)現這樣數的讀法。
電子郵箱地址的讀法
有時(shí)候要讀到某人的電子郵箱地址,比如“我的電子郵箱是yujianchen@163.com”,應該讀成“y u j
i a n c h e n @ 1 6 3 . com” ,而讓閱讀器會(huì )閱讀時(shí),“yujianchen”會(huì )一起讀出,“@”不能讀出,“163”讀成“一百六十三”
,“.com”讀成“點(diǎn)com” ,就最后一處讀法是正確的,其他的都是錯誤的。怎樣解決這個(gè)問(wèn)題呢!這個(gè)不像電話(huà)號碼那樣直接檢測數字前面有沒(méi)有電話(huà)號碼等字樣,有的話(huà)就在數字后面加空格,因為一般的電子郵箱地址都即包含字母和數字,有的甚至還有文字,這樣就會(huì )有引擎的轉換,電子郵箱地址就不能在一個(gè)字符串里,因此不能像上面的(2)那樣處理。經(jīng)思考,得到了以下的解決方法:當遇到“郵箱”或者“電子郵箱”時(shí),后面的字符之間都添加空格直到“.”為止。
網(wǎng)址的讀法
網(wǎng)址會(huì )經(jīng)常出現在文章中,根據測試,Microsoft Speech SDK5.1在讀網(wǎng)址的時(shí)候不論是英文讀法還是中文讀法都是錯誤的,一般都是“/”讀不對,如果沒(méi)有改進(jìn),中英雙語(yǔ)閱讀器也是錯誤的,它把“/”讀成了“除以”
。這個(gè)問(wèn)題的具體解決辦法是:先檢測“mainTxtBox”中是否出現“http:”或者“www.” ,如果有的話(huà),就檢測當前字符是否為“字母”
、“數字” 、“.” 、“/”或者“:”(一般網(wǎng)址都是由這些字符組成的),如果是“:”或者“/” ,就用逗號來(lái)代替(也可以用空格來(lái)代替,只是這樣的節奏感沒(méi)有用逗號代替好);如果是數字,就在數字后面加空格;其他的字符就直接加到字符串上。這樣改進(jìn)后的讀法就跟人們平時(shí)閱讀時(shí)差不多了,不足之處是數字的讀法是英文的。
(2)中英雙語(yǔ)閱讀器流程圖
由于Microsoft Speech Object Library中,自帶了四位朗讀者:Microsoft simplified
Chinese、Microsoft Mary、Microsoft mike和Microsoft Sam四種。所以當選擇其中的任何一位時(shí),VB將自動(dòng)的調用該說(shuō)話(huà)引擎讀出MainTxtBox中的字符。而Microsoft
Speech SDK5.1在朗讀中英混合文本時(shí),若使用中文引擎,對于英文單詞只能將其包括的各個(gè)字母逐一朗讀出來(lái);若使用英文引擎,漢字就將被跳過(guò),這樣就失去了其本來(lái)的意義。“中英文混讀”在這方面進(jìn)行了改進(jìn),在語(yǔ)音朗讀過(guò)程中提前判斷將要處理文本的類(lèi)型并且依據系統返回的消息,實(shí)時(shí)在中英文引擎之間進(jìn)行切換,從而實(shí)現了真正的中英文朗讀。
實(shí)現中英文文本朗讀是中英雙語(yǔ)閱讀器的主要功能,其流程圖如圖3所示。
圖3 中英雙語(yǔ)閱讀器流程圖
(3)中英文混讀算法流程圖
如前所述,Microsoft Speech SDK5.1不能真正地進(jìn)行中英文混合文本的朗讀。我設計的中英文混讀程序就要實(shí)現真正地進(jìn)行中英文混合文本的朗讀。該程序利用Microsoft
Speech SDK5.1自帶的兩位閱讀者M(jìn)icrosoft simplified Chinese和Microsoft
Sam,根據判斷當前字符,中文的調用Microsoft simplified Chinese,英文的調用Microsoft
Sam,這樣就實(shí)現了中英文混合文本的朗讀。具體的解決方案是:依序處理文本中每個(gè)字符,判斷字符中含有的中英文類(lèi)型,若類(lèi)型與前一字符相同則添加至中間變量,否則朗讀中間變量文本并保存當前位置,接著(zhù)切換引擎。文本朗讀結束,發(fā)出EndStream消息,從當前位置繼續循環(huán)。其流程圖如圖4所示。
圖4 中英文混讀程序流程圖
4 結束語(yǔ)
語(yǔ)音技術(shù)是一門(mén)新興的學(xué)科,同時(shí)又是綜合性的多學(xué)科領(lǐng)域和涉及面很廣的交叉學(xué)科,是目前發(fā)展最為迅速的信息科學(xué)研究領(lǐng)域中的一個(gè)。Microsoft
Speech SDK5.1在朗讀中英混合文本時(shí),用中文引擎,對于英文單詞只能將其包括的各個(gè)字母逐一朗讀出來(lái);用英文引擎,漢字就不能讀,這樣就失去了其本來(lái)的意義。中英雙語(yǔ)閱讀器在這方面進(jìn)行了改進(jìn),實(shí)時(shí)在中英文引擎之間進(jìn)行切換,從而實(shí)現了真正意義上的中英文朗讀,這是本研究最大的創(chuàng )新點(diǎn)。同時(shí)根據Microsoft
Speech SDK5.1在閱讀是出現的錯誤,對其進(jìn)行了一些改進(jìn),包括電話(huà)號碼、郵政編碼等特殊數字、電子郵箱和網(wǎng)頁(yè)地址的讀法,使得閱讀的效果更好,更符合現實(shí)中人們閱讀的習慣。中英雙語(yǔ)閱讀器還有一個(gè)創(chuàng )新點(diǎn)是具有錄音功能,也就是可以將文本文檔轉化為Wav格式保存,之后就可以用別的播放器播放,很方便。
但是不得不承認,Microsoft speech SDK5.1還存在著(zhù)很多問(wèn)題,比如說(shuō)閱讀時(shí)的流暢度和可懂度都有待提高。要真正實(shí)現計算機能夠象人一樣的說(shuō)話(huà),和人類(lèi)自由地進(jìn)行交談,仍然需要假以時(shí)日,還有大量的研究工作要去做。
參考文獻:
【1】黃南川,鄧振杰,王嵬嵬.語(yǔ)音合成技術(shù)的研究與發(fā)展.華北航天工業(yè)學(xué)院學(xué)報,2002,12(3):37~39.
【2】李遠志,李浮濱.語(yǔ)音合成技術(shù)在信息服務(wù)應用的前景分析.現代情報,2002,(2):106~107
【3】王衛華,陳衛東等.用Microsoft Speech SDK實(shí)現語(yǔ)音識別和語(yǔ)音合成.電子技術(shù),2000,11.
【4】俞振利,程伯中.基于語(yǔ)音生成和發(fā)音模型的語(yǔ)音合成新方法的探討.聲學(xué)學(xué)報,2000,25(5):455~461
【5】羅三定,賈建華.基于波形音頻段處理的中文語(yǔ)音合成研究.電腦與信息技術(shù),2002,
作者:陳建宇、楊真 武漢郵科院烽火科技學(xué)院
作者簡(jiǎn)介
陳建宇,男,1982年出生,浙江溫州人,武漢郵電科學(xué)研究院2006屆研究生,主要研究方向是數字通信。
通信地址:湖北省武漢市洪山區郵科院路88號武漢光迅科技股份有限公司開(kāi)發(fā)二部
楊真,男,湖北人,武漢同博科技有限公司研發(fā)部,主要從事研發(fā)管理。
電子工程專(zhuān)輯
語(yǔ)音合成技術(shù)開(kāi)啟后閱讀時(shí)代 2008-05-14 |
有關(guān)語(yǔ)音自動(dòng)化的十大常見(jiàn)誤區 2008-05-06 |
科大訊飛總裁劉慶峰:語(yǔ)音市場(chǎng)進(jìn)入爆發(fā)期 2008-01-04 |
身邊的“智能”生活 2007-12-28 |
語(yǔ)音IM在帶寬方面無(wú)需擔憂(yōu) 2007-12-24 |