Windows 10下IBM Watson Text to Speech curl示例生成的音频无声音
无法生成可播放的IBM Watson Text to Speech音频的修正方案
问题根源
当前使用的curl请求存在两处硬性错误,最终写入本地的文件并非有效音频数据,无法正常播放:
- 已声明
Content-Type: application/json请求头,但实际传输的请求体不符合JSON语法规范- 原请求传入的内容为
text:hello world形式的纯文本键值对,并非合法JSON结构,服务端会直接返回包含报错信息的JSON文本响应,而非音频二进制流。这部分文字响应被强行写入带音频后缀的本地文件,文件本质是错误提示文本,不存在任何音频编码数据。
- 原请求传入的内容为
- 缺失指定返回音频格式的
Accept请求头- IBM Watson Text to Speech接口完全依赖
Accept头的取值判断需要返回的音频编码格式,未显式指定时,接口不会自动匹配你本地设置的输出文件后缀,大概率返回格式不兼容的内容甚至错误响应。
- IBM Watson Text to Speech接口完全依赖
可正常生成可播放音频的修正命令
curl -X POST \ -u "apikey:{你的API密钥}" \ --header "Content-Type: application/json" \ --header "Accept: audio/ogg; codecs=opus" \ --data '{"text": "hello world"}' \ --output hello_world.ogg \ "{你的服务实例地址}/v1/synthesize/"
关键调整说明
- 将原请求体替换为符合JSON规范的字符串,匹配已设置的
Content-Type要求,确保服务端能正确解析待合成的文本内容- Windows cmd环境下,JSON字符串内的双引号需要做转义处理,对应写法为
--data "{\"text\": \"hello world\"}" - Windows PowerShell环境下,可直接使用单引号包裹JSON内容,写法为
--data '{"text": "hello world"}'
- Windows cmd环境下,JSON字符串内的双引号需要做转义处理,对应写法为
- 新增对应目标格式的
Accept请求头,不同格式对应取值调整即可:- 生成MP3文件:将
Accept值替换为audio/mp3,同时把--output的文件后缀改为.mp3 - 生成WAV文件:将
Accept值替换为audio/wav,同时把--output的文件后缀改为.wav - 生成OGG文件:保留
Accept: audio/ogg; codecs=opus,和当前设置的输出文件后缀匹配
- 生成MP3文件:将
快速排查方法
如果调整完参数仍无法正常播放,可暂时去掉--output参数,直接在终端查看接口返回内容:如果返回内容是不可读的二进制乱码,说明是正常音频流;如果返回是带字段的可读JSON文本,说明仍存在参数错误,可直接根据返回的报错提示修正。
内容的提问来源于stack exchange,提问作者John Sinkiewicz
相关产品推荐
相关产品推荐

