音频播放器会预加载音频文件吗?

时间:2019-06-19 17:56:05

标签: javascript audio electron signal-processing web-audio-api

我正在使用 Electron Web Audio API 创建音频播放器。我当前用于打开和播放音频文件的方法如下:

  1. 具有本机对话窗口的用户选择音频文件-它将文件路径加载到本地存储(应用程序存储)

  2. 单击“播放按钮”将读取文件并将其转换为数组缓冲区,以便该文件可用于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秒。这种解决方案是不可接受的,我还有其他问题。

  • 在步骤1(打开对话框)中打开音频文件时,是否应该将它们“预加载”到本地存储中?
  • 带有Web Audio API的Electron是否不够高效,无法创建可快速处理本地文件的桌面播放器? (我希望不是)

1 个答案:

答案 0 :(得分:0)

音频文件解码需要很长时间,因为调用decodeAudioData要求它一次将所有文件完全解码为原始PCM。如果有人尝试打开一个长达几个小时的音频文件,那么它将在时间和内存方面对您的应用造成可怕的后果。相反,您可以看一下MediaElementAudioSourceNode,它可以将<audio>元素用作Web Audio的来源:

https://developer.mozilla.org/en-US/docs/Web/API/MediaElementAudioSourceNode