AudioKit与AVAudioSinkNode结合使用

kulphzqa  于 2023-04-08  发布在  iOS
关注(0)|答案(1)|浏览(127)

我尝试将AVAudioSinkNode与AudioKit结合使用。下面的代码是流程:Input > Fader > Output。当SinkNode连接到Fader时。
SinkNode工作正常,但是音频链的更上层被静音了。我希望听到所有输入音频,但是根本没有音频。
如果我从start函数中删除attachconnect,正常的流程可以正常工作(输入发送到输出)。但显然sinkNode不再获得任何音频。
如何确保SinkNode在获得音频的同时保持流的其余部分完好无损?

let sinkNode: AVAudioSinkNode
let inputMonitoringNode: Fader

private init() {
    engine = AudioEngine()

    inputMonitoringNode = Fader(engine.input!)

    engine.output = inputMonitoringNode

    sinkNode = AVAudioSinkNode() { (timestamp, frames, audioBufferList) in
        // Store buffer to be processed in other thread
        // Not using a tap because it's to slow
    }
}

func start() {
    do {
        try engine.start()
    } catch let err {
        print(err)
    }

    if (!engine.avEngine.attachedNodes.contains(sinkNode)) {
        engine.avEngine.attach(sinkNode)
        engine.avEngine.connect(inputMonitoringNode.avAudioNode, to: sinkNode, format: nil)
    }
}

我试过将SinkNode连接到其他节点,但没有结果。正如在评论中提到的,我也试过使用tap,但它太慢了。

jv4diomz

jv4diomz1#

而不是使用engine.avEngine.connect(inputMonitoringNode.avAudioNode, to: sinkNode, format: nil),我需要使用连接函数,接受AVAudioConnectionPoint的。

engine.avEngine.attach(sinkNode)

var connectionPoints = engine.outputConnectionPoints(for: inputMonitoringNode.avAudioNode, outputBus: 0)
connectionPoints.append(AVAudioConnectionPoint(node: sinkNode, bus: 0))

engine.avEngine.connect(inputMonitoringNode.avAudioNode, to: connectionPoints, fromBus: 0, format: nil)

相关问题