【发布时间】:2009-11-17 00:55:26
【问题描述】:
这显然是一个 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() 中使用,但这很难看。
【问题讨论】:
标签: c++ audio core-audio