É mais do que provável que seja algo estúpido que eu esteja fazendo aqui 
Basicamente, estou controlando os plugins a partir de uma superfície de controle:
jrrshop.com/catalog/mackie-c … 951be6cc27
Aumente a imagem – você terá uma ideia.
Para os tipos de valor discreto (por exemplo, Modo Bombardier), aproveito o fato de que os 32 VPots (encoders rotativos) na superfície também possuem comportamento de chave – você pressiona a parte superior do VPot – é um momento de membrana típico.
Eu então uso a busca em tabela para alternar entre os valores disponíveis a cada pressionamento – é muito mais limpo e previsível do que usar o encoder rotativo para definir os 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)
ou no caso do 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)
Essa abordagem funciona perfeitamente no Bombardier, Rocket, 1973 e Vibe EQ em todos os lugares, exceto nos 2 trechos citados acima.
Obtive os valores dos parâmetros quebrando o depurador na chamada da Reaper SDK:
value = TrackFX_GetParam(trackSelectedForC4, FXInstances[i].index, currentFXParameter->index, &min, &max);
e também uso:
TrackFX_SetParam(trackSelectedForC4, FXIndex, index, parameterValue);
TrackFX_FormatParamValue(trackSelectedForC4, FXIndex, index, parameterValue, parameterValueString, sizeof(parameterValueString));
Então, por exemplo, no Vibe EQ:
Configurar o valor para 0.8333 define a GUI e o próprio plugin para 6.0KHz, mas a string relatada em “parameterValueString” no código acima ainda é 3150.
Se você então aumentar para 1.0, tudo (a GUI, o plugin, a string relatada) se alinha novamente em 8.0KHz.
Todos os outros valores funcionam perfeitamente.
O comportamento do Bombardier é observado em uma postagem anterior.
Apenas curioso para saber se é algo que estou fazendo de errado aqui.