如何在播放音乐时使讲话时钟(通过 cron 和节日 tts)工作

rag*_*ath 6 sound cron pulseaudio alsa 15.04

我从过去 11 个月开始切换到 Linux,我使用的是 Ubuntu 15.04,我已经学会了使用 Cron 来完成各种任务。

我每小时使用 Cron 通过节日 TTS(使用 mbrolla 语音)宣布时间。

这是我在 Cron 中使用的命令(它保存为 .sh 脚本,其路径指向 Cron)

echo "Its" `date "+%l O clock now"` |  festival --tts
Run Code Online (Sandbox Code Playgroud)

问题是在播放音乐或视频时它不起作用,但是在音乐停止或暂停后它会宣布时间。

我用谷歌搜索,发现为了多次访问声卡,必须使用 aoss (alsa-oss) 我安装了所需的 alsa-oss 包,并根据这样的搜索结果修改了命令

echo "Its" `date "+%l O clock now"` | aoss festival --tts
Run Code Online (Sandbox Code Playgroud)

但它仍然不起作用,如果我用 aoss 运行命令,它会给出一些错误,如下所示:

ERROR: ld.so: object '/usr/lib/x86_64-linux-gnu/libaoss.so' from LD_PRELOAD cannot be preloaded (wrong ELF class: ELFCLASS64): ignored.
Run Code Online (Sandbox Code Playgroud)

我不知道这个错误是否与它有关。

Reddit 中有人提到在节日中使用 Alsa 或 Pulse-audio 并指给我一些Arch 论坛,其中指出要使用 Alsa 或 Pulse-Audio 我们必须编辑~/.festivalrc文件,或者/usr/share/festival/festival.scm向其中添加一些行。

我添加了链接中提到的行,但仍然没有解决我的问题

因此,我需要你们的帮助。请帮助我更正此问题,以便即使在播放音乐或视频时,Cron 也会宣布时间。

Win*_*nix 3

根据这个答案:我可以使用 cron 像落地钟一样在整点报时吗?在 cron 脚本中播放声音之前,您需要导出环境变量:

export XDG_RUNTIME_DIR="/run/user/1000"
Run Code Online (Sandbox Code Playgroud)


Pab*_*chi 0

派珀

一种快速的本地神经文本转语音系统。检查站点项目的安装、语音下载和使用情况。例如:

echo 'Welcome to the world of speech synthesis!' | \
  ./piper --model blizzard_lessac-medium.onnx --output_file welcome.wav
Run Code Online (Sandbox Code Playgroud)

语音合成

gTTS ( Google Text-to-Speech ),一个 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
Run Code Online (Sandbox Code Playgroud)
  • 当然,可以根据您的需要更改文本和语言代码。
  • 其中 1000 是用户$UID/ id -u1
  • 安装:pip install gtts

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

另请检查基于 WaveNet 的替代方案,例如wavenet_vocoder