阳光烂灿的日子

--记录所有碎碎念

Ubuntu之玩转语音合成(festival)

| Comments

前言:也许已经有一部分人早就知道festival 这个语音合成的软件。也就是所谓的TTS(text to speech).
不过网上相关的安装资料大同小异,基本上是在gentoo上安装的心得。而我发现ubuntu只有festival,而
没有相关的speechd软件。反正是不可能照着gentoo的教程做的。而我经过一晚上的探索,终于可以把这个
festival玩转起来。而且有了一些比较好的效果。下面共享自己的经验出来。

1.安装 基本上ubuntu的库里就有festival软件的了。 $sudo apt-get install festival

2.使用 festival的基本用法:

2.1交互模式:
直接输入festival进入它的命令行界面。 $festival
festival 〉 (SayText ” hello , festival is coming “)
festival 〉 (tts myfile)

第二行是读取myfile文件里的内容。

2.2命令行模式:

$festival –tts myfile 直接读取myfile里的内容 $ echo “hello , festival is coming ” | festival –tts 读取字符串(这里的–tts的”-“有两个,html代码看起来是一个的。晕死)

3.配置 festival默认用的是oss,在一些系统会独占音频。这里我们将配置成使用alsa发音。
新建文件 ~/.festivalrc , 输入以下内容:

(Parameter.set 'Audio_Command "aplay -q -c 1 -t raw -f s16 -r $SR $FILE")
(Parameter.set 'Audio_Method 'Audio_Command)

如果想提高音量,可添加:

(set! default_after_synth_hooks
(list (lambda (utt) (utt.wave.rescale utt 1.6 t))))
至此festival应该比较好的工作了。在集成声卡中会出现音速过快的问题。linuxsir 上有一篇关于
festival的帖子中wguzgg网友曾经把网上的方法贴了出来,

我找到了如何将语速恢复正常的方法,原文在 http://www.cstr.ed.ac.uk/cgi-bin/lis...val/speed.html 主要是集成在主板上的声卡会出现语速过快的问题,
解决方式是:
1.在/usr/lib/festival/目录下创建一个文件siteinit.scm,文件内容如下
(Parameter.set 'Audio_Method 'Audio_Command)
(Parameter.set 'Audio_Command "sox -t raw -sw -r $SR $FILE -c2 -t ossdsp /dev/dsp")

这个参数写在~/.festivalrc上也是有效的。不过就和前面我设置用alsa发音的设置冲突了。那个alsa的
设置好像也能把语速减慢一点吧。我这里提供方法。你自己看着选择了。

4.安装新语音 这部分才是我写此文章的重要目的。因为在gentoo的帖子,安装一个新的女声,只需要 emerge mbrola 而在ubuntu的库中并没有收录此包。(也许是我不知道,谁知道告诉我).另一原因是,默认的美国男声似乎有些含糊不清。所以我找了mbrola的女声来安装(注意,不得用于商业用途,他说的)。
手动安装festival mbrola的信息,原网页

4.1 安装festival voice wrapper (这个咋翻译偶拿不准)
下载festvox_us1.tar.gz ,把它解压到festival的安装目录下,ubuntu下为 /usr/share/festival

4.2获取MBROLA声音文件和它的执行文件。
跳到http://tcts.fpms.ac.be/synthesis/mbrola.html ,点击download,下载MBROLA binary和你需要
的声音文件。这里选择美国英语女声(for us1)

安装MBROLA binary, 这里你应该下载到一个名为mbr301h.zip的文件。解压后把其中名为mbrola-linux-i386
的文件改名为mbrola,再复制到 /usr/local/bin 目录中。

安装声音文件,这里你下载到的声音文件的文件名应该类似 us1-980512.zip, 把它解压到
[festival_install_dir]/festival/lib/voices/english/us1_mbrola
[festival_install_dir]为festival 的安装目录。在ubuntu下应为/usr/share/festival 5.测试新的声音 在执行完上面步骤后新的美国英语女声应该安装完毕。进入festival命令行测试一下: festival) (voice_us1_mbrola)
festival) (SayText " hello , american english female voice is coming")

在这里你应该听到优美的美国英语女声了吧。 6.更换默认声音
如果想把上面的女声变成默认的声音,请在~/.festivalrc文件中添加:

(set! voice_default 'voice_us1_mbrola)

到这里比较完美了吧。

7.其它玩法 当然你会因为一时好奇而装它。不过过一会之后就会想它会有什么用呢?我这里提供自己的一些玩法。 7.1集成词典发音
在我之前的vim技巧中有提到过sdcv这个词典翻译软件。它是星际译王的命令行版本。自从有了它之后我就
再也没有打开过星际译王了。因为有需要就直接 sdcv "word" 就行了。当然默认它是没有将单词的读音读
出来的。星际译王也有个100多M的语音库,但那个库是一个单词一个文件。只能读库里有语音文件的单词。
所以我们可以写个脚本,让sdcv和festival绑定,这样学习英语来不是更形象嘛。

$cat dict
#!/bin/sh

echo "$1 " |festival --tts >/dev/null 2>&1 &
sdcv -n $1

使用dict代替sdcv,查询的单词无论怎样都会有读音。爽吧!

7.2读中文
你在开玩笑吧。是的,基本上是个玩笑。中文语音合成国内863好象有项目。不过似乎没有给公共平台提供
什么软件接口。这里你可以让festival读中文拼音,有外国人读中文的味道。(linuxsir上的网友发现的)

$echo "ni hao, huan yin lai dao linux" |festival --tts

7.3读文章
用它来读英文文章。但我想,对于我这程度,大概会把我逼疯。

当然如果你还有什么好的主意,欢迎告诉我。

后记:以上内容部分参考gengoo里的howto,对于转贴我很欢迎,但希望能保留原始出处。
上面提到的下载mbrola文件的网站我用代理才能上。为免大家下载麻烦,我把下载的三个文件打好包了。

Comments