撸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也适用)》等文。

相关博文



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

  1. 匿名
    2017-5-31 20:35

    学生党没有收入,他们需要某种东西却很难得到,带来的负面情绪我觉得是可以同情的。不要一棍子打翻一船人。

    • 小撸
      2017-6-1 6:51

      你说的很对,是可以同情。很多软件开发者都大发慈悲,做了educational版本。但学生党的“穷”不是藐视他人劳动成果的借口。作为学生党,将来很多人也都是靠知识和技能吃饭的,不尊重别人的知识产权,那么自己将来的知识产权又有什么理由获得别人的尊重。有的学生党很是狂妄,喜欢指点江山,当起评论家来一套一套的,根本无视开发者的辛苦,把开发者当孙子使唤,视开发者的盈利为大逆不道,肆意凌驾于开发者之上,就像孩子凌驾于父母之上,这是我最反感的类型。好在这类负面角色就像一锅粥的老鼠屎,不能代表所有正常、明是非的学生党。

  2. 匿名
    2017-5-30 20:39

    博主好像很讨厌学生党啊?

    • 小撸
      2017-5-31 6:39

      “拜金主义”、有分辨力的正常学生党还是很多的,讨厌的就是那种两年之内无法保证有工作有收入却在那里评头论足、浑身负能、胡思乱想、高调装逼、自以为是的傻逼。实践是检验真理的唯一标准,只有经过痛苦磨炼的实践才会产生同理心,才会成熟,才会避免冲突。相当一部分只评不做的喷子、看问题非常片面乱贴标签的幼稚者都来自学生党。

发表评论

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