AudioUnitRender 是啥意思?

Posted

技术标签:

【中文标题】AudioUnitRender 是啥意思?【英文标题】:what's means AudioUnitRender?AudioUnitRender 是什么意思? 【发布时间】:2013-12-07 15:42:09 【问题描述】:

最近,我在看 aurioTouch。 但是这句话我看不懂:

OSStatus err = AudioUnitRender (THIS-> rioUnit, ioActionFlags, inTimeStamp, 1, inNumberFrames, ioData); 

根据苹果文档解释:启动音频单元的渲染周期。 但是我感觉很模棱两可。这是怎么回事?

【问题讨论】:

【参考方案1】:

Core Audio 在“拉”模型上工作,其中输出单元通过从连接到其输入总线的单元中请求音频样本来启动该过程。同样,连接到输出单元的单元要求连接到其输入总线的样本。这些“询问”中的每一个都是渲染周期。

AudioUnitRender() 通常会传入一个样本缓冲区,您的音频单元可以选择以某种方式处理这些样本。该缓冲区是函数中的最后一个参数ioData。 inNumberFrames 是ioData 传入的帧数。 1 是要渲染的输出元素或“总线”(这可能会根据您的配置而改变)。 rioUnit 是正在处理的相关音频单元。

Apple 的 Audio Unit Hosting Guide 包含一个我觉得很有帮助的渲染部分。

【讨论】:

我的理解是回调函数调用输出总线的输入范围时,回调函数本身已经拿到了数据,并呈现了函数参数,这些数据都是通过音频单元连接获得的。比如AudioBufferList * ioData有值,需要主动调用AudioUnitRender()吗?而对于unit connect,一定需要调用AudioUnitRender()吗?我的理解肯定是错误的,请批评者指出。

以上是关于AudioUnitRender 是啥意思?的主要内容,如果未能解决你的问题,请参考以下文章

AudioUnitRender 出现错误 kAudioUnitErr_CannotDoInCurrentContext (-10863)

AudioUnitRender 错误 -50 带有奇数长度的缓冲区

来自AudioUnitRender swift的paramErr -50

AudioUnit inputCallback 与 AudioUnitRender -> audioBufferList.mBuffers[0].mDataByteSize 之间不匹配!= in

Swift 中的 AudioUnitRender 和 ExtAudioFileWrite 错误 -50:尝试将 MIDI 转换为音频文件

在静态模式下使用 AudioTrack 的正确方法是啥?