是否可以将压缩的音频文件直接加载到缓冲区中而无需转换?

时间:2011-09-01 17:06:22

标签: ios mp3 core-audio caf

我正在开发一款iOS应用程序,它必须同时处理多个立体声音频文件(持续时间从几秒到四分钟不等),最多同时播放三个,通过基于Multi-Channel-Mixer的AUGraph进行同步。我的音频文件被压缩 - 无论是MP3,AAC还是CAF - 但是当它们被加载到缓冲区时会被转换为32位AudioUnitSampleType格式(我的代码基于Apple的iPhoneMultichannelMixerTest)。毋庸置疑,使用如此大的缓冲区,应用程序内存很快就会成为一个问题。

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

1 个答案:

答案 0 :(得分:0)

要回答我自己的问题,如果所有人都需要精确的播放 - 音频同步,而无需使用音频单元处理进行自定义处理,那么请务必查看AVFoundation的AVPlayerAVAsset和{{ 3}}类。

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