语音播报在Linux下是个非常有意思的事情,有时候来了一封邮件,或者完成了一项后台任务(比如备份、更新、爬虫任务等)之后来一次声音提醒,无疑会给工作者带来快乐。如果你的工作时间不规律,还可以用语音播报来提醒休息时间。这个时候就要用到文本转语音的工具。
Linux下的文本转语音的工具有espeak、festival、ekho等。小衲对这几个工具都逐个测试过,espeak不能识别汉字,festival操作复杂,基于festival的ekho在这三个工具里面是最好的。用以下命令可以实现ekho较好的播放效果:
ekho -s -10 -p -35 -r 15 "现在时间10点整,休息10分钟嘛"
但是ekho的语音比较生硬,一听就知道是机器自动生成的。(如下所示)
小衲不满意,于是继续搜索其他解决方案,发现几年前有人用Google翻译的tts工具实现了语音合成,想必效果应该不错,可惜现在谷歌已经不提供相应接口了。
不过呢!百度在这方面仍然有相关接口保留,比如http://tts.baidu.com/text2audio?lan=zh&ie=UTF-8&spd=5&text=我是小衲(可用curl -o将这个链接导出为音频文件)
于是我做了一个下面的shell脚本,将其保存为/usr/bin/bdsay文件,然后运行sudo chmod 755 /usr/bin/bdsay将其设置为可执行。bdsay的用法很简单:bdsay 我要说的话
#!/bin/bash
say() {
local IFS=+;
/usr/bin/mplayer -ao alsa -really-quiet -noconsolecontrols "http://tts.baidu.com/text2audio?lan=zh&ie=UTF-8&spd=5&text=$*";
}
say $*
bdsay的语音效果比上面的ekho强多了。(如下所示)
接下来就是利用cron实现定时播报的功能,在crontab里加入以下一行即可:
0 * * * * export DISPLAY=:0.0;bdsay "现在时间`date +%_H`点整,休息10分钟嘛"
其中export DISPLAY=:0.0;是必须的,否则cron无法播放声音。date +%_H命令能计算当前时间是几点钟。
cron真是个好东西!很多时候要用到它。不懂如何设置cron定时任务的,可以参考本站的《Ubuntu 16.04设置crontab定时计划任务》或《ArchLinux设置cron定时计划任务(Manjaro也适用)》等文。
注:百度语音合成的接口已于2018.03.28失效。

以下是网友的8条评论,您赞同吗?