如何在使用音频单元时限制内存消耗

时间:2011-08-05 10:49:48

标签: iphone memory core-audio mixer

对于我的应用,当用户在其中导航时,我需要在背景上播放音乐。 因此,从MixerHost开始,我开发了一个能够同时播放8个音轨的音频混音器。然而,它消耗了大量内存,因为8个磁道文件完全加载到8个缓冲区中。

为了限制内存消耗,我在开始时只加载了一小部分数据,并且我在回调中提供了新数据

result = ExtAudioFileRead ( audioFileObject, &numberOfPacketsToRead, bufferList );

效果很好,但有时播放很快暂停。我知道问题的根源:在回调中进行FS访问。

但还有另一种限制内存消耗的解决方案吗?

1 个答案:

答案 0 :(得分:1)

通常使用共享环缓冲区来处理此方法。环形缓冲区就像实时渲染线程和慢速磁盘访问之间的减震器一样。创建一个新的线程,除了从文件中读取音频并将其存储在环形缓冲区中之外什么也不做。然后,在你的渲染回调中,只需从环形缓冲区中读取。

Apple提供了一种适用于Audio Unit的环形缓冲区实现,称为CARingBuffer。它可以在/ Developer / Extras / CoreAudio / PublicUtility / CARingBuffer中找到。