0

我是新来的,所以首先:“大家好!!”

我在将参数更改从 process() 传递到控制器时遇到了一个真正的问题data.outputParameterChanges。看看下面的代码(kDataParamId是一个正确设置的参数的 ID):

tresult PLUGIN_API AGain::process (ProcessData& data) 
{ 
IParameterChanges* paramChanges = data.outputParameterChanges; 

if (paramChanges) 
{ 
    int32 index; 
    IParamValueQueue* paramQueue = 
           paramChanges->addParameterData(kDataParamId, index);  

    if(paramQueue) 
    { 
        paramQueue->addPoint(0, 0.1, index); 
        paramQueue->addPoint(0, 0.2, index);              
        paramQueue->addPoint(0, 0.3, index);              

        fprintf(stderr 
           , "[MyVSTPlugin] paramQueue->getPointCount() == %d\n" 
           , paramQueue->getPointCount()); 
    } 

  } 
  return kResultOk; 
} 

我得到的点数是“1”。此外,setParamNormalized()(作为接收参数更改的控制器的一部分)从主机以“0.3”调用一次。我可能很天真,但我希望参数点计数返回“3”,因此三个调用分别为setParamNormalized()0.1、0.2 和 0.3。我在这里想念什么???

对此的任何帮助和评论都非常感谢!

谢谢,克里斯

4

1 回答 1

0

使用参数更改将参数从处理器发送回控制器是不可能的。您需要使用 IConnectionPoint API 并发送消息。

您只能将音频参数从控制器发送到处理器。并且主机也可以直接发送给处理器(但是主机在向处理器发送参数时也会通知控制器,让控制器更新编辑器视图)

数据中的 outputparameterchanges 成员只有经过主机才能读取。

现在的问题也可能是您为什么要将消息从处理器发送回控制器?

为此,SDK 提供了如何使用 IMessages 更新音频回调仪表的示例

于 2012-11-09T19:35:33.090 回答