AudioKit v5 振荡器频率斜坡问题

时间:2021-04-21 19:16:15

标签: audiokit

我是 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()
    }
    
}

2 个答案:

答案 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。