0

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

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

4

1 回答 1

0

要回答我自己的问题,如果所有需要的是精确的音频播放同步,而没有使用音频单元处理的自定义处理,那么一定要看看 AVFoundation 的AVPlayerAVAssetAVComposition类。

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

于 2012-03-27T14:03:26.260 回答