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