撸linux


Linux用baidu tts文本转语音合成接口实现定时语音播报

语音播报在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也适用)》等文。

相关博文



发表评论

电子邮件地址不会被公开。