【发布时间】:2019-11-02 12:45:38
【问题描述】:
我正在使用 Electron 和 Web Audio API 创建音频播放器。我目前打开和播放音频文件的方法如下:
具有本机对话窗口的用户选择音频文件 - 它将文件路径加载到本地存储(应用程序商店)
单击“播放按钮”会读取文件并将其转换为数组缓冲区,以便 Web 音频 API 可以接受该文件。
const buffer = toArrayBuffer(fs.readFileSync(filePath));
const audioBuffer = await ctx.decodeAudioData(buffer);
const soundNode = new AudioBufferSourceNode(ctx, { buffer:
audioBuffer });
通常,它工作得很好。当我使用超过 5MB 的文件时,上面显示的打开和转换往往会花费太多时间。 例如打开 9MB 文件大约需要 3 秒。这个解决方案是不可接受的,我还有一些其他问题。
- 在第 1 步(打开对话框)中打开音频文件时,是否应该将它们“预加载”到本地存储?
- Electron 与 Web 音频 API 的效率是否不足以创建快速处理本地文件的桌面播放器? (希望不会)
【问题讨论】:
-
@NoGrabbing 无论如何都不会回答这个问题。
-
音频文件需要很长时间才能解码,因为通过调用
decodeAudioData您要求它一次将所有文件完全解码为原始 PCM。如果有人试图打开一个长达数小时的音频文件,它会对你的应用程序造成可怕的影响,无论是时间还是内存。相反,您可以查看一个可以将 -
@1valdis 它完成了这项工作。不知道
标签逐渐解码音频文件。像失谐这样的一些处理现在可能更加困难,但它可以帮助我进一步推进我的项目。谢谢! -
@libros 如果您的问题得到解决,我可以将我的评论作为您接受的答案,我应该接受吗?
标签: javascript audio electron signal-processing web-audio-api