2012-08-04 76 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