使用AUGraph与音频单元之间的直接连接通过GCD队列
所以我已经通过iOS的音频单元托管指南,他们一直暗示,人们可能总是想要使用AUGraph而不是AU之间的直接连接。 其中最重要的原因是他们提到了高优先级的线程,能够在运行时重新配置图形并且通用线程安全。
我的问题是,我试图尽可能接近“制作我自己的自定义dsp效果”,因为iOS并不真正让您动态加载自定义代码。 所以,我的方法是创建一个通用输出单元并将DSP代码写入其渲染回调中。 现在,这种方法的问题是,如果我想用图形中的自定义回调链接这些单元中的两个。 由于图形必须具有单个输出au(用于头部),因此尝试添加更多输出单元不会飞行。 也就是说,我不能在图表中依次使用2个通用I / O单元和一个远程I / O单元。
如果我真的想要使用AUGraphs,我可以考虑一个解决方案:
但是,如果我添加一个通用输出节点,这实际上意味着将节点的au添加到列表中,并且无论我在图中连接哪个节点,实际上都会将其输入范围/元素0回调设置为如下形式:
for each unit in your connected list:
call AudioUnitRender(...) and merge in ioData;
因此,“连接”到任意数量的这些“定制”节点的节点基本上从它们中取出处理后的输出并将其输出到任何下一个非定制节点。
当然,上面的想法可能会有一些松散的结局,但我认为这会有更多的想法。
现在我的问题是,如果没有AUGraph,我会直接连接AU吗? 如果没有AUGraph的图片,我可以将许多带有回调的通用输出单元连接到一个最终的远程I / O输出,这似乎工作得很好。 事情是kAudioUnitProperty_MakeConnection
是一个属性。 所以我不确定一旦AU被初始化,我可以重新设置属性。 我相信如果我不初始化,那就没关系。 如果是这样,我不能只是得到GCD的高优先级队列,并调度异步块的任何更改,以重新初始化,重新连接和初始化?
上一篇: using AUGraph vs direct connections between Audio Units by means of a GCD queue