2012-10-08 72 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,这样您就不会阻止渲染线程。