我正在使用 Electron 和 Web Audio API 创建音频播放器。我当前用于打开和播放音频文件的方法如下:
具有本机对话窗口的用户选择音频文件-它将文件路径加载到本地存储(应用程序存储)
单击“播放按钮”将读取文件并将其转换为数组缓冲区,以便该文件可用于Web Audio API。
const buffer = toArrayBuffer(fs.readFileSync(filePath));
const audioBuffer = await ctx.decodeAudioData(buffer);
const soundNode = new AudioBufferSourceNode(ctx, { buffer:
audioBuffer });
通常,它可以正常工作。当我使用5MB以上的文件时,上面显示的打开和转换往往会花费太多时间。 例如,打开9MB文件花费了大约3秒。这种解决方案是不可接受的,我还有其他问题。
答案 0 :(得分:0)
音频文件解码需要很长时间,因为调用decodeAudioData
要求它一次将所有文件完全解码为原始PCM。如果有人尝试打开一个长达几个小时的音频文件,那么它将在时间和内存方面对您的应用造成可怕的后果。相反,您可以看一下MediaElementAudioSourceNode,它可以将<audio>
元素用作Web Audio的来源:
https://developer.mozilla.org/en-US/docs/Web/API/MediaElementAudioSourceNode