C++ Juce VST Devel-从AudioProcessor更新Processor编辑器的SliderAttachments值
我正在努力开发一款用户友好型压缩机。一开始我有很多疑问,最后我基于代码中命名的GNU下的两个项目 我正在更新inc/dec按钮中的一些插件参数值,这取决于压缩程度,并将直接作用于压缩机的inc/dec值(从1切换到5)切换为更改值 我正在“参数更改”功能中执行音频压缩机器的设置,如下所示:C++ Juce VST Devel-从AudioProcessor更新Processor编辑器的SliderAttachments值,c++,slider,vst,juce,C++,Slider,Vst,Juce,我正在努力开发一款用户友好型压缩机。一开始我有很多疑问,最后我基于代码中命名的GNU下的两个项目 我正在更新inc/dec按钮中的一些插件参数值,这取决于压缩程度,并将直接作用于压缩机的inc/dec值(从1切换到5)切换为更改值 我正在“参数更改”功能中执行音频压缩机器的设置,如下所示: void SimpleCompressorAudioProcessor::parameterChanged(const String& parameterID, float newValue) {
void SimpleCompressorAudioProcessor::parameterChanged(const String& parameterID, float newValue)
{
if (parameterID == "threshold")
{
compressor.setThreshold(newValue);
characteristicChanged = true;
}
else if (parameterID == "knee")
{
compressor.setKnee(newValue);
characteristicChanged = true;
}
else if (parameterID == "attack") {
compressor.setAttackTime(newValue / 1000);
characteristicChanged = true;
}
else if (parameterID == "release") {
compressor.setReleaseTime(newValue / 1000);
characteristicChanged = true;
}
else if (parameterID == "ratio")
{
if (newValue > 15.9f)
compressor.setRatio(std::numeric_limits<float>::infinity());
else
compressor.setRatio(newValue);
characteristicChanged = true;
}
else if (parameterID == "makeUp")
{
compressor.setMakeUpGain(newValue);
characteristicChanged = true;
}
else if (parameterID == "bypass")
{
characteristicChanged = true;
}
else if (parameterID == "hpf")
{
//hpf = (bool)newValue;
characteristicChanged = true;
}
else if (parameterID == "expMode") {
characteristicChanged = true;
}
else if (parameterID == "compDegree") {
compressor.setKnee(0.5);
compressor.setThreshold(-20);
compressor.setRatio(3.0);
switch (((int)*parameters.getRawParameterValue("compDegree")))
{
case 1:
compressor.setAttackTime(6 / 1000);
compressor.setReleaseTime(2 / 1000);
compressor.setMakeUpGain(1);
break;
case 2:
compressor.setAttackTime(5 / 1000);
compressor.setReleaseTime(3 / 1000);
compressor.setMakeUpGain(2);
break;
case 3:
compressor.setAttackTime(4 / 1000);
compressor.setReleaseTime(4 / 1000);
compressor.setMakeUpGain(3);
break;
case 4:
compressor.setAttackTime(3 / 1000);
compressor.setReleaseTime(5 / 1000);
compressor.setMakeUpGain(4);
break;
case 5:
compressor.setAttackTime(2 / 1000);
compressor.setReleaseTime(6 / 1000);
compressor.setMakeUpGain(5);
break;
default:
break;
}
parameters.state.sendPropertyChangeMessage("attack");
parameters.state.sendPropertyChangeMessage("release");
parameters.state.sendPropertyChangeMessage("makeUp");
characteristicChanged = true;
updateHostDisplay();
}
else
jassertfalse;
}
void SimpleCompressorAudioProcessor::parameterChanged(常量字符串和parameterID,浮点新值)
{
如果(参数ID==“阈值”)
{
压缩机。设置阈值(新值);
特征改变=真;
}
else if(参数ID==“膝关节”)
{
压缩机。设置膝关节(新值);
特征改变=真;
}
else if(参数ID==“攻击”){
压缩机设置攻击时间(新值/1000);
特征改变=真;
}
else if(参数ID==“释放”){
压缩机。设置释放时间(新值/1000);
特征改变=真;
}
else if(参数ID==“比率”)
{
如果(新值>15.9f)
compressor.setRatio(std::numeric_limits::infinity());
其他的
压缩机设定比(新值);
特征改变=真;
}
else if(参数ID==“补偿”)
{
压缩机设置补偿增益(新值);
特征改变=真;
}
else if(参数ID==“旁路”)
{
特征改变=真;
}
else if(参数ID==“hpf”)
{
//hpf=(bool)newValue;
特征改变=真;
}
else if(参数ID==“expMode”){
特征改变=真;
}
else if(参数ID==“compDegree”){
压缩机。设置膝关节(0.5);
压缩机。设定阈值(-20);
压缩机设定比(3.0);
开关(((int)*parameters.getRawParameterValue(“compDegree”))
{
案例1:
压缩机设定攻击时间(6/1000);
压缩机。设定释放时间(2/1000);
压缩机设置补偿增益(1);
打破
案例2:
压缩机设定攻击时间(5/1000);
压缩机。设定释放时间(3/1000);
压缩机设置补偿增益(2);
打破
案例3:
压缩机设定攻击时间(4/1000);
压缩机。设定释放时间(4/1000);
压缩机设置补偿增益(3);
打破
案例4:
压缩机设定攻击时间(3/1000);
压缩机。设定释放时间(5/1000);
压缩机设置补偿增益(4);
打破
案例5:
压缩机设定攻击时间(2/1000);
压缩机。设定释放时间(6/1000);
压缩机设置补偿增益(5);
打破
违约:
打破
}
parameters.state.sendPropertyChangeMessage(“攻击”);
parameters.state.sendPropertyChangeMessage(“发布”);
parameters.state.sendPropertyChangeMessage(“补偿”);
特征改变=真;
updateHostDisplay();
}
其他的
茉莉花;
}
我很惊讶,所以我没有办法用我设置的值来更新幻灯片附件文本框的值
如果有人能提供帮助,并建议一些风格或最佳实践编码,我会很高兴,因为现在项目已经停止
我已经上传到github@