Es más que probable que sea una tontería lo que estoy haciendo aquí 
Básicamente, estoy controlando los plugins desde una superficie de control:
jrrshop.com/catalog/mackie-c … 951be6cc27
expande la imagen – te harás una idea.
Para los tipos de valores discretos (por ejemplo, Modo Bombardier), aprovecho el hecho de que los 32 VPots (codificadores rotatorios) de la superficie también tienen comportamiento de interruptor – presionas la parte superior del VPot – es un momentáneo de membrana típico.
Luego uso la búsqueda en tabla para recorrer los valores disponibles con cada pulsación – es mucho más limpio y predecible que usar el codificador rotatorio para establecer los valores discretos:
FXSwitchParameter *BombardierMode = new FXSwitchParameter("Mode", 12, this);
BombardierMode-;numDiscreetValues = 5;
BombardierMode-;discreetValues[0] = 0.0;
BombardierMode-;discreetValues[1] = 0.25;
BombardierMode-;discreetValues[2] = 0.5;
BombardierMode-;discreetValues[3] = 0.75;
BombardierMode-;discreetValues[4] = 1.0;
Bombardier-;Add(BombardierMode)
o en el caso del Vibe EQ:
FXComboSwitchParameter *VibeEQMF2Freq = new FXComboSwitchParameter("MF 2 Freq", "", 5, this);
VibeEQMF2Freq-;numDiscreetValues = 7;
VibeEQMF2Freq-;discreetValues[0] = 0.0;
VibeEQMF2Freq-;discreetValues[1] = 0.16;
VibeEQMF2Freq-;discreetValues[2] = 0.33;
VibeEQMF2Freq-;discreetValues[3] = 0.5;
VibeEQMF2Freq-;discreetValues[4] = 0.66;
VibeEQMF2Freq-;discreetValues[5] = 0.83333;
VibeEQMF2Freq-;discreetValues[6] = 1.0;
VibeEQ-;Add(VibeEQMF2Freq)
Este enfoque funciona perfectamente en Bombardier, Rocket, 1973 y Vibe EQ en todas partes, excepto en los 2 trozos citados anteriormente.
Obtuve los valores de los parámetros al establecer un punto de interrupción en el depurador en la llamada al SDK de Reaper:
value = TrackFX_GetParam(trackSelectedForC4, FXInstances[i].index, currentFXParameter-;index, &min, &max);
y también utilizo:
TrackFX_SetParam(trackSelectedForC4, FXIndex, index, parameterValue);
TrackFX_FormatParamValue(trackSelectedForC4, FXIndex, index, parameterValue, parameterValueString, sizeof(parameterValueString));
Así, por ejemplo, en el Vibe EQ:
Establecer el valor en 0.8333 configura la GUI y el plugin mismo en 6.0KHz, pero la cadena reportada en “parameterValueString” en el código anterior sigue siendo 3150.
Si luego se aumenta a 1.0, todo (la GUI, el plugin, la cadena reportada) vuelve a alinearse en 8.0KHz.
Todos los demás valores funcionan perfectamente.
El comportamiento del Bombardier se menciona en un post anterior.
Solo tengo curiosidad por saber si es algo que estoy haciendo mal en este extremo.