树莓派带了个音频输出接口,可外接小音箱。要是能实现文本到语音转换(text2speech)的话。 它的可玩性大大的提高了,比如 起床的时候语音播报天气、朗读电子邮件…更多的发挥你的想象力吧
这里介绍两种方式:1.通过本地程序转换 2使用在线api接口,这个需要联网
本地通过软件转换
我使用的是festival 一个免费的文字转语音软件,不需要联网。
在树莓派上可直接安装
$ apt-get install festival
$ festival -v
festival: Festival Speech Synthesis System: 2.1:release November 2010
1
2
3
4
$apt-getinstallfestival
$festival-v
festival:FestivalSpeechSynthesisSystem:2.1:releaseNovember2010
安装好后 测试下
直接输入festival可进入交互方式
$ festival
festival> (SayText "hello boy")
1
2
3
$festival
festival>(SayText"hello boy")
或者直接通过命令行
$ echo 'hello boy' |festival --tts
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
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
1
2
3
4
5
6
7
8
root@coolpi:/tmp#
$wgethttp://www.cstr.ed.ac.uk/downloads/festival/1.95/festvox_us1.tar.gz
$tar-xzvffestvox_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
$cpfestival/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要选择适用于树莓派的版本
压缩包中的文件 $ 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/
#
$ 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
#
$wgethttp://tcts.fpms.ac.be/synthesis/mbrola/dba/us1/us1-980512.zip
$unzipus1_mbrola.zip-d/usr/share/festival/voices/english/us1_mbrola/
最后目录结构看起来是这样的
/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
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
查看 已安装的语音
festival> (voice.list)
(us1_mbrola kal_diphone)
1
2
3
festival>(voice.list)
(us1_mbrolakal_diphone)
选择声音,测试下
festival> (voice_us1_mbrola)
us1_mbrola
festival> (SayText "hello boy")
1
2
3
4
festival>(voice_us1_mbrola)
us1_mbrola
festival>(SayText"hello boy")
嗯 比自带的那个声音好点…
cmu(更接近真人声音的)
1.安装 festlex-cmu
$ apt-get install festlex-cmu
1
2
$apt-getinstallfestlex-cmu
2.下载 cmu
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
5
6
cd/usr/share/festival/voices/english/
#这个压缩包100多M
sudowget-chttp://www.speech.cs.cmu.edu/cmu_arctic/packed/cmu_us_clb_arctic-0.95-release.tar.bz2
sudotarjxfcmu_us_clb_arctic-0.95-release.tar.bz2
sudoln-scmu_us_clb_arcticcmu_us_clb_arctic_clunits
选择声音,测试下
festival> (voice_cmu_us_clb_arctic_clunits)
cmu_us_clb_arctic_clunits
festival> (SayText "hello boy")
1
2
3
4
festival>(voice_cmu_us_clb_arctic_clunits)
cmu_us_clb_arctic_clunits
festival>(SayText"hello boy")
声音又上了一个档次,但是解析的时候能明显感觉出来有延迟。估计放到配置高点的电脑上会好些。
可以在配置文件中设置默认的声音
sudo cp /etc/festival.scm /etc/festival.scm.backup
sudo echo "(set! voice_default 'voice_cmu_us_clb_arctic_clunits)" >> /etc/festival.scm
1
2
3
sudocp/etc/festival.scm/etc/festival.scm.backup
sudoecho"(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 直接播放
$ apt-get install mpg123
$ mpg123 'http://translate.google.com/translate_tts?ie=UTF-8&tl=en&q=today+is+sunday'
1
2
3
$apt-getinstallmpg123
$mpg123'http://translate.google.com/translate_tts?ie=UTF-8&tl=en&q=today+is+sunday'
上面两种方式可以结合着使用,比如在为联网的时候使用festival,联网使用效果更好的在线接口
参考