是否有可能直接加载一个压缩的audio文件到缓冲区,没有转换?

我正在开发iOS应用程序,它必须同时处理几个立体声audio文件(持续时间从几秒到四分钟不等),同时播放多达三个立体声audio文件,并通过基于多通道混音器的AUGraph进行同步。 我的audio文件被压缩 – 无论是MP3,AAC或CAF – 但是当他们被加载到缓冲区转换为32位AudioUnitSampleType格式(我的代码是基于苹果的iPhoneMultichannelMixerTest )。 不用说,用这么大的缓冲区,应用程序的内存很快就成了一个问题。

苹果的文档指出,iOS设备可以一次解码一个硬件MP3 / AAC文件,推荐CAF(IMA4)格式的其他文件需要软件解码。 在开发一个用于在播放过程中dynamic加载audio的系统之前,我想知道是否可以直接将压缩文件加载到缓冲区(从而显着降低内存需求),并让我的AUGraph在运行中将其转换。

要回答我自己的问题,如果所有人都需要精确的audio回放同步,没有使用audio单元处理的自定义处理,那么一定要看看AVFoundation的AVPlayer , AVAsset和AVComposition类。

虽然这种方法看起来更适合于video播放,但仅使用audio资源就能很好地工作。 这些类使用less量内存来处理媒体资源(包括CAF,AAC和MP3)的所有加载和缓冲,并且可以使用AVURLAssetPreferPreciseDurationAndTimingKey紧密同步。 此外,它还有一些有用的callback方法,可以设置为在回放期间的特定时间调用(用于更新UI等等)。 最后,随着它在Mac(10.7+)上可用,这是通用cocoa开发的一个很好的解决scheme。