文件解压内存占用
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 结果做什么。 我想创建一个频谱可视化工具,但不是实时的。即我想对整个事情进行预处理。以上是关于文件解压内存占用的主要内容,如果未能解决你的问题,请参考以下文章