1. 程式人生 > >TTS技術簡單介紹和Ekho(餘音)TTS的安裝與程式設計

TTS技術簡單介紹和Ekho(餘音)TTS的安裝與程式設計

TTS技術簡單介紹和Ekho(餘音)TTS的安裝與程式設計

一、TTS技術簡單介紹:

        TTS技術,TTSText To Speech的縮寫,即“從文字到語音”。它將計算機自己產生的、或外部輸入的文字資訊轉變為可以聽得懂的、流利的漢語口語(或者其他語言語音)輸出的技術,隸屬於語音合成(SpeechSynthesis)。

TTS的基本組成:

1)文字分析

       對輸入文字進行語言學分析(主要模擬人對自然語言的理解過程),逐句進行詞彙的、語法的和語義的分析,以確定句子的低層結構和每個字的音素的組成,包括文字的斷句、字詞切分、多音字的處理、數字的處理、縮略語的處理等。使計算機對輸入的文字能完全理解,並給出後兩部分所需要的各種發音提示。

2)韻律建模

        為合成語音規劃出音段特徵,如音高、音長和音強等,使合成語音能正確表達語意,聽起來更加自然。

3)語音合成(核心模組)

        根據韻律建模的結果,把處理好的文字所對應的單字或短語的語音基元從語音合成庫中提取,利用特定的語音合成技術對語音基元進行韻律特性的調整和修改,最終合成出符合要求的語音。

TTS的工作原理如下:

       例如:你輸入了:“今天吃飯了沒有啊?”,想讓電腦讀出來。那麼我們會怎麼做呢?

(1)最簡單的TTS:

        就是電腦把每一個字分開,對於“我”字,就通過查詢把“我”字對應的語音基元讀出來,這樣同樣方式處理剩餘的字,那麼這句話就讀出來了。但是很明顯,這樣讀出來的語音肯定不夠自然。

        另外,每個字對應的語音基元哪裡來呢?人工苦力活,就是請人把每個漢字讀出來,然後錄下來。你會問,豈不要錄製6千多個漢字的語音?幸運的是,漢語的音節很少,很多同音字。所以我們最多隻是需要錄製: 聲母數×韻母數×4,(其實不是每個讀音都有4聲),這樣算來,最多隻需要錄製幾百個語音就可以了。當然,也有非人工的方法,如eSpeak使用共振峰合成方法,這可以使提供的語言檔案非常小,但是缺點是不如採用基於人錄音的語料庫的聲音平滑自然。另外,在合成的時候需要一張漢字對應拼音的對照表(實際上就是字典),漢字拼音輸入法也依賴這張表。

    上面單字朗讀做出來的TTS效果也還可以,特別是朗讀一些沒有特別含義的如姓名,家庭住址,股票程式碼等漢語句子,聽起來足夠清晰。這要歸功於我們偉大的母語通常都是單音節,從古代的時候開始,每個漢字就有一個詞,表達一個意思。而且漢字不同於英語,英語裡面很多連讀,音調節奏變化很大,漢字就簡單多了。

    當然,你仍然要處理一些細節,比如多音字,把“銀行”讀成“yin xing”就不對了;再比如,標點符號的處理,數字、字母的處理。

(2)稍微複雜點的TTS:

    如果要把TTS的效果弄好一點,再來點力氣活,把基本的詞錄製成語音,如常見的兩字詞,四字成語等,再做個詞庫和語音庫的對照表,每次需要合成時到詞庫裡面找。這樣以詞為單位,比以字為單位,效果自然是好多了。當然,這就涉及到分詞的技術,要把複雜的句子斷成合理的詞序列。另外,為了追求更好的效果,還有進化到以常用句子為單位來錄音了。當然,這就得需要更大的工作量了,因為你需要讀單字、詞、成語、句子等等。而且語音資料也會龐大起來。

     再來說說文字的標識,對於複雜文字,某些內容程式沒有辦法處理,需要標識出來。比如,單純的數字“128”,是應該念成“一百二十八”還是“一二八”?解決辦法通常是加入XML標註,如微軟的TTS:"<context ID = "number_cardinal">128</context>"念成“一百二十八”,"<context ID = "number_digit">128</context>"將念成“一二八”。TTS引擎可以去解釋這些標註。遺憾的是,語音XML標註並沒有形成大家都完全認可的標準,基本上是各自一套。

二、Ekho(餘音)TTS的安裝與程式設計:

    目前,TTS還是比較多的,有商業的,也有開源的,當然,前者的效能肯定要好一些,但對於業餘非專業應用來說,開源的就足夠了。下面就介紹下如何在ubuntu 12.04下安裝和程式設計Ekho這個TTS。

Ekho(餘音)是一個把文字轉換成聲音的軟體。它目前支援粵語、普通話(國語)和韓語(試驗中),英文則通過Festival間接實現。網址如下(提供下載):

         Festival提供了一個通用的框架,用於構建語音合成系統,該系統包含了各種模組示例。它提供了完整的文字轉語音的API,可以通過shell C++靜態庫等多種方式呼叫,原生支援Mac OS,支援的語言包括英語和西班牙語;而且系統是使用c++編寫,底層呼叫Edinburgh Speech ToolsEdinburgh語音工具庫);

         Ekho支援LinuxWindows平臺,使用時需要同時下載原始檔和聲音資料,解壓到"jyutping""pinyin"。(以jyutping開頭的聲音資料是粵語,而以pinyin開頭的聲音資料是國語。檔名中的4410016000表示的是取樣率。取樣率高意味著聲音質量高。)

1、下載ekho-4.12.tar.bz2解壓:

解壓後看到,ekho原始碼涉及幾個部分:

1include/soundtouch: SoundTouch是一個開源的音訊處理庫,主要實現包含變速、變調、變速同時變調等三個功能模組,能夠對媒體流實時操作,也能對音訊檔案操作;

1include/festival:通過Festival間接實現英文閱讀;

2Include/speech_toolsEdinburgh Speech ToolsEdinburgh語音工具庫);

3speechd-apispeech-dispatcher API(平臺獨立的語音合成API);

4sonic:一個語音變速的演算法實現;

5ekho-dataekho的字典檔案和聲音資料,上面說到了,TTS是通過文字分析,再查詢字典,找到對應的聲音資料,然後通過語音合成出來的;

6Utfcpp:處理Unicode編碼字串的庫。

7sr-convert:改變.WAV聲音檔案取樣率sample rate的庫。

然後就是srcekho的主要實現)和lib(上面說的這幾部分的靜態連結庫*.a)了,就沒什麼特別的了。

2、安裝依賴庫:

#apt-get install libsndfile1-dev libpulse-dev libncurses5-dev libgtk2.0-dev libvorbis-dev libmp3lame-dev

3、配置、編譯及安裝:

       如果需要閱讀英語,則需要配置編譯Festival,在configure選項中加上--enable-festival,如果需要編譯speech-dispatcher API和支援螢幕閱讀的話,就加上--enable-speechd。(speech-dispatcher是一個平臺獨立的語音合成API,其框架是基於client/server模型的,兩者通訊是通過TCP連線使用Speech Synthesis Independent Protocol (SSIP)協議通訊或者介面庫通訊的。)

$ ./configure

$ make

$ sudo make install

       安裝後,ekho這個可執行檔案和聲音資料ekho-data都會複製到系統目錄下。但是好像標頭檔案(除ekho.h外)和庫等就沒有複製進去,所以程式設計連結時需要注意指定位置。

4、安裝成功後,執行測試:

# ekho '123'

成功的話,系統會把“一百二十三”讀出來。

5、程式設計:

       程式設計需在原始碼目錄下,也就是ekho-4.12下,因為依賴的標頭檔案都在該資料夾裡,並沒有安裝到/usr/include等目錄下;

Echo支援的API,具體見ekho.h

程式設計程式碼:ekhotest.cpp

/* ekhotest.cpp */

#include "config.h" // this file is generated when building Ekho

#include "ekho.h"

using namespace ekho;

int main(int argc, char **argv)

{

  /*ekho支援粵語Cantonese、普通話Mandarin國語和韓語Korean,在這指定*/

  Ekho wong("Mandarin");

  wong.blockSpeak("你好,歡迎!");

  return 0;

}

編譯的話,因為依賴的庫比較多,所以最好在該目錄下寫個sheel指令碼complize.sh,如下:

g++ ekhotest.cpp libekho.a lib/libSoundTouch.a lib/libFestival.a lib/libestools.a lib/libeststring.a lib/libestbase.a -I. -Iutfcpp/source -Isonic -lpthread -lvorbisenc -lvorbis -lm -logg -lmp3lame -lsndfile -lncurses `pkg-config --libs libpulse-simple` `pkg-config --cflags libpulse-simple`

更改執行屬性:

#chmod 777 complize.sh

然後:

#./complize.sh

就生成執行./a.out即可

6、寫Makefile管理

       個人感覺上面的編譯過程有點亂,為了讓ekho可以更好的嵌入其他應用程式程式設計(得清晰明白它的編譯需要哪些標頭檔案和庫),我就簡單的將其進行統一,將編譯ekho所需的標頭檔案和庫分別放在一個目錄中,並通過Makefile來編譯自己寫的ekho程式。

        先新建一個資料夾program_tts,再在這裡資料夾中新建libinclude兩個資料夾。然後拷貝ekho-4.12原始碼目錄下的libekho.alib/*到新建的lib下,再將原始碼目錄下的config.hinclude/*,還有sonic/*.hutfcpp/source/*拷貝到新建的include目錄下。

      自己的程式設計檔案ekhotest.cppMakefileprogram_tts目錄下。

Makefile檔案如下:

CXX=g++

CFLAGS=-Iinclude -Iinclude/sonic -Iinclude/speech_tools -Iinclude/soundtouch -Iinclude/festival -Iinclude/utf8 `pkg-config --cflags libpulse-simple`

LIBS=-lpthread -lvorbisenc -lvorbis -lm -logg -lmp3lame -lsndfile -lncurses `pkg-config --libs libpulse-simple`

SLIBS=lib/libekho.a lib/libSoundTouch.a lib/libFestival.a lib/libestools.a lib/libeststring.a lib/libestbase.a

OBJECTS=ekhotest.o

TARGETS=testekho

$(TARGETS):$(OBJECTS)

         $(CXX) $^ $(SLIBS) $(LIBS) -o [email protected]

.cpp.o:

         $(CXX) -c $< $(CFLAGS) -o [email protected]

.c.o:

         $(CC) -c $< $(CFLAGS) -o [email protected]

clean:

         -rm -rf $(TARGETS) $(OBJECTS)

這樣,修改程式,直接make即可。

相關推薦

TTS技術簡單介紹Ekho餘音TTS安裝程式設計

TTS技術簡單介紹和Ekho(餘音)TTS的安裝與程式設計一、TTS技術簡單介紹:        TTS技術,TTS是Text To Speech的縮寫,即“從文字到語音”。它將計算機自己產生的、或外部

python之pandas簡單介紹及使用

dad all 就會 能夠 簡單的 兩種 first 模型 自己 python之pandas簡單介紹及使用(一) 一、  Pandas簡介1、Python Data Analysis Library 或 pandas 是基於NumPy 的一種工具,該工具是為了解決數據分析任

lidgren 介紹使用

有一年多沒寫東西了,一懶惰就會找藉口,今夜擦拭了堆滿灰塵的膝上型電腦,插上電源,寫了一些程式碼,時光好像又回到了以前,那個充滿夢想的自己。還能回來嗎? 好了,廢話不多說了,今天主要說說 實時通訊,因為手機遊戲 現在 越來越 需要 這類高速的通訊 來

lidgren 介紹使用 ------整合unity測試

天冷,少打幾個字吧,這次主要 以unity作為 客戶端,同時  服務端和客戶端  採用執行緒方式 接收和傳送。不廢話了,上程式碼。   服務端 class Program { private static NetServer s_serv

Socket通訊中粘包分包問題的介紹解決C#

最近在做Unity區域網時,用到了Socket通訊基於TCP協議,然後使用非同步方式,主要用到了BeginAccept和BeginReceive方法 然而就可以實現非同步通訊,然而還是要解決粘包和分包問題 這裡我先說明一下什麼是分包和粘包,TCP提供面向連線的、可靠的資料流傳輸,所以當我們傳

主流伺服器虛擬化技術簡單使用——Hyper-V

Tips:因為部落格園排版的原因,圖片顯示不清晰,可以放大網頁檢視清晰圖片。 如果系統使用物理機,需要在BIOS裡面開啟Intel VT-x(或AMD-V),如果是VMware workstation,還需要在虛擬機器設定裡面把虛擬化引擎內的三個選項勾上。 本機主要硬體配置(使用VMware work

分散式鎖簡單 概述例項zookeeper

首選 安裝zookeeper,解壓  啟動, 看是否能正常啟動, 其中配置檔案中 需要copy zoo_sample 一份 命名成 zoo.cfg然後啟動起來,  其次是修改你的ip和埠然後小實現private ZooKeeper zk; private String roo

lidgren 介紹使用 ------ 非同步獲取資訊

NetPeerConfiguration config1 = new NetPeerConfiguration("chat");//引數是一個字串標識,前後端一致。 config1.AutoFlushSendQueue = false; /

lidgren 介紹使用 ------ p2p

p2p前幾年比較流行,因為他不需要伺服器,通過不同客戶端內網,就可以互動。 他的原理也很簡單,就是先內網傳送給伺服器,瞭解到自己的外網ip和埠。然後內網向對方外網傳送資料。 由於nat,也就是路由器的阻攔,第一次傳送資料會被拋棄,但傳送方的 路由器卻記錄了 對方的ip,這樣對方 傳送外網 給你,就不會被

jar包war包的介紹區別轉載

包括 啟動tomcat 代碼 產品 來源 hive 獲得 到你 apps 來源:https://www.jianshu.com/p/3b5c45e8e5bd 做Java開發,jar包和war包接觸的挺多的,有必要對它們做一個深入的了解,特總結整理如下: 1.jar包的介

課程內容介紹Python

課程介紹: 1.Python程式設計語言 2.深度學習——神經網路基礎 3.具有實際背景問題的提出以及解決 Python 1.面向物件程式設計,語法簡單,支援動態輸入,解釋性語言(輸入完成後就能執行)。適合於應用程式的動態開發。   1)面向物件   2)可擴充套件,可移植

SpringMVC的攔截器Interceptor過濾器Filter的區別聯系

get err 實例 分享 切面 簡介 () lee XML 一 簡介 (1)過濾器: 依賴於servlet容器。在實現上基於函數回調,可以對幾乎所有請求進行過濾,但是缺點是一個過濾器實例只能在容器初始化時調用一次。使用過濾器的目的是用來做一些過濾操作,獲取我們想要獲取

SVN的學習使用——SVN安裝

在windows下安裝 SVN 1、準備svn的安裝檔案 下載地址:https://sourceforge.net/projects/win32svn/ 2、下載完成後,在相應的碟符中會有一個Setup-Subversion-1.8.16.msi的檔案,目前最新的版本是1.8.16, 這裡就

狀態開關按鈕ToggleButton開關Switch的功能用法

狀態開關按鈕(ToggleButton)和開關(Switch)也是由Button派生出來的,因此他們的本質也是那妞,Button支援的各種屬性、方法也適用於ToggleButton和Switch。 從功能上看,ToggleButton、Switch和CheckBox複選框非

檔案目錄--unix環境高階程式設計

     普通檔案和目錄linux中最多的兩類檔案,linux中一共有七種型別的檔案,如下:1.普通檔案 2.目錄 3.字元特殊裝置 4.塊特殊裝置 5.FIFO,又叫命名管道 6.Socket,即套接字 7.符號連結 獲取一個檔案的詳細資訊可以使用stat函式組,stat

stack佇列queue的定義基本用法

棧和佇列 【定義和特點】 棧:棧(stack)又名堆疊,它是限定在表的一端進行插入和刪除操作的線性表(後進先出)。這一端被稱為棧頂,相對地,把另一端稱為棧底。不含元素的空表稱為空棧。 佇列:和

Python3入門筆記1 —— windows安裝運行

python安裝 color 聲明 返回值 down 如果 ++ 這一 ges Python的設計哲學是“優雅”、“明確”、“簡單”。這也是我喜歡Python的理由之一 Python的安裝: 1.進入Python官方網站下載安裝包 點擊導航欄的 Downloads 會自動

Linux 環境部署記錄 - Jenkins安裝配置

版本 接下來 clas title col size pre 瀏覽器 jdk Jenkins安裝 為了兼容生產環境的jdk1.7版本,從官網得知,Jenkins必須是1.6之前的版本,因此下載jenkins-1.596.3-1.1.noarch.rpm到本地進行安裝: #移

Mysql Mysql安裝使用

mysql安裝持續更新中................本文出自 “Linux獄長” 博客,請務必保留此出處http://sswqzx.blog.51cto.com/2494644/1969001Mysql (四)Mysql安裝與使用

Java詳解2--JDK安裝環境變數配置

JDK安裝與環境變數配置 ---------------------  作者:文動天下 來源:CSDN  連結:https://blog.csdn.net/li_yi_kun?t=1 版權宣告:本文為博主原創文章,轉載請附上博文連結! 1、JDK&nb