这个问题不是关于AU插件,而是关于将音频单元集成为独立应用程序的构建块。经过多次尝试后,我无法弄清楚什么是最简单的"无图形"连接两个AudioUnit,它将作为" playthrough"。
我理解子类型 kAudioUnitSubType_HALOutput 的单个音频单元在捕获,渲染,实时处理和转发任何音频输入数据方面有多么强大和充足。但是,只要使用全双工音频硬件或在用户级别从内置设备创建聚合I / O设备,播放就会起作用。 但是,内置设备不是全双工和"聚合"他们也有一定的劣势。因此,我决定研究硬编码的双单元连接可能性(没有插入图谱API),并使用非全双工硬件测试其行为。
不幸的是,我没有找到全面的文档或示例代码来创建最简单的两单元游戏,只使用简单的连接范例,如Apple技术说明 TN2091 中所述:
AudioUnitElement halUnitOutputBus = 1; //1 suggested by TN2091 (else 0)
AudioUnitElement outUnitInputElement = 1; //1 suggested by TN2091 (else 0)
AudioUnitConnection halOutToOutUnitIn;
halOutToOutUnitIn.sourceAudioUnit = halAudioUnit;
halOutToOutUnitIn.sourceOutputNumber = halUnitOutputBus;
halOutToOutUnitIn.destInputNumber = outUnitInputElement;
AudioUnitSetProperty (outAudioUnit, // connection destination
kAudioUnitProperty_MakeConnection, // property key
kAudioUnitScope_Input, // destination scope
outUnitInputElement, // destination element
&halOutToOutUnitIn, // connection definition
sizeof (halOutToOutUnitIn)
);
我的任务是尽可能避免涉及Graphs,甚至更糟糕的是,CARing来自所谓的PublicUtility,它曾经多年来一直受到漏洞和延迟问题的困扰,并涉及一些雄心勃勃的假设,例如:
#if TARGET_OS_WIN32
#include <windows.h>
#include <intrin.h>
#pragma intrinsic(_InterlockedOr)
#pragma intrinsic(_InterlockedAnd)
#else
#include <CoreFoundation/CFBase.h>
#include <libkern/OSAtomic.h>
#endif
提前感谢任何可能使我指向正确方向的提示。