在阵列中连接不同的AudioKit效果

时间:2018-03-21 17:49:13

标签: ios swift swift4 audiokit

我有一个AudioKit效果数组,可以灵活地添加/删除或更改它们的顺序,将它们存储为AKNode

var effects : [AKNode] = []

effects.append(AKCompressor())
effects.append(AKDelay())
effects.append(AKAutoWah())
... ...

问题是进行连接:

effects[0].connect(to: effects[1])

它不起作用:无法使用类型'(to:AKNode)'的参数列表调用'connect'

也许我应该存储除AKNode之外的其他类。最好的方法是什么?

2 个答案:

答案 0 :(得分:4)

使用AKInputs数组。 connection functions使用AKInputAKOutput协议。 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