请求提供JavaScript代码:将AJAX返回的RIFF/WAVE二进制代码转为.wav文件
解决AJAX获取RIFF/WAVE二进制数据转可播放可保存WAV文件的问题
你的核心问题是AJAX请求默认将响应解析为文本,导致二进制音频数据被错误编码破坏,无法直接使用。以下是修正后的完整实现代码,包含播放和本地保存功能:
$.ajax({ url: "http://216.48.183.26/convert", type: "POST", contentType: "application/json", // 关键配置:指定响应为二进制Blob类型,避免数据损坏 xhrFields: { responseType: 'blob' }, data: JSON.stringify({ "text": "My Name is Usman Tahir. I am living in Lahore, Pakistan. Thank You.", "voice": "gabby_reading", "seed": 3, "rate": 16000 }), success: function (audioBlob) { // 生成可播放的音频实例 const audioUrl = URL.createObjectURL(audioBlob); const audio = new Audio(audioUrl); // 注意:浏览器可能限制自动播放,需用户交互后触发(比如绑定按钮点击事件) audio.play().catch(err => console.log("播放失败:", err)); // 生成下载链接,允许用户保存到本地 const downloadBtn = document.createElement('a'); downloadBtn.href = audioUrl; downloadBtn.download = 'voice-output.wav'; downloadBtn.textContent = '点击下载音频文件'; document.body.appendChild(downloadBtn); }, error: function (jqXHR, textStatus, errorThrown) { console.log(jqXHR); console.log(textStatus); console.log(errorThrown); } });
关键说明
- 移除无效请求头:删掉了
headers: { 'Access-Control-Allow-Origin': '*' },这个是服务器端需要配置的响应头,客户端设置无意义,反而可能引发请求异常。 - 指定响应类型:添加
xhrFields: { responseType: 'blob' },强制浏览器将响应作为二进制Blob对象处理,避免文本解析破坏音频数据结构。 - Blob转可用URL:使用
URL.createObjectURL()将Blob转换为浏览器可识别的临时URL,既可以用于Audio元素播放,也可以作为下载链接的地址。
注意事项
- 浏览器自动播放限制:多数现代浏览器禁止未经过用户交互的自动播放,建议将播放逻辑绑定到按钮点击等用户操作事件上。
- CORS验证:确保目标服务器已正确配置
Access-Control-Allow-Origin等跨域响应头,否则请求会被浏览器拦截。
内容的提问来源于stack exchange,提问作者Usman Tahir
相关产品推荐
相关产品推荐

