【问题标题】:Do audio players preload audio files?音频播放器会预加载音频文件吗?
【发布时间】:2019-11-02 12:45:38
【问题描述】:

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

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

  2. 单击“播放按钮”会读取文件并将其转换为数组缓冲区,以便 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


【解决方案1】:

音频文件需要很长时间才能解码,因为通过调用 decodeAudioData 您要求它一次将所有文件完全解码为原始 PCM。如果有人试图打开一个长达数小时的音频文件,它会对你的应用程序造成可怕的影响,无论是时间还是内存。相反,您可以查看 MediaElementAudioSourceNode — 它可以将 <audio> 元素作为 Web 音频的源:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-11-16
    • 1970-01-01
    • 2012-08-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多