如何预加载音频文件xcode



我想在我的应用程序中预加载一个*.wav文件,因为它相当大。我想开始在viewcontroller1中加载它,然后在viewcontroller15中播放它。我需要代码来预加载它;播放它的代码是:

CFBundleRef mainbundle = CFBundleGetMainBundle();
CFURLRef soundFileURLRef;
soundFileURLRef =CFBundleCopyResourceURL(mainbundle, (CFStringRef) @"america", CFSTR ("wav"), NULL);
UInt32 soundID;
AudioServicesCreateSystemSoundID(soundFileURLRef, &soundID);
AudioServicesPlaySystemSound(soundID);

预加载wav文件的头需要读取非常少量的数据。这将足以初始化您的音频播放流。然后,您还需要填充播放缓冲区(要读取的数据量相当小)才能开始播放。

要预加载音频文件的示例数据,可以使用AudioFile*API和自定义I/O回调。

但是,您描述的场景是一个很好的例子,说明预加载音频文件的样本数据。

wav文件可以从磁盘实时流式传输。在播放之前,它不需要读取整个文件的样本数据。将大型音频文件加载到内存中对于实时播放是不必要的。当然,iOS设备的内存上限也很低。

如果预加载和初始化流是您想要的,那么您可以使用ExtAudioFile*API,并且仍然使用诸如AudioQueue*之类的API进行流。

关于你所面临的问题的更多细节可能会有所帮助。在这种情况下,我看不出有什么好的理由来预加载音频文件的样本数据;只有负面副作用。

最新更新