在我的 iOS 应用程序中,我正在播放一些短波文件,最后尝试将我播放的所有内容导出到单个音频文件,例如 WAV 或 CAF 文件。我已经设法使用 AUFilePlayer 进行播放。如何将通过 AUFilePlayer 播放的音频保存到 WAV 或 CAF 文件?
问问题
404 次
1 回答
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
);
注意 sharedUInt32 inNumberFrames
和AudioBufferList * ioData
args。
因此,您的工作流程可能是:
- 设置一个 ExtAudioFile 用于写入
- 设置您的 AUGraph 以呈现音频
- 捕获您的 AudioUnits 正在传递的 AudioBufferLists
3 需要更多关于如何设置您的应用程序的知识,因此我无法真正为您提供太多帮助。如果您希望将音频发送到扬声器并写入文件,您可能需要使用AUGraphAddRenderNotify
,它会在渲染发生时通知您(并让您挂钩自己的 AURenderCallback 来编写到您的 ExtAudioFile)。
如果您以这种方式做事(即在渲染回调中),请确保使用ExtAudioFileWriteAsync
这样您就不会阻塞渲染线程。
于 2012-10-11T16:18:16.967 回答