通过云API从命令行进行文本到语音的转换

问题描述 投票:-1回答:1

我试图定义一个单行的别名,比如下面。

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在Unixen中的应用。

bash curl command-line-interface string-interpolation
1个回答
0
投票

我发现了一个使用bash函数代替别名的变通方法。函数 marySpeak 取一个字符串,将其发送到网上的TTS,然后用 mpv. 所有的东西都被定义为一条线,所以可以放在你的。.bashrc:

marySpeak() { curl -s -G --data-urlencode "text=$1" "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!"

在GNULinux和macOS中测试。

© www.soinside.com 2019 - 2024. All rights reserved.