AVAudioEngine 输入节点只能看到来自连接的聚合音频设备 Swift macOS 的第一个设备输入

时间:2021-03-08 22:16:40

标签: swift macos cocoa avaudiosession avaudioengine

我正在尝试使用 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 最终有两个输入总线和两个输出总线,第二个输入总线格式似乎具有正确的通道数,但我不确定为什么这些通道没有传递到关联的输入节点。

任何帮助将不胜感激!

谢谢,

0 个答案:

没有答案