You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在JavaScript中播放Azure TTS REST API返回的指定格式音频?

解决Azure TTS REST API音频响应播放问题

你遇到的问题核心是请求未正确获取二进制数据,以及Blob的MIME类型设置不够标准。以下是可行的解决步骤:

关键修正点

  • 请求必须指定responseType: 'arraybuffer',否则返回的音频数据会被解析为字符串,破坏二进制结构
  • MP3标准MIME类型是audio/mpeg(部分浏览器兼容audio/mp3,但用标准类型更稳妥)

完整实现代码示例

// 假设用axios发送请求
axios.post('https://eastus.tts.speech.microsoft.com/cognitiveservices/v1', {
    // TTS请求体内容(如text、voice等参数)
}, {
    headers: {
        'Ocp-Apim-Subscription-Key': '你的订阅密钥',
        'Content-Type': 'application/ssml+xml',
        'X-Microsoft-OutputFormat': 'audio-24khz-160kbitrate-mono-mp3'
    },
    responseType: 'arraybuffer' // 必须设置这个!
})
.then(res => {
    // 创建Blob对象
    const audioBlob = new Blob([res.data], { type: 'audio/mpeg' });
    // 创建可播放的音频URL
    const audioUrl = URL.createObjectURL(audioBlob);
    
    // 方式1:用原生Audio对象播放
    const audio = new Audio(audioUrl);
    audio.play().catch(err => console.error('播放失败:', err));
    
    // 方式2:绑定到页面已有的audio标签
    // document.getElementById('your-audio-element').src = audioUrl;
})
.catch(err => console.error('请求失败:', err));

错误排查

  1. 检查API返回状态码:确保是200 OK,若返回4xx/5xx,先排查请求参数、密钥、区域是否正确
  2. 验证Blob数据:通过audioBlob.size查看数据大小,若为0或异常小,说明请求未正确获取数据
  3. 清理内存:播放完成后调用URL.revokeObjectURL(audioUrl)释放资源,避免内存泄漏

内容的提问来源于stack exchange,提问作者gOliveiraC

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 19:50:25