我正在开发一个iOS应用程序,必须处理几个立体声音频文件(从几秒钟到四分钟的持续时间)一次,播放多达三个同时回放,通过多通道混音器为基础的AUGraph同步。我的音频文件是压缩的--无论是MP3、AAC还是CAF格式--但当它们加载到buffers中时,会被转换成32位的AudioUnitSampleType格式(我的代码是基于苹果的iPhoneMultichannelMixerTest)。不用说,有了如此大的缓冲区,应用程序内存很快就会成为一个问题。
苹果公司的文档指出,iOS设备一次可以在硬件中解码一个MP3/AAC文件,对于需要在软件中解码的其他文件,建议使用CAF (IMA4)格式。在我开发一个在播放过程中动态加载音频的系统之前,我想知道是否可以直接将压缩文件加载到缓冲区中(从而显着减少内存需求),并让我的AUGraph动态转换它们?
发布于 2012-03-27 22:03:26
为了回答我自己的问题,如果所有人需要的是精确的音频回放-同步,而不是使用音频单元处理的自定义处理,那么一定要看看AVFoundation的AVPlayer,AVAsset和AVComposition类。
虽然这种方法看起来更适合视频回放,但它只使用音频资源就能很好地工作。这些类处理所有媒体资产(包括CAF、AAC和MP3)的加载和缓冲,在此过程中使用极少量的内存,并且可以使用AVURLAssetPreferPreciseDurationAndTimingKey进行紧密同步。此外,它还具有有用的回调方法,可以将这些回调方法设置为在回放期间的特定时间调用(用于更新UI等)。最后,当它在Mac (10.7+)上可用时,它是通用Cocoa开发的一个很好的解决方案。
https://stackoverflow.com/questions/7273839
复制相似问题