树莓派带了个音频输出接口,可外接小音箱。要是能实现文本到语音转换(text2speech)的话。 它的可玩性大大的提高了,比如 起床的时候语音播报天气、朗读电子邮件…更多的发挥你的想象力吧
这里介绍两种方式:1.通过本地程序转换 2使用在线api接口,这个需要联网
本地通过软件转换
我使用的是festival 一个免费的文字转语音软件,不需要联网。
在树莓派上可直接安装
1 2 3 4 |
$ apt-get install festival $ festival -v festival: Festival Speech Synthesis System: 2.1:release November 2010 |
安装好后 测试下
直接输入festival可进入交互方式
1 2 3 |
$ festival festival> (SayText "hello boy") |
或者直接通过命令行
1 2 |
$ echo 'hello boy' |festival --tts |
festival 默认带的声音kal_diphone
效果并不好(呃,有点模糊,电音效果?)
官方也有其他的声音,效果也不错online demo 遗憾的是这些没有开放下载
在官方FAQ http://www.cstr.ed.ac.uk/projects/festival/demofaq.html#voices
Q:I really like your demo, where can I download voice XYZ?
A: ….
The good news, though, is that we’re currently putting together a portfolio of dozens and dozens (really!) of voices which will be available to download shortly. Some voices will be available for commercial use only, some for non-commercial use only, and indeed some for both.
…不知道shortly是什么时候
但是我们可以选择安装一些第三方的语音库,下面介绍两个
mbroal
我按照说明做了一下,路径稍微有点不同,上面说要解压 festvox_us1到 /usr/share/festival/lib/voices
, 而实际目录是/usr/share/festival/voices/
不然会报错,可能跟festival的版本有关系
1.Install the festival voice wrapper. 安装 festvox_us1
1 2 3 4 5 6 7 8 |
root@coolpi:/tmp# $ wget http://www.cstr.ed.ac.uk/downloads/festival/1.95/festvox_us1.tar.gz $ tar -xzvf festvox_us1.tar.gz festival/lib/voices/english/us1_mbrola/festvox/us1_mbrola.scm festival/lib/voices/english/us1_mbrola/festvox/usdurtreeZ.scm festival/lib/voices/english/us1_mbrola/usradio $ cp festival/lib/voices/english/us1_mbrola /usr/share/festival/voices/english/ -R |
2.Get the MBROLA voice and binary. 到 http://tcts.fpms.ac.be/synthesis/mbrola.html
下载 MBROLA binary 和 MBROLA Voices
分别选择
Raspberri_pi 注意binary要选择适用于树莓派的版本
us2: American English Male (6.3Mb) Babel Technology 也可以选择其它声音
压缩包中的文件 $ wget http://tcts.fpms.ac.be/synthesis/mbrola/bin/raspberri_pi/mbrola.tgz #里面只有一个二进制文件mbrola,把它解压到 /usr/local/bin下 $ tar -xzvf mbrola.tgz -C /usr/local/bin/
1 2 3 4 |
# $ wget http://tcts.fpms.ac.be/synthesis/mbrola/dba/us1/us1-980512.zip $ unzip us1_mbrola.zip -d /usr/share/festival/voices/english/us1_mbrola/ |
最后目录结构看起来是这样的
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
/usr/share/festival/voices/english/us1_mbrola/ ├── festvox │ ├── us1_mbrola.scm │ └── usdurtreeZ.scm ├── us1 │ ├── license.txt │ ├── TEST │ │ ├── alice.pho │ │ ├── mbrola.pho │ │ ├── mbroli.ini │ │ ├── push.pho │ │ └── xmas.pho │ ├── us1 │ ├── us1mrpa │ └── us1.txt └── usradio |
查看 已安装的语音
1 2 3 |
festival> (voice.list) (us1_mbrola kal_diphone) |
选择声音,测试下
1 2 3 4 |
festival> (voice_us1_mbrola) us1_mbrola festival> (SayText "hello boy") |
嗯 比自带的那个声音好点…
cmu(更接近真人声音的)
1.安装 festlex-cmu
1 2 |
$ apt-get install festlex-cmu |
2.下载 cmu
1 2 3 4 5 6 |
cd /usr/share/festival/voices/english/ #这个压缩包100多M sudo wget -c http://www.speech.cs.cmu.edu/cmu_arctic/packed/cmu_us_clb_arctic-0.95-release.tar.bz2 sudo tar jxf cmu_us_clb_arctic-0.95-release.tar.bz2 sudo ln -s cmu_us_clb_arctic cmu_us_clb_arctic_clunits |
选择声音,测试下
1 2 3 4 |
festival> (voice_cmu_us_clb_arctic_clunits) cmu_us_clb_arctic_clunits festival> (SayText "hello boy") |
声音又上了一个档次,但是解析的时候能明显感觉出来有延迟。估计放到配置高点的电脑上会好些。
可以在配置文件中设置默认的声音
1 2 3 |
sudo cp /etc/festival.scm /etc/festival.scm.backup sudo echo "(set! voice_default 'voice_cmu_us_clb_arctic_clunits)" >> /etc/festival.scm |
在线tts api接口
找到两个
1.tts-api这个接口是免费的,效果还行,起码比festival好
http://tts-api.com/tts.mp3?q=hello+world.
2.google翻译的接口
这个接口并不是官方正式提供的,不过从速度,声音效果来说是最好的(非常好!),网速好的话基本上感觉不出来延迟
http://translate.google.com/translate_tts?ie=UTF-8&tl=en&q=hello+world
三个参数 q=要转换的文字; tl=文字的语言 中文选择zh-cn; ie 要转换的文字q的编码方式;
上面接口返回音频格式是mp3的,可使用mpg123 直接播放
1 2 3 |
$ apt-get install mpg123 $ mpg123 'http://translate.google.com/translate_tts?ie=UTF-8&tl=en&q=today+is+sunday' |
上面两种方式可以结合着使用,比如在为联网的时候使用festival,联网使用效果更好的在线接口
参考