原帖在这里,首先感谢“逐灵”:http://blog.chinaunix.net/u1/56195/showart_440845.html

http://ritk.blog.sohu.com/82844994.html

玩转语音合成

也许已经有一部分人早就知道 Festival 这个语音合成软件,也就是所谓的 TTS (text to speech)。

  1. 安装
  2. $emerge -av festival
  3. 使用

    Festival 的基本用法:

    • 交互模式:

      直接输入 festival 进入它的命令行界面。

      $festival
      festival 〉 (SayText ” hello , festival is coming “)
      festival 〉 (tts myfile)

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

    • 命令行模式:
      $festival –tts myfile

      直接读取 myfile 里的内容。
      $ echo “hello , festival is coming ” | festival –tts

      读取字符串。

  4. 配置

    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 网友曾经把网上的方法贴了出来。

    我找到了如何将语速恢复正常的方法,原文在这里。
    主要是集成在主板上的声卡会出现语速过快的问题,解决方式是:

    在 /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 的设置好像也能把语速减慢一点吧。我这里提供方法。你自己看着选择了。

  5. 安装新语音

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

    手动安装 festival mbrola 的信息,原网页。

    • 安装 festival voice wrapper (这个咋翻译偶拿不准)

      下载 festvox_us1.tar.gz,把它解压到 festival 的安装目录下,Ubuntu 下为 /usr/share/festival。

    • 获取 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。

  6. 测试新的声音

    在执行完上面步骤后新的美国英语女声应该安装完毕。进入 festival 命令行测试一下:

    festival) (voice_us1_mbrola)
    festival) (SayText ” hello , american english female voice is coming”)

    在这里你应该听到优美的美国英语女声了吧。

  7. 更换默认声音

    如果想把上面的女声变成默认的声音,请在 ~/.festivalrc 文件中添加:

    (set! voice_default ‘voice_us1_mbrola)

    到这里比较完美了吧。

  8. 其它玩法

    当然你会因为一时好奇而装它。不过过一会之后就会想它会有什么用呢?我这里提供自己的一些玩法。

    • 集成词典发音

      在我之前的 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,查询的单词无论怎样都会有读音。爽吧!

    • 读中文

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

      $echo “ni hao, huan yin lai dao linux” |festival –tts

    • 读文章

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

注:这在我玩UT2004-demo的时候挺好用的,还有就是stardict了,发音很清晰很标准,但愿对大家有用……