audioContext.decodeAudioData页面重载后仅首次生效,后续调用解码报错
问题根源解析
- Blob URL的一次性本质:你使用的
blob:http://127.0.0.1:1234/6d25b61d-9799-4814-baba-13bb3a988dfd这类格式的URL是浏览器临时生成的一次性资源引用。第一次通过fetch()读取完对应的Blob数据后,这个URL就会被浏览器自动回收失效。后续再用同一个URL发起请求时,拿到的是残缺甚至空的数据流,decodeAudioData自然会解码失败。 - Web URL正常的原因:普通Web URL指向的是服务器上持久存储的资源,每次请求都能获取到完整的音频数据,因此多次创建
Tone.Player实例都能正常工作。 - 和Web Workers无关:你的怀疑不成立,问题根源不在Web Workers,而是Blob URL本身的生命周期规则——它仅在创建它的文档上下文内有效,一旦Blob数据被读取完成,URL就会被释放,无法再次使用。
- 单独创建AudioContext无效的原因:AudioContext只是负责音频处理的运行环境,无法改变Blob URL已失效的事实。不管创建多少个AudioContext,请求失效的Blob URL得到的都是无效数据,解码必然失败。
内容的提问来源于stack exchange,提问作者The doobverse
相关产品推荐
相关产品推荐

