这显然是一个n00b问题,因为这已在应用程序中成功实施。但是现在是2009年,我还不清楚输入/输出总线如何与AUBase
一起工作。
我会从a post to the coreaudio-api mailing list中提出问题的措辞。这个问题pops up other times在2005年没有回答。
我只是再次查看AUBase
代码,我很难看到AUBase::Render()
在多个总线的情况下应该如何工作(因为它不需要总线号码参数)...
以下是方法调用顺序的快速概述:
在AUBase::DoRender()
的实施中,局部变量output
设置为GetOutput(inBusNumber)
。
然后output
变量最终(在调用预渲染通知标注后)传递给AUBase::DoRenderBus()
。
DoRenderBus()
在theOutput
上执行一些缓冲区准备工作,传递output
(对于给定的总线编号),然后调用RenderBus()
。输出元素不会传递。
RenderBus()
的默认实现调用NeedsToRender()
然后调用Render()
,而不传递总线编号或输出元素对象。
AUBase.h中AUBase::RenderBus()
上方的评论说:
如果您的AU完全独立处理多个输出总线,则覆盖此方法 - 您只需在没有
Render
检查的情况下调用NeedsToRender
。否则,请覆盖Render()
。
对我来说,上面的评论听起来像是说你应该在Render()
甚至 进行处理,如果你支持多条总线。
所以......如果在Render()
内进行他/她的处理,那么应该如何确定使用哪个输出元素?如果您还覆盖RenderBus()
,则可以将inBusNumber
参数存储在某处,以便在Render()
中使用,但这只是丑陋。
答案 0 :(得分:0)
如你所说,Render
没有采用公交车号码。
virtual OSStatus Render(AudioUnitRenderActionFlags & ioActionFlags,
const AudioTimeStamp & inTimeStamp,
UInt32 inNumberFrames);
我相信这意味着它应该为所有输出总线渲染输出。它还将从所有输入总线获取输入。
要确定哪些输入总线存在/已连接/处于活动状态(不确定术语是什么),您可以致电HasInput
。
我只用一条输出总线和几条输入总线试过它。