2012-10-08 70 views
0

在我的iOS應用中,我播放一些短波文件,並最終嘗試將我播放的所有內容導出到單個音頻文件(如WAV或CAF文件)。我設法使用AUFilePlayer進行播放。如何將通過AUFilePlayer播放的音頻保存到WAV或CAF文件?將通過AUFilePlayer播放的音頻保存到外部文件

+0

我被卡住了設置AUGraph。 –

回答

2

你可能會想看看ExtAudioFile API。這暴露了一個名爲ExtAudioFileWrite的函數,它被設計爲與您的音頻單元傳遞的數據很好地配合。 ExtAudioFileWrite的簽名如下:

OSStatus ExtAudioFileWrite (
    ExtAudioFileRef  inExtAudioFile, 
    UInt32     inNumberFrames, 
    const AudioBufferList *ioData 
); 

與音頻單元呈現回調,它看起來像這樣很好地一致:

OSStatus (*AURenderCallback)(
    void * inRefCon, 
    AudioUnitRenderActionFlags * ioActionFlags, 
    const AudioTimeStamp * inTimeStamp, 
    UInt32 inBusNumber, 
    UInt32 inNumberFrames, 
    AudioBufferList * ioData 
); 

通知共享UInt32 inNumberFramesAudioBufferList * ioData ARGS。

所以,你的工作流程可能是:

  1. 獲取一個ExtAudioFile設置了寫
  2. 讓您的AUGraph設置渲染音頻
  3. 奪AudioBufferLists您AudioUnits被繞過

3需要更多關於如何設置應用程序的知識,所以我無法真正幫助您解決問題。如果你想將音頻發送到揚聲器以及寫入文件,你可能需要利用AUGraphAddRenderNotify,這會讓你知道每次渲染髮生的時間(並讓你把你自己的AURenderCallback掛到寫給你的ExtAudioFile)。

如果您以這種方式進行處理(即生活在渲染回調中),請務必使用ExtAudioFileWriteAsync,這樣您就不會阻止渲染線程。