1

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

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

1 回答 1

1

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

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

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

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

如果您想要预加载和初始化流,您可以使用ExtAudioFile*API 并仍然使用 API 进行流式传输,例如AudioQueue*.

有关您面临的问题的更多详细信息可能会有所帮助。在这种情况下,我认为没有任何充分的理由预加载音频文件的样本数据;只有负面的副作用。

于 2012-08-04T05:03:01.397 回答