一种解决AudioKit v5振荡器频率斜坡问题的方法是将代码改为使用AKOperationGenerator,如下所示:
let generator = AKOperationGenerator { parameters in
let ramp = AKOperation.ramp(
trigger: parameters[0],
start: parameters[1],
end: parameters[2]
)
let oscillator = AKOperation.sineWave(frequency: ramp, amplitude: 0.5)
return oscillator
}
let frequency = AKParameter(value: 440.0)
let start = AKParameter(value: 100.0)
let end = AKParameter(value: 1000.0)
let trigger = AKParameter(value: 0)
let parameters = [trigger, start, end]
let oscillator = AKOperationGenerator(operation: generator, parameters: parameters)
AudioKit.output = oscillator
AudioKit.start()
oscillator.parameters[1].value = frequency
oscillator.parameters[0].value = 1
AKLog("Started")
sleep(1)
oscillator.parameters[2].value = 2000
AKLog("End Value Changed")
sleep(1)
oscillator.parameters[1].value = 200
oscillator.parameters[2].value = 100
AKLog("Start and End Values Changed")
sleep(1)
oscillator.parameters[0].value = 1
AKLog("Triggered")
此代码段演示了如何使用AKOperationGenerator创建一个振荡器,其中使用AKOperation.ramp为振荡器频率设置斜坡。 在此示例中,当parameters[0]从0变为1时,振荡器的频率将从parameters[1]线性过渡到parameters[2]。 请注意,此示例只针对演示目的进行了简化。 更复杂的振荡器可以使用其他AKOperation构造函数和参数。