无法将任何 SSML 标记应用于 IBM Watson 的文本到语音系统中的文本,使用 CURL

问题描述

我成功地使用 IBM Watson 通过 CURL 与 Michael 或 Allison 生成声音,但是一旦我尝试在文本中放置任何 标签(例如或任何 ),它就会失败,无论是 GET 还是 POST。我在这里找到了一些答案(包括 How do I adjust the speed of speech in Watson's Text to Speech service,via curl?),但是,我尝试的任何方法都失败了。例如,我以这种方式尝试了一个中断代码

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&amp;text=&lt;voice-transformation rate=&quot;slow&quot;&gt;Hello%20world&lt;voice-transformation rate=&quot;slow&quot;&gt;&amp;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 虽然 &lt; 也可以工作

'>' 作为 %3E 虽然 &gt; 也可以工作