【问题标题】:Saving audio played via AUFilePlayer to an external file将通过 AUFilePlayer 播放的音频保存到外部文件
【发布时间】:2012-10-08 08:14:38
【问题描述】:

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

【问题讨论】:

  • 我无法设置 AUGraph。

标签: iphone ios ipad core-audio


【解决方案1】:

您可能需要研究 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 参数。

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

  1. 为写作设置一个 ExtAudioFile
  2. 设置您的 AUGraph 以呈现音频
  3. 捕获您的 AudioUnit 正在传递的 AudioBufferLists

3 需要更多关于如何设置您的应用的知识,因此我无法真正为您提供太多帮助。如果您希望将音频发送到扬声器并写入文件,您可能需要使用AUGraphAddRenderNotify,它会在渲染发生时通知您(并让您自己挂接AURenderCallback 写入您的 ExtAudioFile)。

如果您以这种方式做事(即在渲染回调中进行操作),请确保使用 ExtAudioFileWriteAsync,这样您就不会阻塞渲染线程。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-10-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-07
    相关资源
    最近更新 更多