From b49404ec2c823657b9d2ba337c1f8a4e20650be5 Mon Sep 17 00:00:00 2001 From: Jens Ahrensfeld Date: Tue, 11 Nov 2025 18:11:57 +0100 Subject: [PATCH] [JayDelay] - added variable diffusor size, feedback delays and feedback gain --- src/plugin.cpp | 97 +++++++++++++++++++++++++++++--------------------- src/plugin.hpp | 5 ++- submodules/dsp | 2 +- 3 files changed, 62 insertions(+), 42 deletions(-) diff --git a/src/plugin.cpp b/src/plugin.cpp index 625f934..69c6e59 100755 --- a/src/plugin.cpp +++ b/src/plugin.cpp @@ -9,7 +9,7 @@ #include #include -#define NUM_PARMS 6 +#define NUM_PARMS 8 #define MAX_ORDER 4 const char * const pFTypeString[] = @@ -19,20 +19,24 @@ const char * const pFTypeString[] = "Size 2", "Size 3", "Size 4", - "Feedback", + "Feedback Delay Min", + "Feedback Delay Max", + "Feedback Gain", }; const char * const pFUnitString[] = { - "Order", - "Size 1", - "Size 2", - "Size 3", - "Size 4", - "Feedback", + "", + "samples", + "samples", + "samples", + "samples", + "samples", + "samples", + "", }; -enum {ORDER, SIZE_1, SIZE_2, SIZE_3, SIZE_4, FEEDBACK}; +enum {ORDER, SIZE_1, SIZE_2, SIZE_3, SIZE_4, FEEDBACK_DELAY_MIN, FEEDBACK_DELAY_XAX, FEEDBACK_GAIN}; AudioEffect* createEffectInstance (audioMasterCallback audioMaster) { @@ -42,10 +46,8 @@ AudioEffect* createEffectInstance (audioMasterCallback audioMaster) //----------------------------------------------------------------------------- Plugin::Plugin(audioMasterCallback audioMaster) : AudioEffectX(audioMaster, 1, NUM_PARMS) // 1 program, 1 parameter only -//, m_reverb_1({(uint)(48000*0.02), (uint)(48000*0.04), (uint)(48000*0.08), (uint)(48000*0.16)}, (uint)(48000*0.1), (uint)(48000*0.2)) -//, m_reverb_2({(uint)(48000*0.02), (uint)(48000*0.04), (uint)(48000*0.08), (uint)(48000*0.16)}, (uint)(48000*0.1), (uint)(48000*0.2)) -, m_reverb_1({(uint)(48000*0.48)}, (uint)(48000*0.1), (uint)(48000*0.2)) -, m_reverb_2({(uint)(48000*0.48)}, (uint)(48000*0.1), (uint)(48000*0.2)) +, m_reverb_1({DELAY_MAX, DELAY_MAX, DELAY_MAX, DELAY_MAX}, DELAY_MAX) +, m_reverb_2({DELAY_MAX, DELAY_MAX, DELAY_MAX, DELAY_MAX}, DELAY_MAX) { sampleRate = 48000; setNumInputs(2); // stereo in @@ -54,6 +56,9 @@ Plugin::Plugin(audioMasterCallback audioMaster) canMono(); // makes sense to feed both inputs with the same signal canProcessReplacing(); // supports both accumulating and replacing output strcpy(programName, "Default"); // default program name + + m_feedback_delay[0] = 0; + m_feedback_delay[1] = 0; } //----------------------------------------------------------------------------------------- @@ -82,22 +87,29 @@ void Plugin::setParameter(VstInt32 index, float value) case ORDER: break; - case FEEDBACK: + case SIZE_1: + case SIZE_2: + case SIZE_3: + case SIZE_4: + { + uint delay = (uint)(value*DELAY_MAX); + m_reverb_1.setDelay(delay, index - SIZE_1); + m_reverb_2.setDelay(delay, index - SIZE_1); + break; + } + + case FEEDBACK_GAIN: m_reverb_1.setFeedbackGain(value); m_reverb_2.setFeedbackGain(value); break; - case SIZE_1: - break; - - case SIZE_2: - break; - - case SIZE_3: - break; - - case SIZE_4: + case FEEDBACK_DELAY_MIN: + case FEEDBACK_DELAY_XAX: + m_feedback_delay[index-FEEDBACK_DELAY_MIN] = (uint)(value * DELAY_MAX); + m_reverb_1.setFeedbackDelay(m_feedback_delay[0], m_feedback_delay[0]); + m_reverb_2.setFeedbackDelay(m_feedback_delay[0], m_feedback_delay[0]); break; + } } @@ -114,25 +126,22 @@ float Plugin::getParameter(VstInt32 index) break; case SIZE_1: - value = 1; - break; - case SIZE_2: - value = 2; - break; - case SIZE_3: - value = 3; - break; - case SIZE_4: - value = 4; + value = m_reverb_1.getDelay(index - SIZE_1); break; - case FEEDBACK: - value = 0.707; + case FEEDBACK_GAIN: + value = m_reverb_1.getFeedbackGain(); break; + case FEEDBACK_DELAY_MIN: + case FEEDBACK_DELAY_XAX: + value = m_feedback_delay[index-FEEDBACK_DELAY_MIN]; + break; + + } return value; } @@ -147,7 +156,9 @@ void Plugin::getParameterName(VstInt32 index, char *label) case SIZE_2: case SIZE_3: case SIZE_4: - case FEEDBACK: + case FEEDBACK_DELAY_MIN: + case FEEDBACK_DELAY_XAX: + case FEEDBACK_GAIN: strcpy(label,pFTypeString[index]); break; default: @@ -167,8 +178,12 @@ void Plugin::getParameterDisplay(VstInt32 index, char *text) case SIZE_2: case SIZE_3: case SIZE_4: - case FEEDBACK: - strcpy(text, pFTypeString[index]); + case FEEDBACK_DELAY_MIN: + case FEEDBACK_DELAY_XAX: + sprintf(text, "%d", (int)getParameter(index)); + break; + case FEEDBACK_GAIN: + sprintf(text, "%f", getParameter(index)); break; } } @@ -183,7 +198,9 @@ void Plugin::getParameterLabel(VstInt32 index, char *label) case SIZE_2: case SIZE_3: case SIZE_4: - case FEEDBACK: + case FEEDBACK_DELAY_MIN: + case FEEDBACK_DELAY_XAX: + case FEEDBACK_GAIN: strcpy(label, pFUnitString[index]); break; } diff --git a/src/plugin.hpp b/src/plugin.hpp index 4eb7fac..8677ff2 100755 --- a/src/plugin.hpp +++ b/src/plugin.hpp @@ -11,7 +11,9 @@ class Plugin : public AudioEffectX { -public: + const uint DELAY_MAX = 48000; + + public: Plugin(audioMasterCallback audioMaster); ~Plugin(); @@ -39,6 +41,7 @@ protected: private: Reverb m_reverb_1; Reverb m_reverb_2; + uint m_feedback_delay[2]; }; #endif // __PLUGIN_H diff --git a/submodules/dsp b/submodules/dsp index 4d6dbe7..aae1af9 160000 --- a/submodules/dsp +++ b/submodules/dsp @@ -1 +1 @@ -Subproject commit 4d6dbe770be0a9b09b5d51bcb15f18d8193ad671 +Subproject commit aae1af9fdd58e49be209e28f934dc9058200fcbc