我正在尝试使用Web Audio Api为音乐编写自定义网络播放器,但是我遇到了解码音频的问题。AudioBuffer无法缓存/ decodeAudioData需要很长时间
我使用AudioContext.decodeAudioData函数从后端获取.mp3作为ArrayBuffer并对其进行解码。
const resp = await fetch(url);
const raw = await resp.arrayBuffer();
const audioBuffer = context.decodeAudioData(raw);
我试图缓存AudioBuffer在IndexedDB的,但它不是可克隆。我的设备上的解码需要大约10秒钟的时间,而且这个时间很长。除了预取和“预解码”之外,我还有其他选择来防止歌曲之间漫长的等待时间吗?
难道您不能将数据作为流获取并将其解码为部分? – Nit
在部分解码它似乎相当复杂,因为javascript时钟非常不准确。我试过了,但我无法阻止音频片断之间的crack ling声。此外,该文件说:。 “异步解码包含在ArrayBuffer音频文件数据在这种情况下,ArrayBuffer通常是从一个XMLHttpRequest的响应属性加载设置的responseType到arraybuffer后,此方法仅适用于完整的文件,而不是碎片音频文件“。 https://developer.mozilla.org/de/docs/Web/API/AudioContext – Lucas