diff --git a/src/param.hpp b/src/param.hpp index 6ac5e71..fadf557 100644 --- a/src/param.hpp +++ b/src/param.hpp @@ -6,16 +6,27 @@ class Param { std::string m_name; std::string m_unit; + + + public: typedef struct _sparam_info_t { double pmin, pmax, pvalue, pinterval, pcenter, scenter, base, kexp; } param_info_t; - 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( std::string name, @@ -23,14 +34,13 @@ class Param double pmin, double pmax, double pvalue, + double base=1.0, + double kexp=1.0, double pinterval=1.0, double pcenter=-1.0, - double scenter=0.0, - double base=1.0, - double kexp=1.0 + double scenter=0.0 ) - : m_name(name) - , m_param_info({pmin, pmax, pvalue, pinterval, pcenter, scenter, base, kexp}) + : Param(name, unit, {pmin, pmax, pvalue, pinterval, pcenter, scenter, base, kexp}) { } diff --git a/src/plugin.cpp b/src/plugin.cpp index c573943..07c0228 100755 --- a/src/plugin.cpp +++ b/src/plugin.cpp @@ -9,9 +9,7 @@ #include #include -#define MAX_ORDER 4 - -enum {ORDER, SIZE_1, SIZE_2, SIZE_3, SIZE_4, FEEDBACK_DELAY_MIN, FEEDBACK_DELAY_XAX, FEEDBACK_GAIN}; +enum {ORDER, SIZE_1, SIZE_2, SIZE_3, SIZE_4, SIZE_5, FB_DELAY_MIN, FB_DELAY_MAX, FB_DELAY_GAIN}; AudioEffect* createEffectInstance (audioMasterCallback audioMaster) { @@ -21,8 +19,8 @@ AudioEffect* createEffectInstance (audioMasterCallback audioMaster) //----------------------------------------------------------------------------- Plugin::Plugin(audioMasterCallback audioMaster) : 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_2({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.0}}, DELAY_MAX, 0) { sampleRate = 48000; setNumInputs(2); // stereo in @@ -35,14 +33,16 @@ Plugin::Plugin(audioMasterCallback audioMaster) m_feedback_delay[0] = 0; m_feedback_delay[1] = 0; - m_params[0] = new Param("Order", "", 0, 4, 4); - m_params[1] = new Param("Delay 1", "ms", 0, 1000, 50); - m_params[2] = new Param("Delay 2", "ms", 0, 1000, 100); - m_params[3] = new Param("Delay 3", "ms", 0, 1000, 250); - m_params[4] = new Param("Delay 4", "ms", 0, 1000, 500); - m_params[5] = new Param("Feedback Delay Min", "ms", 0, 1000, 100); - m_params[6] = new Param("Feedback Delay Max", "ms", 0, 1000, 200); - m_params[7] = new Param("Feedback Gain", "%", 0, 100, 0); + uint order = m_reverb_1.getNumDiffusionSteps(); + m_params[0] = new Param("Order", "", order, order, order); + m_params[1] = new Param("Diffusion 1", "ms", 0, 1000, 48, 10.0); + m_params[2] = new Param("Diffusion 2", "ms", 0, 1000, 96, 10.0); + m_params[3] = new Param("Diffusion 3", "ms", 0, 1000, 192, 10.0); + m_params[4] = new Param("Diffusion 4", "ms", 0, 1000, 384, 10.0); + m_params[5] = new Param("Diffusion 5", "ms", 0, 1000, 768, 10.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_3: case SIZE_4: + case SIZE_5: { double p = m_params[index]->fromSlider(value); uint delay = (uint)(p*sampleRate/1000); @@ -83,25 +84,24 @@ void Plugin::setParameter(VstInt32 index, float value) 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; m_reverb_1.setFeedbackGain(p); m_reverb_2.setFeedbackGain(p); 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_3: case SIZE_4: - case FEEDBACK_GAIN: - case FEEDBACK_DELAY_MIN: - case FEEDBACK_DELAY_XAX: + case SIZE_5: + case FB_DELAY_MIN: + case FB_DELAY_MAX: + case FB_DELAY_GAIN: value = m_params[index]->getSlider(); break; @@ -139,9 +140,10 @@ void Plugin::getParameterName(VstInt32 index, char *label) case SIZE_2: case SIZE_3: case SIZE_4: - case FEEDBACK_DELAY_MIN: - case FEEDBACK_DELAY_XAX: - case FEEDBACK_GAIN: + case SIZE_5: + case FB_DELAY_MIN: + case FB_DELAY_MAX: + case FB_DELAY_GAIN: strcpy(label,m_params[index]->name().c_str()); break; default: @@ -161,9 +163,10 @@ void Plugin::getParameterDisplay(VstInt32 index, char *text) case SIZE_2: case SIZE_3: case SIZE_4: - case FEEDBACK_DELAY_MIN: - case FEEDBACK_DELAY_XAX: - case FEEDBACK_GAIN: + case SIZE_5: + case FB_DELAY_MIN: + case FB_DELAY_MAX: + case FB_DELAY_GAIN: sprintf(text, "%f", m_params[index]->getParameter()); break; } @@ -179,9 +182,10 @@ void Plugin::getParameterLabel(VstInt32 index, char *label) case SIZE_2: case SIZE_3: case SIZE_4: - case FEEDBACK_DELAY_MIN: - case FEEDBACK_DELAY_XAX: - case FEEDBACK_GAIN: + case SIZE_5: + case FB_DELAY_MIN: + case FB_DELAY_MAX: + case FB_DELAY_GAIN: strcpy(label,m_params[index]->unit().c_str()); break; } diff --git a/src/plugin.hpp b/src/plugin.hpp index d235cc7..fd7e861 100755 --- a/src/plugin.hpp +++ b/src/plugin.hpp @@ -13,7 +13,7 @@ class Plugin : public AudioEffectX { static const uint DELAY_MAX = 48000; - static const uint NUM_PARMS = 8; + static const uint NUM_PARMS = 9; public: Plugin(audioMasterCallback audioMaster);