首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将通过AUFilePlayer播放的音频保存到外部文件

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

Stack Overflow用户
提问于 2012-10-08 16:14:39
回答 1查看 403关注 0票数 0

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-10-12 00:18:17

您可能希望研究一下ExtAudioFile应用编程接口。这将公开一个名为ExtAudioFileWrite的函数,该函数旨在与您的音频单元传递的数据很好地结合在一起。ExtAudioFileWrite的签名如下:

代码语言:javascript
复制
OSStatus ExtAudioFileWrite (
   ExtAudioFileRef        inExtAudioFile,
   UInt32                 inNumberFrames,
   const AudioBufferList  *ioData
);

这与音频单元渲染回调很好地重合,如下所示:

代码语言:javascript
复制
OSStatus (*AURenderCallback)(
    void * inRefCon,
    AudioUnitRenderActionFlags * ioActionFlags,
    const AudioTimeStamp * inTimeStamp,
    UInt32 inBusNumber,
    UInt32 inNumberFrames,
    AudioBufferList * ioData
);

请注意共享的UInt32 inNumberFramesAudioBufferList * ioData参数。

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

  1. 设置ExtAudioFile以编写
  2. 设置AUGraph以呈现音频
  3. 捕获AudioUnits在

中传递的AudioBufferLists

3需要对你的应用程序如何设置有更多的了解,所以我不能在这方面帮你太多。如果您希望将音频发送到扬声器,并将其写入文件,则可能需要使用AUGraphAddRenderNotify,它将在渲染发生时让您知道(并允许您挂接自己的AURenderCallback以写入ExtAudioFile)。

如果你是这样做的(比如在渲染回调中),请确保使用ExtAudioFileWriteAsync,这样就不会阻塞渲染线程。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12777714

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档