编译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

转载于:https://my.oschina.net/u/154340/blog/23968

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值