2012-08-04 78 views
1

我想在应用中预载一个* .wav文件,因为它比较大。我想要开始在viewcontroller1中加载它,然后在viewcontroller15中播放它。我需要代码来预加载它;播放代码如下:如何预先加载音频文件xcode

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

回答

1

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

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

但是,你所描述的情况是当预加载音频文件的采样数据的一个很好的例子。

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

如果预加载并初始化数据流是您想要的,您可以使用ExtAudioFile* API并仍使用API​​(如AudioQueue*)进行数据流传输。

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

+0

我创建了一个简单的iPhone应用程序,可以缓冲和播放大型音频文件。希望你可能会觉得这很有用。 https://github.com/iitotoro/BufferedAudioPlayer – Totoro 2013-02-08 07:07:47