通过云从命令行进行文字转语音 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 中测试。
我正在尝试定义一个单行别名,如下所示:
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 中测试。