文件解压内存占用

Posted

技术标签:

【中文标题】文件解压内存占用【英文标题】:File decompression memory footprint 【发布时间】:2011-09-25 16:11:47 【问题描述】:

我想在 ios 上离线处理音频,但对内存使用情况有疑问。如果我使用 AVAssetReader 将 MP3 解压缩为原始 PCM 数据,那么内存占用会很大。那么,如果解压缩会导致应用程序使用太多内存,我将如何处理(离线 FFT)一个 mp3 文件?我想我必须以某种方式流式传输它,但我不知道如何在 iOS 中执行此操作。

【问题讨论】:

【参考方案1】:

AVAssetReader 可以使用 AVAssetWriter 写入文件。

要获取 PCM,您可以编写 WAV 文件格式,然后在读取时跳过 RIFF 标头。然后,您只需要在任何时候将尽可能多的数据从 WAV 文件拉入内存,只要您的 FFT 长度需要。如果每个 FFT 的样本长度远远超过 100 万,这只会导致内存占用问题。

您可以使用 C/unix posix 调用(fgetc 等)在 iOS 下读取文件流。或者从 NSInputStream 读取到 NSData。

【讨论】:

所以,为了澄清,我应该首先执行转换并将其写入磁盘上的临时文件。如果然后我在每个循环中读取窗口数量的样本(例如 1024),我应该在哪里存储所有 FFT 数据而不会被覆盖?我假设我需要一个外部缓冲区,因为 Accelerate FFT 执行就地功能,但是我如何计算这个外部缓冲区的大小,因为我不知道高级?它只是以秒为单位的 44100 * 歌曲持续时间吗?感谢您的回复。 这可能取决于您想对 FFT 结果做什么。 我想创建一个频谱可视化工具,但不是实时的。即我想对整个事情进行预处理。

以上是关于文件解压内存占用的主要内容,如果未能解决你的问题,请参考以下文章

Unity音频资源小结

Unity音频资源小结

代码占用少的压缩算法

如何用7-Zip 把文件压缩成rar文件???

文件压缩与解压

文件内存太大,怎么压缩变小