我是 AudioKit 的新手,正在使用 v5。振荡器频率斜坡似乎没有按预期工作。下面的例子有 2 个连续的斜坡。首先它上升到 440-880,但随后听起来像是 880-660 而不是 440-660。
如果我注释掉 osc.$frequency.ramp(to: 660.0, duration: 1.0)
,它会上升到 440-880,然后会非常快地上升到 440,但会到达那里。
似乎在斜坡之后没有重置。
(sleep
仅用于测试。)
这是一个错误吗?还有什么我应该做的吗?任何见解将不胜感激!谢谢!
import Cocoa
import AudioKit
class Test {
let akEngine = AudioEngine()
let osc = Oscillator()
func setup() {
osc.amplitude = 0.1
akEngine.output = osc
do {
try akEngine.start()
} catch {
print("Couldn't start AudioEngine.")
}
osc.frequency = 440.0
osc.start()
osc.$frequency.ramp(to: 880.0, duration: 1.0)
sleep(2)
osc.stop()
sleep(1)
osc.frequency = 440.0
osc.start()
osc.$frequency.ramp(to: 660.0, duration: 1.0)
sleep(2)
osc.stop()
}
}
答案 0 :(得分:2)
这可能需要解释一下,或者它应该像上面那样固定工作,但是一旦开始自动更改,您应该坚持使用自动化语法,而不是跳到简单的值设置。对您而言,这意味着只需将 osc.frequency = 440
替换为 osc.$frequency.ramp(to: 440.0, duration: 0.0)
,我相信您会得到想要的效果。
答案 1 :(得分:2)
设置一个参数 (osc.frequency = 440.0
) 会导致使用一个微小的斜坡来避免拉链(相当于 osc.$frequency.ramp(to: 440.0, duration:epsilon)
)。测试代码立即应用另一个斜坡,覆盖拉链斜坡。
如果您在第二个 sleep
之后插入一个 osc.start()
,您会听到快速拉链返回 440。