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