0

对于我的应用程序,当用户在其中导航时,我需要在后台播放音乐。所以,从 MixerHost 开始,我开发了一个可以同时播放 8 个音轨的混音器。尽管如此,它还是会消耗大量内存,因为 8 个音轨文件完全加载在 8 个缓冲区中。

为了限制内存消耗,我一开始只加载一小块数据,然后在回调中输入新数据

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

它工作得很好,但有时播放会短暂暂停。我知道问题的根源:在回调中进行 FS 访问。

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

4

1 回答 1

1

通常处理这种情况的方式是使用共享的环形缓冲区。环形缓冲区就像实时渲染线程和慢速磁盘访问之间的减震器。创建一个新线程,它只从文件中读取音频并将其存储在环形缓冲区中。然后,在您的渲染回调中,只需从环形缓冲区中读取。

Apple 提供了一个适用于音频单元的环形缓冲区的实现,称为 CARingBuffer。它在 /Developer/Extras/CoreAudio/PublicUtility/CARingBuffer 中可用。

于 2011-08-05T12:09:34.443 回答