編譯Festival 2.1 手記(Ubuntu natty 11.04)

前期準備:

源碼包及解壓後的源碼目錄

首先去 http://www.festvox.org/festival/downloads.html 把最新的源碼包通通下載下來解壓: 圖中的兩個文件夾就是解壓出來的源碼目錄。按照festival目錄中的install 說明,要編譯Festival 首先必須編譯EST ( Edinburgh Speech Tools )。

編譯Edinburgh Speech Tools:

首先確認是否安裝了libncurses5-dev軟件包(個人Ubuntu 11.04 就沒有安裝這個軟件包):
sudo apt-get install libncurses5-dev
而後,在終端切換至Edinburgh Speech Tools源碼目錄,如:
cd /opt/festival/speech_tools
以後運行以下命令:
./configure
若是有其餘需求,好比開啓java類庫支持、使用系統共享庫而不是私有庫等等選項,請參考源碼目錄下的install說明。 上一步結束後,咱們就能夠開開心心的執行:
make
漫長的等待後,EST編譯完成!此時能夠 執行 make test 查看編譯是否成功。 注意:全部編譯成功的可執行文件都連接到了 speech_tools/bin 目錄下,若是要使用他們,咱們須要把這個目錄添加進系統 PATH環境變量中:
sudo gedit /etc/environment
在其後追加 :/opt/festival/speech_tools/bin 注意,前面的分隔符 : 不要省略掉,後面跟的是你的EST編譯後的bin目錄的實際路徑

編譯festival2.1

/etc/environment 中的環境變量重啓後才能生效,編譯festival前重啓你的系統。 若是要編譯軟件文檔,咱們須要安裝額外的軟件包,在新立得中安裝如下軟件包: dvi2ps (4.1j-3) lmodern (2.004.1-3) luatex (0.65.0-1ubuntu3) tex-common (2.09) texi2html (1.82-1) texlive-base (2009-11) texlive-binaries (2009-8ubuntu2) texlive-common (2009-11) texlive-doc-base (2009-2) texlive-generic-recommended (2009-11) texlive-luatex (2009-11) vflib3 (3.6.14.dfsg-1.1build1) festival會繼承speech_tools的configure,因此咱們只須要在終端切換到festival安裝目錄,而後make就好了:
cd /opt/festival/festival
make
默認不會編譯festival的全部模塊(festival/src/modules),通過測試,UniSyn_selection在ubuntu下是能夠編譯的,因此在/festival/config/config 文件中把這一行取消註釋 ALSO_INCLUDE += UniSyn_selection 而後執行make。編譯結束後,運行
make test
測試編譯是否成功。 ( Windows下編譯Festival 能夠參考 http://www.eguidedog.net/doc_build_win_festival.php )

測試(使用)Festival2.1

你能夠參考前面的方法把 festival/bin 的完整路徑添加到PATH環境變量中,重啓後在終端直接運行festival便可。 運行
./bin/festival
進入festival> 提示符後,輸入 (SayText "Hello World") 回車(包括括號)。正常狀況下就能夠聽到機器在Hello World了。 若是提示 Linux: can't open /dev/dsp 我致信給festival的郵件列表,獲得的一個簡單的解決方案是輸入命令 padsp festival 運行festival,而不單單是輸入festival。如下是恩人回覆的原文: Try using 'padsp festival' instead of just 'festival' when running it, because you may need to use that wrapper for /dev/dsp to exist in that context. 還有一種解決方案是,將如下三行追加進 festival/lib/festival.scm 文件的末尾:
(Parameter.set 'Audio_Command "aplay $FILE")
(Parameter.set 'Audio_Method 'Audio_Command)
(Parameter.set 'Audio_Required_Format 'snd)
這三行的做用是把合成的語音輸出到一個臨時文件而後用pulseAudio播放,這樣便解決了使用pulseAudio播放TTS時會與當前播放進程衝突的問題,並且pulseAudio是Ubuntu和MeeGo的默認多媒體輸出設備。然而缺點顯而易見,輸出到文件致使效率大大下降。在Google爬了好久沒有找到一個比較優雅的解決辦法,若是你找到了, 但願能夠留言告訴我,我不勝感激! 在找到一個優雅的解決辦法前,我仍是建議使用ALSA做爲輸出設備。 若是要使用ALSA做爲輸出設備,將如下兩行追加進 festival/lib/festival.scm 文件的末尾:
(Parameter.set 'Audio_Method 'Audio_Command)
(Parameter.set 'Audio_Command "aplay -q -c 1 -t raw -f s16 -r $SR $FILE")
若是能夠讀,只是語速不對,那麼用如下兩行替代:
(Parameter.set 'Audio_Method 'Audio_Command)
(Parameter.set 'Audio_Command "aplay -Dplug:default -f S16_LE -r $SR $FILE")
要切換聲音,輸入 (voice_cmu_us_slt_arctic_hts) 切換聲音(貌似這個聲音是目前最好聽的~)

經常使用的命令

固然,首先要啓動festival,進入festival的命令提示符festival>
  • 列出可使用的聲音:
festival> (voice.list)
(cstr_us_awb_arctic_multisyn kal_diphone don_diphone)
  • 設定聲音:
festival> (voice_cstr_us_awb_arctic_multisyn)
#<voice 0x1545b90>
  • 測試發音:
festival> (SayText '"test this is a test oh no a test bla test")
inserting pause after: t.
Inserting pause
[...]
id _63 ; name t ;
id _65 ; name # ;
#<Utterance 0x7f7c0c144810>
  • 其餘:
festival> help
"The Festival Speech Synthesizer System: Help
  • 退出:
ctrl+d
festival> (quit)
festival> (exit)
  • 朗讀文本文件
festival --tts /path/to/letter.txt
或
festival> (tts "path/to/your/text.txt" nil)
  • 將一個文本文件閱讀到.wav文件
cat letter.txt | text2wave -o letter.wav
  • 設置默認聲音
把下面這行追加到 /festival/festival.scm 的末尾:
(set! voice_default 'voice_cmu_us_slt_arctic_hts)
或者在/festival/voices.scm 文件中。

festival的簡單應用

下面的腳本能夠用於持續ping 一臺主機,若是成功將朗讀Ping , 若是失敗則朗讀 Fail
#!/bin/bash
while [ 1 = 1 ]; do
     ping -c $1 && (echo "Ping" | festival --tts) || (echo "Fail" | festival --tts)
done
注:本文部分參見了以下文章: http://www.cstr.ed.ac.uk/projects/festival/manual/festival_23.html https://wiki.archlinux.org/index.php/Festival
相關文章
相關標籤/搜索