所以我已经通过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的高优先级队列并在异步块中调度任何更改,重新连接并重新初始化吗?