一个要解决的新问题。
在我的 setParameter() 中,我使用将值设置为“真实值”。我正在格式化它们,value * (max - min) + min
例如:value of 1.0 == 20000Hz
或value of 0.0 == -30dB
现在我遇到了问题,VSTGUI 似乎只接受 0-1 的值。有没有比重写 setParameter() 中的所有代码更好的解决方案?
也许像 sprintf() 之类的东西?
编辑:我正在使用 CAnimKnob 类。
一个要解决的新问题。
在我的 setParameter() 中,我使用将值设置为“真实值”。我正在格式化它们,value * (max - min) + min
例如:value of 1.0 == 20000Hz
或value of 0.0 == -30dB
现在我遇到了问题,VSTGUI 似乎只接受 0-1 的值。有没有比重写 setParameter() 中的所有代码更好的解决方案?
也许像 sprintf() 之类的东西?
编辑:我正在使用 CAnimKnob 类。
感谢您的建议。如果我知道如何在 VSTGUI 中使用反向运算符,我首先要做的就是这样做。VSTGUI CAnimKnob 只接受从 0.0 到 1.0 的浮点值。不管是线性的还是对数的。为了更好地理解这里的一些代码片段:
我这样调用过程函数:
case kFreq1: fFreq1 = value * (fFreqMax - fFreqMin) + fFreqMin;break;
case kGain1: fGain1 = value * (fGainMax - fGainMin) + fGainMin;break;
case kQ1 : fQ1 = value * (fQMax - fQMin) + fQMin;break;
那是因为我的过滤器代码使用 20 - 20000 的频率值和 -30 到 30 的增益值。
VSTGUI 中的 Knob 只给出 0 到 1 的值,并且只获取 0 到 1 的值。
所以主要问题是:在哪里带回代码中的float values 0-1
from 20 - 20000
?
aardvark 的评论是正确的,反向选项是您想要的。过去曾与 vstgui 合作过,我可以验证这是否可行。
我只是想补充一点,如果您使用这样的频率算法,对用户来说将非常困难。您应该改为使用对数刻度,以便更容易选择更高的频率。否则,当您接近 20kHz 时,旋钮的单步将导致数百赫兹的差异。