我用
AUNodeInteraction interaction;
UInt32 ioNumInteractions;
AUGraphGetNodeInteractions(graph,
node,
&ioNumInteractions,
&interaction));
在所有设备(iphone 5s,6,6s,7)上,它返回交互和连接的节点,但在iphone 5c和ipad mini上,它不返回任何交互(ioNumInteractions = 0)。
可能原因是32位CPU。 任何想法如何解决问题?
CAShow(图形):
Member Nodes:
node 1: 'augn' 'afpl' 'appl', instance 0x6000000323c0 O I
node 2: 'auou' 'rioc' 'appl', instance 0x600000032460 O I
Connections:
node 1 bus 0 => node 2 bus 0 [ 2 ch, 44100 Hz, 'lpcm' (0x00000029) 32-bit little-endian float, deinterleaved]
CurrentState:
mLastUpdateError=0, eventsToProcess=F, isInitialized=T, isRunning=T (1)
答案 0 :(得分:2)
您应该将ioNumInteractions设置为您希望AUGraphGetNodeInteractions返回的最大交互次数。您可以使用AUGraphCountNodeInteractions获取实际计数。然后你需要初始化一个足以保存结果的数组。
以下是一个例子:
UInt32 ioNumInteractions = 0;
AUGraphCountNodeInteractions(graph, node, & ioNumInteractions);
现在ioNumInteractions有一个计数。使用它来创建将保持交互的数组。
AUNodeInteraction interactions[ioNumInteractions];
AUGraphGetNodeInteractions(graph,
node,
&ioNumInteractions,
interactions);
AUGraphGetNodeInteractions也设置了ioNumInteractions。然后遍历交互数组。
for (int i = 0; i < ioNumInteractions; i++) {
AUNodeInteraction interaction = interactions[i];
if (interaction.nodeInteractionType == kAUNodeInteraction_Connection) {
processConnection(interaction.nodeInteraction.connection);
printf("connection\n");
}
else if (interaction.nodeInteractionType == kAUNodeInteraction_InputCallback){
processCallback(interaction.nodeInteraction.inputCallback);
printf("inputCallback\n");
}
}
我认为在5c上,ioNumInteractions最终仅以偶然的方式得到值0,因此AUGraphGetNodeInteractions返回了0次交互。 AUGraphGetNodeInteractions的本质是它只会返回ioNumInteractions交互,所以如果你传递一个像2893040这样的垃圾值(因为你没有初始化ioNumInteractions),它仍然会返回它所拥有的一个或两个连接。 / p>