如何让语音时钟(通过 cron 和 festival tts)在播放音乐的同时工作

如何让语音时钟(通过 cron 和 festival tts)在播放音乐的同时工作

我从去年 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 -u1
  • 安装:pip install gtts

要内联使用它:@hourly export XDG_RUNTIME_DIR="/run/user/1000"; /usr/local/bin/gtts-cli...

还可以检查基于 WaveNet 的替代方案,例如wavenet_vocoder

相关内容