![如何让语音时钟(通过 cron 和 festival tts)在播放音乐的同时工作](https://linux22.com/image/1126280/%E5%A6%82%E4%BD%95%E8%AE%A9%E8%AF%AD%E9%9F%B3%E6%97%B6%E9%92%9F%EF%BC%88%E9%80%9A%E8%BF%87%20cron%20%E5%92%8C%20festival%20tts%EF%BC%89%E5%9C%A8%E6%92%AD%E6%94%BE%E9%9F%B3%E4%B9%90%E7%9A%84%E5%90%8C%E6%97%B6%E5%B7%A5%E4%BD%9C.png)
我从去年 11 月起开始使用 Linux,现在使用的是 Ubuntu 15.04,我已经学会了使用 Cron 执行各种任务。
我使用 Cron 每小时通过节日 TTS(使用 mbrolla 语音)宣布时间。
这是我在 Cron 中使用的命令(它保存为 .sh 脚本并且其路径指向 Cron)
echo "Its" `date "+%l O clock now"` | festival --tts
问题是,在播放音乐或视频时它不起作用,但是在音乐停止或暂停后它会播报时间。
我在 Google 上搜索了一下,发现为了能够多次访问声卡,必须使用 aoss(alsa-oss)。我安装了所需的 alsa-oss 包,并根据搜索结果修改了命令,如下所示
echo "Its" `date "+%l O clock now"` | aoss festival --tts
但它仍然不起作用,如果我使用 aoss 运行命令,它会出现如下错误:
ERROR: ld.so: object '/usr/lib/x86_64-linux-gnu/libaoss.so' from LD_PRELOAD cannot be preloaded (wrong ELF class: ELFCLASS64): ignored.
我不知道这个错误是否与它有关。
Reddit 上有人提到在音乐节上使用 Alsa 或 Pulse-audio,并向我推荐了拱门论坛其中指出要使用 Alsa 或 Pulse-Audio,我们必须编辑该~/.festivalrc
文件,或/usr/share/festival/festival.scm
在其中添加一些行。
我添加了链接中提到的行,但仍然没有解决我的问题
因此,我需要你们的帮助。请帮我纠正这个问题,这样即使正在播放音乐或视频,Cron 也会宣布时间。
答案1
根据这个答案:我可以使用 cron 像落地钟一样在整点时发出钟声吗?您需要在 cron 脚本中播放声音之前导出环境变量:
export XDG_RUNTIME_DIR="/run/user/1000"
答案2
派珀
一种快速的本地神经文本转语音系统。检查站点项目以了解语音的安装、下载和使用情况。例如:
echo 'Welcome to the world of speech synthesis!' | \
./piper --model blizzard_lessac-medium.onnx --output_file welcome.wav
语音合成
语音合成(Google 文字转语音),一个 Python 库和 CLI 工具,用于与 Google Translate 的文本转语音 API 交互。将语音 mp3 数据写入文件、类似文件的对象 (字节串) 以进行进一步的音频操作,或者
stdout
。
XDG_RUNTIME_DIR="/run/user/1000"
@hourly /usr/local/bin/gtts-cli -l en "Hour $(/bin/date +\%l)" | /usr/bin/play -t mp3 - &> /dev/null
- 当然,您可以根据您的需要更改文本和语言代码。
- 其中 1000 是用户
$UID
/id -u
1。 - 安装:
pip install gtts
。
要内联使用它:@hourly export XDG_RUNTIME_DIR="/run/user/1000"; /usr/local/bin/gtts-cli...
还可以检查基于 WaveNet 的替代方案,例如wavenet_vocoder