【问题标题】:Backward foramatting values in VST GUIVST GUI 中的向后格式化值
【发布时间】:2013-02-28 21:10:50
【问题描述】:

要解决的新问题。

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

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

可能是 sprintf() 之类的东西?

编辑:我正在使用 CAnimKnob 类。

【问题讨论】:

  • 你能澄清一下问题吗?您使用maxmin 调整value 的过程已经将[0,1] 值更改为不同的范围...
  • 我在 VST SDK 的 setParameter 类中为 EQ 设置值。我在 20000 Hz 之间的 20 Hz 范围内执行此操作。不在 0 和 1 之间。
  • 那么你不能只执行相反的操作吗? (value - min) / (max - min)?这会给你一个介于 0 和 1 之间的数字...
  • 这是我的第一个想法。但是:我还没有发现这是否适用于 VST GUI 中的 CAnimKnob 类。
  • ...你为什么不试试看?

标签: user-interface plugins vst


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    感谢您的建议。如果我知道如何在 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 之间的值。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-09-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-25
      • 2019-05-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多