【问题标题】:Crashing web browser with more than 10 AudioContexts超过 10 个 AudioContext 的 Web 浏览器崩溃
【发布时间】:2015-01-08 20:43:10
【问题描述】:

我有一个很长的音频文件播放列表,我需要使用像 soundcloud 波形这样的波形来可视化它们。我使用wavesurfer 这样做,但是对于每个音频文件,它会消耗大约 60-100 MB 的内存,因此在播放一小部分之后浏览器会崩溃。

wavesurfer 使用来自Web AudioAudioContext,所以问题是如何将AudioContext 用于这么长的播放列表? > 10个音频文件一个接一个加载。如果 AudioContextWeb Audio 有任何替代方案,它是什么?

【问题讨论】:

    标签: javascript audio web-audio-api


    【解决方案1】:

    WebAudio 没有其他选择,AudioContext

    您需要设计您的工作流程,以免您的 JavaScript 应用程序导致浏览器崩溃。考虑只加载必要的资源并加载未处于活动编辑状态的资源的最小化版本,或者在需要时延迟加载资源,然后在使用后丢弃。

    如果 oyu 尝试在任何应用程序中加载 100 个音频文件,则会导致桌面和服务器崩溃,因为您只是内存不足。在这种情况下,不能使用幼稚的数据处理方法。

    如果需要,在服务器端预处理资源以获得更紧凑的格式。

    【讨论】:

    • 这是错字,他们是 10 个音频文件而不是 100 个
    • 如果您认为您没有耗尽内存,请将此问题报告给您的 Web 浏览器作者。但是 10 * 100 MB 的音频是 1 GB,这比 32 位机器的正常大设置要多,因此请使用您的操作系统工具检查内存使用情况。
    • 将音频处理成更小的格式和内存消耗非常简单,所以我建议你研究这些解决方案。
    • 将工作集保持在内存预算范围内。对音频进行下采样以减少内存消耗。
    • Web 音频 API 旨在与 1 个 AudioContext 一起使用。您应该尝试重构您的代码,以便所有曲目都在相同的上下文中播放。 Wavesurfer 允许您选择一个预先存在的 audioContext,而不是每次需要播放另一个文件时都创建一个新的。另外,您如何尝试释放内存?播放完曲目后,您是否使用 wavesurfer destroy() 方法?
    猜你喜欢
    • 1970-01-01
    • 2011-08-23
    • 1970-01-01
    • 1970-01-01
    • 2013-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多