AUGraphGetNodeInteractions 在 iphone 5c 上不返回任何交互

Posted

技术标签:

【中文标题】AUGraphGetNodeInteractions 在 iphone 5c 上不返回任何交互【英文标题】:AUGraphGetNodeInteractions returns no interactions on iphone 5c 【发布时间】:2016-12-09 04:45:06 【问题描述】:

我用

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)

【问题讨论】:

您能展示一下您是如何设置图表的吗? 添加 CAShow(graph);我使用带有 kAudioUnitSubType_AudioFilePlayer 和 kAudioUnitSubType_RemoteIO 节点的简单示例。 【参考方案1】:

您应该将 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)它仍然会返回它拥有的一两个连接。

【讨论】:

非常感谢,戴夫!

以上是关于AUGraphGetNodeInteractions 在 iphone 5c 上不返回任何交互的主要内容,如果未能解决你的问题,请参考以下文章