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

使用Wavesurfer.js加载S3音频遇解码及Blob加载问题求助

问题

尝试渲染从S3存储桶获取的音频文件波形,使用wavesurfer.load()加载URL时出现错误:

Uncaught (in promise) DOMException: Failed to execute 'decodeAudioData' on 'BaseAudioContext': Unable to decode audio data.

为转换为Wavesurfer.js可解码的格式,尝试将URL音频转为Blob,代码如下:

let url = "my-s3-url";
function loadAudioFromUrl(url) {
    fetch(url)
        .then(response => {
            if (!response.ok) {
                throw new Error('Network response was not ok');
            }
            return response.arrayBuffer(); // Convert response to ArrayBuffer
        })
        .then(arrayBuffer => {
            // Load audio data into wavesurfer.js from the ArrayBuffer
            let x = new Blob([arrayBuffer]);
            wavesurfer.loadBlob(x);
        })
        .catch(error => {
            console.error('Error fetching or loading audio:', error);
        });
}
loadAudioFromUrl(url)

执行后出现错误:

GET http://127.0.0.1:5500/blob 404 (Not Found)

已确认S3生成的是预签名URL且允许跨域访问,Blob已成功生成,但Wavesurfer.js仍无法渲染,求解决方案。

解决方法

  • 指定Blob的MIME类型
    创建Blob时必须明确音频的MIME类型,否则Wavesurfer.js无法识别格式。可以直接指定(比如MP3用audio/mpeg),也可以从fetch响应头自动获取:

    fetch(url, { mode: 'cors' })
        .then(response => {
            if (!response.ok) throw new Error('Network response was not ok');
            const contentType = response.headers.get('Content-Type');
            return { buffer: response.arrayBuffer(), type: contentType };
        })
        .then(({ buffer, type }) => {
            const audioBlob = new Blob([buffer], { type });
            wavesurfer.loadBlob(audioBlob);
        })
    
  • 直接加载ArrayBuffer
    Wavesurfer.js支持直接加载ArrayBuffer,无需转成Blob,可避免Blob URL解析问题:

    .then(arrayBuffer => {
        wavesurfer.loadArrayBuffer(arrayBuffer);
    })
    
  • 验证音频文件完整性
    将S3预签名URL直接粘贴到浏览器地址栏,确认能正常播放,排除文件本身损坏或格式不兼容的问题。

  • 确保fetch跨域配置正确
    即使S3允许跨域,fetch请求需显式指定mode: 'cors',避免浏览器默认的同源策略限制:

    fetch(url, { mode: 'cors' })
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 07:02:41