Javascript AudioBuffer不可缓存/解码AudioData耗时太长
我正在尝试使用web音频Api为音乐编写一个自定义web播放器,但在解码音频时遇到了问题 我正在从后端获取.mp3作为ArrayBuffer,并使用AudioContext.decodeAudioData函数对其进行解码Javascript AudioBuffer不可缓存/解码AudioData耗时太长,javascript,web-audio-api,Javascript,Web Audio Api,我正在尝试使用web音频Api为音乐编写一个自定义web播放器,但在解码音频时遇到了问题 我正在从后端获取.mp3作为ArrayBuffer,并使用AudioContext.decodeAudioData函数对其进行解码 const resp = await fetch(url); const raw = await resp.arrayBuffer(); const audioBuffer = context.decodeAudioData(raw); 我试图将音频缓冲区缓存在I
const resp = await fetch(url);
const raw = await resp.arrayBuffer();
const audioBuffer = context.decodeAudioData(raw);
我试图将音频缓冲区缓存在IndexedDB中,但它不可关闭。在我的设备上,用一个普通的mp3解码大约需要10秒钟,这相当长。除了预取和预录制之外,我还有其他选择来防止歌曲之间的长时间等待吗?音频缓冲区不适用于大块音频
此接口表示用于单发声音和其他短音频剪辑的内存驻留音频资源。其格式为非交错IEEE 32位线性PCM,标称范围为-1->+1。它可以包含一个或多个通道。通常,预计PCM数据的长度相当短,通常不到一分钟。对于较长的声音,如音乐配乐,流媒体应与audio元素和MediaElementAudioSourceNode一起使用
重点矿山
您可能想研究一下是否需要实时处理音频。否则,一个简单的音频元素就足够了。音频缓冲区不适用于大块音频
此接口表示用于单发声音和其他短音频剪辑的内存驻留音频资源。其格式为非交错IEEE 32位线性PCM,标称范围为-1->+1。它可以包含一个或多个通道。通常,预计PCM数据的长度相当短,通常不到一分钟。对于较长的声音,如音乐配乐,流媒体应与audio元素和MediaElementAudioSourceNode一起使用
重点矿山
您可能想研究一下是否需要实时处理音频。否则,一个简单的音频元素就足够了。难道你不能将数据作为一个流提取出来并对其进行部分解码吗?对其进行部分解码似乎相当复杂,因为javascript时钟非常不准确。我试过了,但我无法阻止音频片段之间的噼啪声。此外,文档还说明:异步解码ArrayBuffer中包含的音频文件数据。在这种情况下,通常在将responseType设置为ArrayBuffer后,从XMLHttpRequest的response属性加载ArrayBuffer。此方法仅适用于完整的文件,而不适用于音频文件的片段。你不能把数据作为一个流来提取,然后对它进行部分解码吗?对它进行部分解码似乎相当复杂,因为javascript时钟非常不准确。我试过了,但我无法阻止音频片段之间的噼啪声。此外,文档还说明:异步解码ArrayBuffer中包含的音频文件数据。在这种情况下,通常在将responseType设置为ArrayBuffer后,从XMLHttpRequest的response属性加载ArrayBuffer。此方法仅适用于完整的文件,而不适用于音频文件的片段。哦,该死,所以我完全滥用了decodeAudioBuffer方法。感谢您的澄清,我将尝试使用html元素实现播放器。@Prinzhorn,MediaElementAudioSourceNode似乎打算与HTML5结合使用。是否有一个Node.js模块用于播放较长的音频,我可以与Web audio Api模块一起使用以播放较短的声音?@WesModes您在节点进程中具体如何处理音频?根据用例的不同,这可能不是一个好主意,因为对decodeAudioData的调用将阻塞整个节点过程。但是,如果这不是您的问题,例如,您生成了第二个进程,那么即使对于大文件,也只需使用decodeAudioData。如果音频文件是本地的,你就不必处理网络延迟,而你必须在浏览器中处理。哦,该死,所以我完全滥用了decodeAudioBuffer方法。感谢您的澄清,我将尝试使用html元素实现播放器。@Prinzhorn,MediaElementAudioSourceNode似乎打算与HTML5结合使用。是否有一个Node.js模块用于播放较长的音频,我可以与Web audio Api模块一起使用以播放较短的声音?@WesModes您在节点进程中具体如何处理音频?根据用例的不同,这可能不是一个好主意,因为对decodeAudioData的调用将阻塞整个节点过程。但是,如果这不是您的问题,例如,您生成了第二个进程,那么即使对于大文件,也只需使用decodeAudioData。如果音频文件是本地的,则不必处理网络延迟,而必须在浏览器中处理。