问题描述
我成功地使用 IBM Watson 通过 CURL 与 Michael 或 Allison 生成声音,但是一旦我尝试在文本中放置任何 标签(例如或任何
curl -X POST -u "apikey:{MYKEY}" --header "Content-Type: application/json" --header "Accept: audio/wav" --data "{\"text\":\"hello <break strength='500ms'></break> hello world\"}" --output hello_world.wav "https://api.us-east.text-to-speech.watson.cloud.ibm.com/{MYINSTANCE}/v1/synthesize?voice=en-US_AllisonVoice"
我得到的错误是:“
curl -X GET -u "apikey:{apikey}" --output hello_world.wav "{url}/v1/synthesize?accept=audio%2Fwav&text=<voice-transformation rate="slow">Hello%20world<voice-transformation rate="slow">&voice=en-US_AllisonV3Voice"
...正如上述页面上的一位回答者所建议的那样。
我还尝试了各种尝试对 标签进行 urlencode,使用不同的语音转换标签,或者没有,或者只是中断,我尝试使用单引号和双引号,转义与否等......通常要么返回
{ "error": "错误的请求。(HAP)",“代码”:400, "code_description": "错误的请求" }
或:“系统找不到指定的文件”,或“
所以我希望我可以使用所有这些 SSML 更改,但到目前为止,我一直无法使用 curl 来做到这一点。希望有人知道怎么做。
P.S.:我通过在 Windows 的命令行和使用 PuTTy 的 linux 服务器上粘贴我的完整请求来尝试它。
解决方法
参考 curl 手册 - https://curl.se/docs/manual.html
帖子数据必须经过urlencoded。 ... 数据必须是正确的 URL 编码。这意味着你用 + 替换空格,然后替换 带有 %XX 的奇怪字母,其中 XX 是 字母的 ASCII 码。
这意味着你需要编码
<
作为 %3C
虽然 <
也可以工作
'>' 作为 %3E
虽然 >
也可以工作