千问语音合成已经返回成功,保存出来的“音频”却不能播放,先检查你保存的是声音文件还是接口 JSON。本文针对百炼北京地域 Qwen-Audio-TTS 非流式调用,用一句虚构播报跑通请求、取下载地址与保存文件三个步骤。依据 2026 年 10 月 15 日官方资料整理,未在读者账号实测,API 调用可能产生费用。
1. JSON 响应不是可以直接播放的音频
非流式合成接口返回一个描述结果的对象,其中包含完整音频的下载地址。把这份 JSON 文本写进 demo.wav,不会把它变成 WAV 音频;修改扩展名也不会转换内容格式。
当前官方 Qwen-Audio-TTS HTTP 文档说明,完整音频地址位于 output.audio.url,有效期为二十四小时,非流式时 audio.data 为空。HTTP API 参考 首次任务可先采用非流式,不处理音频分块和实时播放。
最短路线是:调用合成接口,确认成功与正常结束,取出下载地址,及时下载声音文件,再试听内容。每一步都有独立产物,接口返回成功与本地文件保存成功需要分别确认。
本文采用当前官方示例中的 qwen-audio-3.0-tts-flash 与系统音色 longanhuan_v3.6,输出显式指定 wav 和 24000 采样率。音色与模型的可用组合应以当前账号及文档为准,不能把另一系列的音色名随意混用。
2. 用一句测试播报取得结果地址
准备一个测试目录,创建 request.json。这里不放真实姓名、联系方式或业务通知,使用下面自行编写的短文本。
{"model":"qwen-audio-3.0-tts-flash","input":{"text":"这是一条测试播报,演示编号是三十六。","voice":"longanhuan_v3.6","format":"wav","sample_rate":24000}}在自己的终端设置 DASHSCOPE_API_KEY 和 TTS_ENDPOINT。后者从北京业务空间配置获取,应是 SpeechSynthesizer 完整接口地址,不能使用聊天补全接口或另一系列的合成端点。请求示例在测试目录运行:
curl--fail-with-body --max-time90\-H"Authorization: Bearer$DASHSCOPE_API_KEY"\-H'Content-Type: application/json'\--data-binary @request.json\"$TTS_ENDPOINT"-oresponse.json示例未实际发起请求,也没有展示虚构成功日志。运行后先查看 HTTP 状态与 response.json;合成失败时停止,不进入下载步骤。确认 output.finish_reason 正常结束,再找到 output.audio.url。
不要在文章评论里粘贴真实密钥或带签名的下载地址。后者虽然有时效,也可能在有效期内允许别人下载你的音频。求助时保留字段名与脱敏请求编号即可。
3. 将声音文件与结果说明分别保存
把刚取得的音频 URL 在自己的浏览器中打开,使用正常下载功能保存为 test-36.wav。也可以用你已有的可信下载工具,但不要对网上任意给出的 URL 自动下载并执行。本文不运行第三方下载脚本。
如果使用终端下载,先核对它确实是本次接口返回的音频地址,再把它作为一个完整、带引号的参数传入下载工具。不要去掉查询参数,因为签名和过期时间可能就在其中;也不要在下载请求上附带合成 API 的认证头。
下载后查看文件大小与实际类型。文本编辑器打开后出现 JSON 或错误 XML,说明保存了错误响应,不能因为名字以 wav 结尾就算成功。正常 WAV 通常包含 RIFF 与 WAVE 格式标识,但格式标识正确也不代表内容完整,最终仍要试听。
| 文件或字段 | 用途 | 不应做什么 |
|---|---|---|
| response.json | 保存合成结果说明 | 改名当作音频播放 |
| output.audio.url | 在有效期内取得完整文件 | 当成永久业务地址 |
| test-36.wav | 下载后的声音文件 | 只凭扩展名判断成功 |
| expires_at | 判断地址时效 | 忽略过期继续反复下载 |
官方非实时合成指南也区分非流式文件地址与流式音频数据。非实时语音合成指南 两种输出不能用同一个“把所有内容写成 WAV”的办法处理。
4. 下载失败、播放失败与读音问题分开查
地址已经过期,不要先修改播放器;应根据自己的任务记录判断是否需要重新合成。重新合成可能再次计费,因此先确认是否已有本地文件或业务存储副本,不因为某次下载失败就循环发起合成。
下载得到空文件,查看下载状态和是否发生中断。文件非空但播放器拒绝,检查实际格式是否与请求一致,以及是否误保存了错误页面。没有完成下载的部分文件,应明确标为未完成,不要作为正式素材交付。
能播放但内容不对,核对本次输入文本与文件对应关系。多个测试文件使用不同编号,能避免把旧音频当作新结果。若只改文本却继续打开旧下载地址,听到旧内容并不是模型忽略新请求。
读音不符合预期属于合成质量问题,需要检查语言、音色和文本表达;它与文件能否下载是不同层次。首次只用简短普通中文,等文件链路稳定后,再加入多音字、缩写、情绪和长句等控制变量。
5. 给首次任务定义一个完整结束点
验收至少包括:合成请求成功、取得未过期地址、下载得到正确格式文件、试听能听见测试编号。只记录请求成功会遗漏保存环节;只看到播放器开始播放,也不代表声音已经完整保存到本地。
如果后续要长期使用,把下载后的声音文件存入你有权限的业务存储,并记录生成参数与来源。服务返回的临时链接不应直接成为长期页面里的唯一素材地址,否则过期后页面就可能失去声音。
保留模型名、音色、格式、采样率、生成时间和请求编号,方便区分不同版本。对外使用时说明音频为 AI 合成,沿用相关平台的标识要求。本文只使用系统音色,不涉及模仿真实人物声音。
试听时从头播放到结尾,确认最后的编号没有截断。若音频能打开但只播出开头,仍应视作任务未完成,核对输入文本、正常结束状态和下载完整性。保存后的文件应使用独立名称,避免新测试覆盖仍需要保留的旧素材。
第一次跑通后,再考虑自动下载与批量任务,并为失败重试设置明确边界。文件接口最容易混淆的是“收到说明”和“拿到文件”;把两者拆开验证,能让不能播放的问题更快定位。
参考资料
- Qwen-Audio-TTS HTTP API,阿里云百炼,更新时间未显示。
- 非实时语音合成,阿里云百炼,更新时间未显示。访问于 2026-10-15。