通过云从命令行进行文字转语音 API

Text-to-speech from the command line via cloud API

我正在尝试定义一个单行别名,如下所示:

alias speak='curl -G --data-urlencode "text=$(cat /dev/stdin)" "https://speech.botiumbox.com/api/tts/en?&tts=marytts" -H "accept: audio/wav" | mpv -'

这样我就可以像这样使用它

echo Hello World! | speak
speak Hello World!
speak<RET> # continuously do TTS per line until ^D
Hello World!
Another line!
<Ctrl-D>

我正在使用的 API 如果我使用

curl -G --data-urlencode "text=Hello World!" "https://speech.botiumbox.com/api/tts/en?&tts=marytts" -H "accept: audio/wav" | mpv -

如上所示,仅通过 cat /dev/stdin 获取标准输入似乎无法创建交互式 CLI 程序。将此 API 包装到交互式 CLI 程序中有什么想法吗?理想情况下,是 POSIX 兼容的,所以它可以 运行 在 bash shell 中 shell 在 Unixen 中。

我找到了一个使用 bash 函数而不是别名的解决方法。函数 marySpeak 接受一个字符串,在线发送它用于 TTS,然后用 mpv 播放它。一切都被定义为单行,所以可以放在你的 .bashrc:

marySpeak() { curl -s -G --data-urlencode "text=" "https://speech.botiumbox.com/api/tts/en?&tts=marytts" -H "accept: audio/wav" | mpv - 2>&1 > /dev/null; } 

# then simply use it like this
marySpeak "hello world!"

已在 GNU/Linux 和 macOS 中测试。