我有一个AudioKit效果数组,可以灵活地添加/删除或更改它们的顺序,将它们存储为AKNode
var effects : [AKNode] = []
effects.append(AKCompressor())
effects.append(AKDelay())
effects.append(AKAutoWah())
... ...
问题是进行连接:
effects[0].connect(to: effects[1])
它不起作用:无法使用类型'(to:AKNode)'的参数列表调用'connect'
也许我应该存储除AKNode之外的其他类。最好的方法是什么?
答案 0 :(得分:4)
使用AKInputs数组。 connection functions使用AKInput和AKOutput协议。 AKInput继承自AKOutput,因此他们也会输出。
答案 1 :(得分:0)
虽然上面的答案是正确的,但不是很完整。我花了很多时间去寻找似乎没有直截了当的例子,以达到我可以做OP想要的目的。这可能是非正统的,但有效:
var mixer = AKMixer()
var audioInputs : [AKNode] = []
var audioEffects : [AKInput] = []
let whiteNoise = AKWhiteNoise()
let pinkNoise = AKPinkNoise()
let brownNoise = AKBrownianNoise()
audioInputs.append(whiteNoise)
audioInputs.append(pinkNoise)
audioInputs.append(brownNoise)
for audioInput in audioInputs{
mixer.connect(input: audioInput)
}
var lowPassFilter = AKMoogLadder()
var tremolo = AKTremolo()
var reverb = AKReverb()
var limiter = AKPeakLimiter()
audioEffects.append(lowPassFilter)
audioEffects.append(tremolo)
audioEffects.append(reverb)
audioEffects.append(limiter)
mixer.connect(to: audioEffects[0])
for i in 1..<audioEffects.count {
audioEffects[i-1].connect(to: audioEffects[i])
}
let mixer2 = AKMixer()
audioEffects[audioEffects.count-1].setOutput(to: mixer2)
AudioKit.output = mixer2