将通过AUFilePlayer播放的音频保存到外部文件

时间:2012-10-08 08:14:39

标签: iphone ios ipad core-audio

在我的iOS应用程序中,我正在播放一些短波文件,最后尝试将我播放的所有内容导出到单个音频文件,如WAV或CAF文件。我已经设法使用AUFilePlayer进行播放。如何将通过AUFilePlayer播放的音频保存到WAV或CAF文件?

1 个答案:

答案 0 :(得分:2)

您可能希望查看ExtAudioFile API。这将公开一个名为ExtAudioFileWrite的函数,该函数旨在与您的音频单元传递的数据很好地结合。 ExtAudioFileWrite的签名如下:

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

与Audio Unit渲染回调非常吻合,如下所示:

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

请注意共享的UInt32 inNumberFramesAudioBufferList * ioData args。

因此,您的工作流程可能是:

  1. 设置ExtAudioFile进行编写
  2. 让你的AUGraph设置为渲染音频
  3. 捕获AudioUnits传递的AudioBufferLists
  4. 3需要更多地了解您的应用程序的设置方式,因此我无法真正帮助您解决问题。如果你想让你的音频进入扬声器以及写入文件,你可能想要使用AUGraphAddRenderNotify,这会让你知道每当渲染发生时(让你挂钩)你自己的AURenderCallback写入你的ExtAudioFile)。

    如果你这样做(即在渲染回调中生活),请确保使用ExtAudioFileWriteAsync,这样就不会阻止渲染线程。