[JayDelay]

- added variable diffusor size, feedback delays and feedback gain
This commit is contained in:
2025-11-11 18:11:57 +01:00
parent a57e44f65f
commit b49404ec2c
3 changed files with 62 additions and 42 deletions
+57 -40
View File
@@ -9,7 +9,7 @@
#include <cstdlib>
#include <cstdio>
#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;
}
+4 -1
View File
@@ -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<float, 8> m_reverb_1;
Reverb<float, 8> m_reverb_2;
uint m_feedback_delay[2];
};
#endif // __PLUGIN_H