要解决的新问题。
在我的setParameter()中,我用来将值设置为“实际值”。
我用value * (max - min) + min
格式化它们
例如:value of 1.0 == 20000Hz
或value of 0.0 == -30dB
现在我遇到了问题,VSTGUI似乎只接受0-1的值。 有没有比在setParameter()中重写所有代码更好的解决方案?
像sprintf()之类的东西可能吗?
编辑:我正在使用CAnimKnob类。
答案 0 :(得分:0)
aardvark的评论是正确的,反向选项就是你想要的。在过去与vstgui合作过后,我可以验证这是否有效。
我只想补充一点,如果您使用这样的频率算法,对用户来说将非常困难。您应该使用对数刻度,以便更容易选择更高的频率。否则,当您接近20kHz时,旋钮的单个步骤将导致几百赫兹的差异。
答案 1 :(得分:0)
感谢您的建议。如果我知道如何使用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中的旋钮仅提供0到1之间的值,并且仅获得0到1之间的值。
所以主要问题是:在代码中从float values 0-1
带回20 - 20000
的位置?