Saturday, December 12, 2009

語音合成 (一)

上個月的時候,朋友E先生發想做中文的語音合成。
經過搜尋,我們發現目前以工研院的引擎的效果最好 (這邊有線上demo)

不過還是感覺不夠完美,同時也沒有可以調整的參數,
我們的理想是能做出語調和感情的調整。

動手之前我們先做了一番研究,一份較易懂的參考資料如[1]
語音合成牽涉的範圍很廣,大致可以分成兩個部分:
1. 自然語言處理 (Natural Language Processing): 讀取文字,分析出每個字的唸法
2. 數位訊號處理 (Digital Signal Processing): 把獨立的字的發音組合成一個句子

我們決定從第二部分下手,
因為第一部分可以先由人來給訂,而且也無關乎發音是否悅耳

而數位訊號處理技術很多,大致上可以分為兩派
第一派被稱之為 synthesis-by-rule,主要由語音學家發展出來。
第二派被稱之為 synthesis-by-concatenation,和前者的差異為,只採用少量的語言學知識,將語音視為聲音的片段,利用技巧來把片段整合起來。
由於不是語音學的專家,我們決定從第二種方法開始。

首先要有語音資料,目前找到能使用的是 gcin 的語音檔 (ogg格式)
http://ftp.twaren.net/local-distfiles/gcin/ogg.tgz


這個檔案包含約一千個字的發音,對應到國語的所有單字 (包含五種聲調)

原本每一個發音檔是放在各自的目錄下,同時目錄的名稱是中文,所以並不好處理,我先用Python script把檔案轉換成漢語拼音,放在同一個目錄下面。

接著為了由於ogg格式比較少有函式庫可以處理,為了方便起見,我先用 Wav2Mp3 這個軟體把 ogg 轉成 wav 格式。

[1] Thierry DUTOIT, "High-quality text-to-speech synthesis: an overview"

(未完待續)

No comments:

Post a Comment