0

一个要解决的新问题。

在我的 setParameter() 中,我使用将值设置为“真实值”。我正在格式化它们,value * (max - min) + min 例如:value of 1.0 == 20000Hzvalue of 0.0 == -30dB

现在我遇到了问题,VSTGUI 似乎只接受 0-1 的值。有没有比重写 setParameter() 中的所有代码更好的解决方案?

也许像 sprintf() 之类的东西?

编辑:我正在使用 CAnimKnob 类。

4

2 回答 2

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 中的 Knob 只给出 0 到 1 的值,并且只获取 0 到 1 的值。

所以主要问题是:在哪里带回代码中的float values 0-1from 20 - 20000

于 2013-03-01T12:10:03.170 回答
0

aardvark 的评论是正确的,反向选项是您想要的。过去曾与 vstgui 合作过,我可以验证这是否可行。

我只是想补充一点,如果您使用这样的频率算法,对用户来说将非常困难。您应该改为使用对数刻度,以便更容易选择更高的频率。否则,当您接近 20kHz 时,旋钮的单步将导致数百赫兹的差异。

于 2013-03-01T06:47:39.630 回答