AudioKit:如何从 AnalogSynthX-Example 制作旋钮指数而不是线性?

AudioKit: How to make Knob from AnalogSynthX-Example exponential instead of linear?

在大多数情况下,对于音量控制,如果旋钮值按指数或对数而不是线性变化会更好。 在 AudioKit AnalogSynthX-Example class 的 Knob.swift 中,将值缩放到任何类型曲线的最佳位置在哪里?

我想到了

func setPercentagesWithTouchPoint(_ touchPoint: CGPoint) {
    // Knobs assume up or right is increasing, and down or left is decreasing
    let horizontalChange = Double(touchPoint.x - lastX) * knobSensitivity
    value += horizontalChange * (maximum - minimum)

    let verticalChange = Double(touchPoint.y - lastY) * knobSensitivity
    value -= verticalChange * (maximum - minimum)

    lastX = touchPoint.x
    lastY = touchPoint.y

    // TODO: map to exponential/log/any curve if -> knobType is .exp
    // ...

    delegate?.updateKnobValue(value, tag: self.tag)
}

但也许有人已经发明了这个轮子?谢谢!

感谢您的提问。 Analog Synth X 存储库中的截止旋钮以对数方式缩放。你可以看一个简单的例子。

另外,AudioKit ROM 播放器存储库中有新的旋钮。这些改进的旋钮控件具有可调节的锥度曲线缩放比例和范围设置:

https://github.com/AudioKit/ROMPlayer