1

要停止混合器总线渲染回调,可以停止图形、移除总线并重新启动图形。但我有两个要求:

A. 不想停止/重新启动图表。
B. 不想移除混音器总线。

我可以禁用/启用指定的总线:

OSStatus result = AudioUnitSetParameter (
                     mixerUnit,
                     kMultiChannelMixerParam_Enable,
                     kAudioUnitScope_Input,
                     inputBus,  //the specified bus number
                     isOnValue,  //on:YES or off:NO
                     0
                  );

但这并没有阻止调用指定总线的渲染回调。目前,我通过在渲染回调函数中使用 if 语句来过滤掉该特定总线来做到这一点。

有没有办法实现我尝试做的事情?(不使用我当前的解决方案)

4

1 回答 1

2

您可以在图形处于活动状态时修改节点的输入。之后您只需要更新图表。

为此,请使用AUGraphDisconnectNodeInput(...),然后使用AUGraphUpdate(...)

编辑问题后更新

你的两个陈述没有做相反的事情。第一个从混音器单元中删除输入(我想是您的回调),第二个将混音器单元添加为 io 单元的输入。后者是当时可能已经存在的连接,因为您没有删除此连接。

您必须再次将渲染回调附加到混合器单元,而不是将混合器单元添加到 io 单元。

还要确保在添加混合器单元的输入后调用 AUGraphUpdate 来告诉图形更新自身,因为它已更改。

于 2013-10-21T22:35:55.817 回答