我正在尝试使用 AVAudioEngine 处理多声道声卡的各个声道。
为了做到这一点,我首先发现了我想要连接到我的 AVAudioEngine 的声卡的 DeviceID。然后我将设备分配给 AVAudioEngine Input Node 的 auAudioUnit。最后,我在输入节点上安装了一个 Tap,我可以在那里读取缓冲区。
我有一些代码可以正常工作,但我有一个错误,如果我连接聚合音频设备,我的输入节点只能看到聚合音频设备中第一个音频设备的输入通道。
例如,如果我的聚合音频设备包含两个声卡,一个有 6 个输入,第二个有两个输入,我的输入节点 AVAudioFormat 将看到 6 个输入,而不是 8 个。
我像这样添加设备:
try inputNode.auAudioUnit.setDeviceID(deviceID)
然后我得到这样的缓冲区格式:
let input = self.inputNode
let bus = 0
bufferFormat = input.inputFormat(forBus: bus)
最后,我安装了水龙头:
input.installTap(onBus: bus, bufferSize: 1024, format: bufferFormat) { [weak self] (buffer, time) in
self?.process(buffer: buffer, time: time)
}
使用这种方法,我的输入节点 auAudioUnit 最终有两个输入总线和两个输出总线,第二个输入总线格式似乎具有正确的通道数,但我不确定为什么这些通道没有传递到关联的输入节点。
任何帮助将不胜感激!
谢谢,
丹