我正在尝试将 AVAudioSinkNode 与 AudioKit 结合使用。在下面的代码中,这是流程:
Input > Fader > Output
。虽然 SinkNode
附加到 Fader
.
SinkNode 工作,但链上更远的音频被静音。我希望听到所有输入音频,但根本没有音频。
如果我从
attach
函数中删除connect
和start
,正常流程工作正常(输入发送到输出)。但显然 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
但它对我的需求来说太慢了。
我需要使用接受
engine.avEngine.connect(inputMonitoringNode.avAudioNode, to: sinkNode, format: nil)
的连接功能,而不是使用AVAudioConnectionPoint
。
现在我仍然有一个问题,但是是另一种问题。在添加
AVAudioSinkNode
的点之前添加的任何音频效果都会失真。在我看来,这是一个格式问题,但我无法弄清楚。有人有想法吗?