- improved parameters

- added 5th diffusion step
This commit is contained in:
2025-11-13 17:53:03 +01:00
parent 399b2ac59f
commit 1a3ca7d337
3 changed files with 61 additions and 47 deletions
+17 -7
View File
@@ -6,16 +6,27 @@ class Param
{ {
std::string m_name; std::string m_name;
std::string m_unit; std::string m_unit;
public:
typedef struct _sparam_info_t typedef struct _sparam_info_t
{ {
double pmin, pmax, pvalue, pinterval, pcenter, scenter, base, kexp; double pmin, pmax, pvalue, pinterval, pcenter, scenter, base, kexp;
} param_info_t; } param_info_t;
param_info_t m_param_info; param_info_t m_param_info;
public:
Param(
std::string name,
std::string unit,
param_info_t param
)
: m_name(name)
, m_param_info(param)
{
}
Param( Param(
std::string name, std::string name,
@@ -23,14 +34,13 @@ class Param
double pmin, double pmin,
double pmax, double pmax,
double pvalue, double pvalue,
double base=1.0,
double kexp=1.0,
double pinterval=1.0, double pinterval=1.0,
double pcenter=-1.0, double pcenter=-1.0,
double scenter=0.0, double scenter=0.0
double base=1.0,
double kexp=1.0
) )
: m_name(name) : Param(name, unit, {pmin, pmax, pvalue, pinterval, pcenter, scenter, base, kexp})
, m_param_info({pmin, pmax, pvalue, pinterval, pcenter, scenter, base, kexp})
{ {
} }
+43 -39
View File
@@ -9,9 +9,7 @@
#include <cstdlib> #include <cstdlib>
#include <cstdio> #include <cstdio>
#define MAX_ORDER 4 enum {ORDER, SIZE_1, SIZE_2, SIZE_3, SIZE_4, SIZE_5, FB_DELAY_MIN, FB_DELAY_MAX, FB_DELAY_GAIN};
enum {ORDER, SIZE_1, SIZE_2, SIZE_3, SIZE_4, FEEDBACK_DELAY_MIN, FEEDBACK_DELAY_XAX, FEEDBACK_GAIN};
AudioEffect* createEffectInstance (audioMasterCallback audioMaster) AudioEffect* createEffectInstance (audioMasterCallback audioMaster)
{ {
@@ -21,8 +19,8 @@ AudioEffect* createEffectInstance (audioMasterCallback audioMaster)
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
Plugin::Plugin(audioMasterCallback audioMaster) Plugin::Plugin(audioMasterCallback audioMaster)
: AudioEffectX(audioMaster, 1, NUM_PARMS) // 1 program, 1 parameter only : AudioEffectX(audioMaster, 1, NUM_PARMS) // 1 program, 1 parameter only
, m_reverb_1({DELAY_MAX, DELAY_MAX, DELAY_MAX, DELAY_MAX}, DELAY_MAX, 0) , m_reverb_1({DELAY_MAX, DELAY_MAX, DELAY_MAX, DELAY_MAX, {DELAY_MAX, 0.0}}, DELAY_MAX, 0)
, m_reverb_2({DELAY_MAX, DELAY_MAX, DELAY_MAX, DELAY_MAX}, DELAY_MAX, 0) , m_reverb_2({DELAY_MAX, DELAY_MAX, DELAY_MAX, DELAY_MAX, {DELAY_MAX, 0.0}}, DELAY_MAX, 0)
{ {
sampleRate = 48000; sampleRate = 48000;
setNumInputs(2); // stereo in setNumInputs(2); // stereo in
@@ -35,14 +33,16 @@ Plugin::Plugin(audioMasterCallback audioMaster)
m_feedback_delay[0] = 0; m_feedback_delay[0] = 0;
m_feedback_delay[1] = 0; m_feedback_delay[1] = 0;
m_params[0] = new Param("Order", "", 0, 4, 4); uint order = m_reverb_1.getNumDiffusionSteps();
m_params[1] = new Param("Delay 1", "ms", 0, 1000, 50); m_params[0] = new Param("Order", "", order, order, order);
m_params[2] = new Param("Delay 2", "ms", 0, 1000, 100); m_params[1] = new Param("Diffusion 1", "ms", 0, 1000, 48, 10.0);
m_params[3] = new Param("Delay 3", "ms", 0, 1000, 250); m_params[2] = new Param("Diffusion 2", "ms", 0, 1000, 96, 10.0);
m_params[4] = new Param("Delay 4", "ms", 0, 1000, 500); m_params[3] = new Param("Diffusion 3", "ms", 0, 1000, 192, 10.0);
m_params[5] = new Param("Feedback Delay Min", "ms", 0, 1000, 100); m_params[4] = new Param("Diffusion 4", "ms", 0, 1000, 384, 10.0);
m_params[6] = new Param("Feedback Delay Max", "ms", 0, 1000, 200); m_params[5] = new Param("Diffusion 5", "ms", 0, 1000, 768, 10.0);
m_params[7] = new Param("Feedback Gain", "%", 0, 100, 0); m_params[6] = new Param("Delay Min", "ms", 0, 1000, 100, 10.0);
m_params[7] = new Param("Delay Max", "ms", 0, 1000, 200, 10.0);
m_params[8] = new Param("Delay Feedback", "%", 0, 100, 0);
} }
//----------------------------------------------------------------------------------------- //-----------------------------------------------------------------------------------------
@@ -75,6 +75,7 @@ void Plugin::setParameter(VstInt32 index, float value)
case SIZE_2: case SIZE_2:
case SIZE_3: case SIZE_3:
case SIZE_4: case SIZE_4:
case SIZE_5:
{ {
double p = m_params[index]->fromSlider(value); double p = m_params[index]->fromSlider(value);
uint delay = (uint)(p*sampleRate/1000); uint delay = (uint)(p*sampleRate/1000);
@@ -83,25 +84,24 @@ void Plugin::setParameter(VstInt32 index, float value)
break; break;
} }
case FEEDBACK_GAIN: case FB_DELAY_MIN:
case FB_DELAY_MAX:
{
double p = m_params[index]->fromSlider(value);
uint delay = (uint)(p*sampleRate/1000);
m_feedback_delay[index-FB_DELAY_MIN] = delay;
m_reverb_1.setFeedbackDelay(m_feedback_delay[0], m_feedback_delay[1]);
m_reverb_2.setFeedbackDelay(m_feedback_delay[0], m_feedback_delay[1]);
break;
}
case FB_DELAY_GAIN:
{ {
double p = m_params[index]->fromSlider(value)/100; double p = m_params[index]->fromSlider(value)/100;
m_reverb_1.setFeedbackGain(p); m_reverb_1.setFeedbackGain(p);
m_reverb_2.setFeedbackGain(p); m_reverb_2.setFeedbackGain(p);
break; break;
} }
case FEEDBACK_DELAY_MIN:
case FEEDBACK_DELAY_XAX:
{
double p = m_params[index]->fromSlider(value);
uint delay = (uint)(p*sampleRate/1000);
m_feedback_delay[index-FEEDBACK_DELAY_MIN] = delay;
m_reverb_1.setFeedbackDelay(m_feedback_delay[0], m_feedback_delay[1]);
m_reverb_2.setFeedbackDelay(m_feedback_delay[0], m_feedback_delay[1]);
break;
}
} }
} }
@@ -118,9 +118,10 @@ float Plugin::getParameter(VstInt32 index)
case SIZE_2: case SIZE_2:
case SIZE_3: case SIZE_3:
case SIZE_4: case SIZE_4:
case FEEDBACK_GAIN: case SIZE_5:
case FEEDBACK_DELAY_MIN: case FB_DELAY_MIN:
case FEEDBACK_DELAY_XAX: case FB_DELAY_MAX:
case FB_DELAY_GAIN:
value = m_params[index]->getSlider(); value = m_params[index]->getSlider();
break; break;
@@ -139,9 +140,10 @@ void Plugin::getParameterName(VstInt32 index, char *label)
case SIZE_2: case SIZE_2:
case SIZE_3: case SIZE_3:
case SIZE_4: case SIZE_4:
case FEEDBACK_DELAY_MIN: case SIZE_5:
case FEEDBACK_DELAY_XAX: case FB_DELAY_MIN:
case FEEDBACK_GAIN: case FB_DELAY_MAX:
case FB_DELAY_GAIN:
strcpy(label,m_params[index]->name().c_str()); strcpy(label,m_params[index]->name().c_str());
break; break;
default: default:
@@ -161,9 +163,10 @@ void Plugin::getParameterDisplay(VstInt32 index, char *text)
case SIZE_2: case SIZE_2:
case SIZE_3: case SIZE_3:
case SIZE_4: case SIZE_4:
case FEEDBACK_DELAY_MIN: case SIZE_5:
case FEEDBACK_DELAY_XAX: case FB_DELAY_MIN:
case FEEDBACK_GAIN: case FB_DELAY_MAX:
case FB_DELAY_GAIN:
sprintf(text, "%f", m_params[index]->getParameter()); sprintf(text, "%f", m_params[index]->getParameter());
break; break;
} }
@@ -179,9 +182,10 @@ void Plugin::getParameterLabel(VstInt32 index, char *label)
case SIZE_2: case SIZE_2:
case SIZE_3: case SIZE_3:
case SIZE_4: case SIZE_4:
case FEEDBACK_DELAY_MIN: case SIZE_5:
case FEEDBACK_DELAY_XAX: case FB_DELAY_MIN:
case FEEDBACK_GAIN: case FB_DELAY_MAX:
case FB_DELAY_GAIN:
strcpy(label,m_params[index]->unit().c_str()); strcpy(label,m_params[index]->unit().c_str());
break; break;
} }
+1 -1
View File
@@ -13,7 +13,7 @@
class Plugin : public AudioEffectX class Plugin : public AudioEffectX
{ {
static const uint DELAY_MAX = 48000; static const uint DELAY_MAX = 48000;
static const uint NUM_PARMS = 8; static const uint NUM_PARMS = 9;
public: public:
Plugin(audioMasterCallback audioMaster); Plugin(audioMasterCallback audioMaster);