2011-09-25 87 views
1

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

回答

0

AVAssetReader可以使用AVAssetWriter写入文件。

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

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

+0

所以,为了澄清,我应该先执行转换并将其写入磁盘上的临时文件。如果我然后在每个循环中读取窗口数量的样本(例如1024),那么我在哪里存储所有FFT数据而不覆盖它?我假设我需要一个外部缓冲区,因为加速FFT执行就地功能,但是我怎么计算这个外部缓冲区有多大,因为我不知道在高级?它会在几秒钟内完成44100 *歌曲的播放时间吗?谢谢回复。 – Skoder

+0

这可能取决于你想要用FFT结果做什么。 – hotpaw2

+0

我想创建一个光谱可视化器,但不是实时的。即我想预先处理整个事情。 – Skoder