本文原始链接: http://cherrot.com/2011/05/build-festival-2-1-on-ubuntu-natty-meego-1-2/
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目录的实际路径
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 )
./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> (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
festival> (quit) festival> (exit)
festival --tts /path/to/letter.txt 或 festival> (tts "path/to/your/text.txt" nil)
cat letter.txt | text2wave -o letter.wav
(set! voice_default 'voice_cmu_us_slt_arctic_hts)或者在/festival/voices.scm 文件中。
#!/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