首页 > 解决方案 > iOS 内存崩溃上的 Web 音频 API

问题描述

我们正在使用 Web Audio API 在 Web 应用程序中播放和操作音频。在尝试解码大型 mp3 文件(大约 5MB)时,iPad 上的 Safari 中的内存使用量会激增,如果我们加载另一个类似大小的文件,它就会崩溃。

除非我们使用小文件,否则在 iPad 上运行时,似乎 Web Audio API 并不能真正使用。

请注意,相同的代码在 Chrome 桌面版本上运行良好 - Safari 版本确实抱怨内存使用率高。

有谁知道如何解决这个问题?或者在 iPad 上使用 Web Audio 播放音频文件的内存限制是多少?

谢谢!

标签: iosaudioweb-audio-api

解决方案


解码后的音频文件在 RAM 中的重量比在磁盘中的重量要大得多。单个样本使用4 个字节(32 位浮点数)。这意味着 230 MB 的 RAM 可用于 10 分钟的 48 000 Hz 采样率和立体声音频。以相同的采样率和立体声播放一小时的音频将需要大约 1.3 GB 的 RAM!

因此,如果您解码大量文件,则可能会消耗大量 RAM。我的建议是“解码”您不需要的文件(只需“忘记”不需要的音频缓冲区,这样垃圾收集器就可以释放内存)。

您还可以使用单声道音频文件代替立体声,这样可以将内存使用量减少一半。

请注意,解码的音频文件总是重新采样到设备的采样率。这意味着使用低采样率的音频无助于内存使用。


推荐阅读