Ios 是否可以将压缩音频文件直接加载到缓冲区而不进行转换?

Ios 是否可以将压缩音频文件直接加载到缓冲区而不进行转换?,ios,mp3,core-audio,caf,Ios,Mp3,Core Audio,Caf,我正在开发一款iOS应用程序,它必须同时处理多个立体声音频文件(持续时间从几秒到四分钟不等),同时播放多达三回,并通过基于多通道混音器的AUGraph同步。我的音频文件是压缩的,可以是MP3、AAC或CAF格式,但当它们加载到缓冲区时,会转换为32位AudioUnitSampleType格式(我的代码基于苹果的)。不用说,有了如此大的缓冲区,应用程序内存很快就会成为一个问题 苹果的文档表明,iOS设备一次可以在硬件中解码一个MP3/AAC文件,对于其他需要在软件中解码的文件,建议使用CAF(IM

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


苹果的文档表明,iOS设备一次可以在硬件中解码一个MP3/AAC文件,对于其他需要在软件中解码的文件,建议使用CAF(IMA4)格式。在开发播放过程中动态加载音频的系统之前,我想知道是否可以直接将压缩文件加载到缓冲区(从而显著减少内存需求)并让我的AUGraph动态转换它们?

回答我自己的问题,如果您只需要精确的音频播放同步,而不需要使用音频单元处理进行自定义处理,那么一定要看看AVFoundation的和类


虽然这种方法看起来更适合视频播放,但它只使用音频资源就可以很好地工作。这些类使用少量内存处理媒体资产(包括CAF、AAC和MP3)的所有加载和缓冲,并且可以使用
avurlassetpreferprecurisedurationandtimingkey
进行紧密同步。此外,它还有一些有用的回调方法,可以设置为在播放过程中的特定时间调用(用于更新UI等)。最后,当它在Mac(10.7+)上可用时,它是通用可可开发的一个很好的解决方案。

自从写了这个问题以来,我走了一条完全不同的道路,所以我自己可能不会回答这个问题。我发现AVFoundation的AVPlayer和AVMutableComposition类正好提供了我的应用程序所需的功能,而不会带来内存问题。不要忽视这个令人难以置信的纯音频工作有用的框架!