ios - iOS 内存崩溃上的 Web 音频 API
问题描述
我们正在使用 Web Audio API 在 Web 应用程序中播放和操作音频。在尝试解码大型 mp3 文件(大约 5MB)时,iPad 上的 Safari 中的内存使用量会激增,如果我们加载另一个类似大小的文件,它就会崩溃。
除非我们使用小文件,否则在 iPad 上运行时,似乎 Web Audio API 并不能真正使用。
请注意,相同的代码在 Chrome 桌面版本上运行良好 - Safari 版本确实抱怨内存使用率高。
有谁知道如何解决这个问题?或者在 iPad 上使用 Web Audio 播放音频文件的内存限制是多少?
谢谢!
解决方案
解码后的音频文件在 RAM 中的重量比在磁盘中的重量要大得多。单个样本使用4 个字节(32 位浮点数)。这意味着 230 MB 的 RAM 可用于 10 分钟的 48 000 Hz 采样率和立体声音频。以相同的采样率和立体声播放一小时的音频将需要大约 1.3 GB 的 RAM!
因此,如果您解码大量文件,则可能会消耗大量 RAM。我的建议是“解码”您不需要的文件(只需“忘记”不需要的音频缓冲区,这样垃圾收集器就可以释放内存)。
您还可以使用单声道音频文件代替立体声,这样可以将内存使用量减少一半。
请注意,解码的音频文件总是重新采样到设备的采样率。这意味着使用低采样率的音频无助于内存使用。
推荐阅读
- android - 向下滚动隐藏效果的 FloatingActionButton
- ios - Swift:从横向旋转时未对齐的大标题
- firebase - How to end user session via Firebase Function?
- objective-c - 如何检测麦克风正在使用 macOS
- javascript - 制表符 - 在编辑之前清除单元格的内容
- python - 使用python读取arduino数据太慢了,能不能加快速度?
- css - 是否可以在 Twitter-bootstrap 4 $theme-colors 数组中使用 CSS 变量?
- git - 当两个系统上的软件需要单独更新时,如何使用 git 跟踪 2 个系统(实时和测试)?
- asp.net - 使用 OleDb 的 MS Access 中的内部 OLE 自动化错误
- android - 如何将解析的 GSON 数据显示到 ListView 中?