refactored

This commit is contained in:
2025-11-11 15:36:48 +01:00
parent 6773cf3e20
commit 453fb493f3
5 changed files with 32 additions and 197 deletions
Executable
+257
View File
@@ -0,0 +1,257 @@
/*-----------------------------------------------------------------------------
1999, Steinberg Soft und Hardware GmbH, All Rights Reserved
-----------------------------------------------------------------------------*/
#include <reverb/reverb.hpp>
#include "plugin.hpp"
#include "paramutils.h"
#define NUM_PARMS 7
#define MAX_ORDER 10
#define MAX_TYPES 4
#define MAX_Q 10.0f
#define ALPHA 0.2f
#define BETA (1.0f-ALPHA)
const char * const pFTypeString[8] =
{
"Unknown",
"Lowpass",
"Highpass",
"Bandpass",
"Bandstop",
"Peaking",
"Low-Shelving",
"High-Shelving"
};
enum {ORDER, TYPE, FMIN, FMAX, FG, Q, TESTPARAM};
char *pParmStr[NUM_PARMS] = {"Order","Filter-Type","Freq min","Freq max","Frequency","Resonance","Test-Param"};
AudioEffect* createEffectInstance (audioMasterCallback audioMaster)
{
return new Plugin (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))
{
sampleRate = 48000;
setNumInputs(2); // stereo in
setNumOutputs(2); // stereo out
setUniqueID('Filt'); // identify
canMono(); // makes sense to feed both inputs with the same signal
canProcessReplacing(); // supports both accumulating and replacing output
strcpy(programName, "Default"); // default program name
testParam=0;
}
//-----------------------------------------------------------------------------------------
Plugin::~Plugin()
{
// nothing to do here
}
//-----------------------------------------------------------------------------------------
void Plugin::setProgramName(char *name)
{
strcpy(programName, name);
}
//-----------------------------------------------------------------------------------------
void Plugin::getProgramName(char *name)
{
strcpy(name, programName);
}
//-----------------------------------------------------------------------------------------
void Plugin::setParameter(VstInt32 index, float value)
{
switch(index)
{
case TYPE:
ftype = ParamQuantize(value,1.0f/(MAX_TYPES-1));
sprintf(dbgStr, "Set Param: %f",ftype);
break;
case ORDER:
forder = ParamQuantize(value,1.0f/(MAX_ORDER/2-1));
sprintf(dbgStr, "Set Param: %f",forder);
break;
case FMIN:
sprintf(dbgStr, "Set Param: %f",value);
break;
case FMAX:
sprintf(dbgStr, "Set Param: %f",value);
break;
case FG:
sprintf(dbgStr, "Set Param: %f",value);
break;
case Q:
sprintf(dbgStr, "Set Param: %f",value);
break;
case TESTPARAM:
testParam=ParamQuantize(value,1.0f/3);
sprintf(dbgStr, "Set Param: %f",value);
break;
}
}
//-----------------------------------------------------------------------------------------
float Plugin::getParameter(VstInt32 index)
{
float value = 0;
switch(index)
{
case TYPE:
value = (float)ftype;
break;
case ORDER:
value = (float)forder;
break;
case FMIN:
value = f_fmin;
break;
case FMAX:
value = f_fmin;
break;
case FG:
value = f_fg_param;
break;
case Q:
value = q;
break;
case TESTPARAM:
value = testParam;
sprintf(dbgStr, "Get Param: %f",value);
// OutputDebugString(dbgStr);
break;
}
return value;
}
//-----------------------------------------------------------------------------------------
void Plugin::getParameterName(VstInt32 index, char *label)
{
strcpy(label,pParmStr[index]);
}
//-----------------------------------------------------------------------------------------
void Plugin::getParameterDisplay(VstInt32 index, char *text)
{
switch(index)
{
case TYPE:
strcpy(text, pFTypeString[type]);
break;
case ORDER:
snprintf(text, kVstMaxParamStrLen, "%d", order);
break;
case FMIN:
float2string(0.5f*f_fmin*sampleRate,text, kVstMaxParamStrLen);
break;
case FMAX:
float2string(0.5f*f_fmax*sampleRate,text, kVstMaxParamStrLen);
break;
case FG:
float2string(0.5f*fg*sampleRate,text, kVstMaxParamStrLen);
break;
case Q:
float2string(q*MAX_Q,text, kVstMaxParamStrLen);
break;
case TESTPARAM:
float2string(testParam,text, kVstMaxParamStrLen);
break;
}
}
//-----------------------------------------------------------------------------------------
void Plugin::getParameterLabel(VstInt32 index, char *label)
{
switch(index)
{
case TYPE:
strcpy(label, " ");
break;
case ORDER:
strcpy(label, " ");
break;
case FMIN:
strcpy(label, " Hz ");
break;
case FMAX:
strcpy(label, " Hz ");
break;
case FG:
strcpy(label, " Hz ");
break;
case Q:
strcpy(label, " ");
break;
case TESTPARAM:
strcpy(label, " Test ");
break;
}
}
//-----------------------------------------------------------------------------------------
void Plugin::processReplacing(float **inputs, float **outputs, VstInt32 sampleFrames)
{
float *in1 = inputs[0];
float *in2 = inputs[1];
float *out1 = outputs[0];
float *out2 = outputs[1];
sm_fg = BETA*sm_fg+ALPHA*fg;
sm_q = BETA*sm_q+ALPHA*q*MAX_Q;
IIRCalcFilterCoeff(filterCoeff_L, sampleRate, 0.5f*sm_fg*sampleRate, sm_q, order, type);
IIRCalcFilterCoeff(filterCoeff_R, sampleRate, 0.5f*sm_fg*sampleRate, sm_q, order, type);
// IIR(filterCoeff_L, in1, out1, order, sampleFrames);
// IIR(filterCoeff_R, in2, out2, order, sampleFrames);
m_reverb_1.setFeedbackGain(sm_fg);
m_reverb_2.setFeedbackGain(sm_fg);
m_reverb_1.process_multi(in1, out1, sampleFrames);
m_reverb_2.process_multi(in2, out2, sampleFrames);
}
//-----------------------------------------------------------------------------------------
void Plugin::setSampleRate(float sampleRate)
{
this->sampleRate = sampleRate;
sprintf(dbgStr, "Sample Rate = %f",sampleRate);
// OutputDebugString(dbgStr);
}
//-----------------------------------------------------------------------------------------
void Plugin::setBlockSize(VstInt32 blockSize)
{
this->blockSize = blockSize;
sprintf(dbgStr, "Block Size = %d",blockSize);
// OutputDebugString(dbgStr);
}