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
-132
View File
@@ -1,132 +0,0 @@
[
{
"arguments": [
"/usr/bin/clang++",
"-fPIC",
"-std=c++11",
"-g",
"-O3",
"-DVST_2_4_EXTENSIONS=0",
"-DVST_2_3_EXTENSIONS=1",
"-I",
"/home/jens/work/repos/JayFilter/src",
"-I",
"/home/jens/work/repos/JayFilter/sdk/vst/vstsdk2.4",
"-c",
"-o",
"/home/jens/work/repos/JayFilter/build/linux/release/Filter/src/filter.o",
"src/filter.cpp"
],
"directory": "/home/jens/work/repos/JayFilter",
"file": "/home/jens/work/repos/JayFilter/src/filter.cpp",
"output": "/home/jens/work/repos/JayFilter/build/linux/release/Filter/src/filter.o"
},
{
"arguments": [
"/usr/bin/clang++",
"-fPIC",
"-std=c++11",
"-g",
"-O3",
"-DVST_2_4_EXTENSIONS=0",
"-DVST_2_3_EXTENSIONS=1",
"-I",
"/home/jens/work/repos/JayFilter/src",
"-I",
"/home/jens/work/repos/JayFilter/sdk/vst/vstsdk2.4",
"-c",
"-o",
"/home/jens/work/repos/JayFilter/build/linux/release/Filter/src/filterMain.o",
"src/filterMain.cpp"
],
"directory": "/home/jens/work/repos/JayFilter",
"file": "/home/jens/work/repos/JayFilter/src/filterMain.cpp",
"output": "/home/jens/work/repos/JayFilter/build/linux/release/Filter/src/filterMain.o"
},
{
"arguments": [
"/usr/bin/clang++",
"-fPIC",
"-std=c++11",
"-g",
"-O3",
"-DVST_2_4_EXTENSIONS=0",
"-DVST_2_3_EXTENSIONS=1",
"-I",
"/home/jens/work/repos/JayFilter/src",
"-I",
"/home/jens/work/repos/JayFilter/sdk/vst/vstsdk2.4",
"-c",
"-o",
"/home/jens/work/repos/JayFilter/build/linux/release/Filter//home/jens/work/repos/JayFilter/sdk/vst/vstsdk2.4/public.sdk/source/vst2.x/audioeffect.o",
"/home/jens/work/repos/JayFilter/sdk/vst/vstsdk2.4/public.sdk/source/vst2.x/audioeffect.cpp"
],
"directory": "/home/jens/work/repos/JayFilter",
"file": "/home/jens/work/repos/JayFilter/sdk/vst/vstsdk2.4/public.sdk/source/vst2.x/audioeffect.cpp",
"output": "/home/jens/work/repos/JayFilter/build/linux/release/Filter/home/jens/work/repos/JayFilter/sdk/vst/vstsdk2.4/public.sdk/source/vst2.x/audioeffect.o"
},
{
"arguments": [
"/usr/bin/clang++",
"-fPIC",
"-std=c++11",
"-g",
"-O3",
"-DVST_2_4_EXTENSIONS=0",
"-DVST_2_3_EXTENSIONS=1",
"-I",
"/home/jens/work/repos/JayFilter/src",
"-I",
"/home/jens/work/repos/JayFilter/sdk/vst/vstsdk2.4",
"-c",
"-o",
"/home/jens/work/repos/JayFilter/build/linux/release/Filter//home/jens/work/repos/JayFilter/sdk/vst/vstsdk2.4/public.sdk/source/vst2.x/audioeffectx.o",
"/home/jens/work/repos/JayFilter/sdk/vst/vstsdk2.4/public.sdk/source/vst2.x/audioeffectx.cpp"
],
"directory": "/home/jens/work/repos/JayFilter",
"file": "/home/jens/work/repos/JayFilter/sdk/vst/vstsdk2.4/public.sdk/source/vst2.x/audioeffectx.cpp",
"output": "/home/jens/work/repos/JayFilter/build/linux/release/Filter/home/jens/work/repos/JayFilter/sdk/vst/vstsdk2.4/public.sdk/source/vst2.x/audioeffectx.o"
},
{
"arguments": [
"/usr/bin/clang",
"-fPIC",
"-g",
"-O3",
"-DVST_2_4_EXTENSIONS=0",
"-DVST_2_3_EXTENSIONS=1",
"-I",
"/home/jens/work/repos/JayFilter/src",
"-I",
"/home/jens/work/repos/JayFilter/sdk/vst/vstsdk2.4",
"-c",
"-o",
"/home/jens/work/repos/JayFilter/build/linux/release/Filter/src/iir.o",
"src/iir.c"
],
"directory": "/home/jens/work/repos/JayFilter",
"file": "/home/jens/work/repos/JayFilter/src/iir.c",
"output": "/home/jens/work/repos/JayFilter/build/linux/release/Filter/src/iir.o"
},
{
"arguments": [
"/usr/bin/clang",
"-fPIC",
"-g",
"-O3",
"-DVST_2_4_EXTENSIONS=0",
"-DVST_2_3_EXTENSIONS=1",
"-I",
"/home/jens/work/repos/JayFilter/src",
"-I",
"/home/jens/work/repos/JayFilter/sdk/vst/vstsdk2.4",
"-c",
"-o",
"/home/jens/work/repos/JayFilter/build/linux/release/Filter/src/paramutils.o",
"src/paramutils.c"
],
"directory": "/home/jens/work/repos/JayFilter",
"file": "/home/jens/work/repos/JayFilter/src/paramutils.c",
"output": "/home/jens/work/repos/JayFilter/build/linux/release/Filter/src/paramutils.o"
}
]
+4 -3
View File
@@ -1,6 +1,6 @@
include make/defaults.mk include make/defaults.mk
NAME := Delay NAME := Delay
CONFIG ?= debug CONFIG ?= release
TARGET ?= JayDelay.so TARGET ?= JayDelay.so
CFLAGS += -fPIC CFLAGS += -fPIC
@@ -14,8 +14,9 @@ INCLUDES += -I $(realpath submodules/dsp)
DEFINES += -DVST_2_4_EXTENSIONS=0 -DVST_2_3_EXTENSIONS=1 DEFINES += -DVST_2_4_EXTENSIONS=0 -DVST_2_3_EXTENSIONS=1
GCC_SRCS := src/iir.c src/paramutils.c GCC_SRCS := src/paramutils.c
CXX_SRCS := src/filter.cpp src/filterMain.cpp CXX_SRCS := src/plugin.cpp
CXX_SRCS := src/pluginMain.cpp
CXX_SRCS += $(VST2_SDK_PATH)/public.sdk/source/vst2.x/audioeffect.cpp CXX_SRCS += $(VST2_SDK_PATH)/public.sdk/source/vst2.x/audioeffect.cpp
CXX_SRCS += $(VST2_SDK_PATH)/public.sdk/source/vst2.x/audioeffectx.cpp CXX_SRCS += $(VST2_SDK_PATH)/public.sdk/source/vst2.x/audioeffectx.cpp
+20 -51
View File
@@ -4,13 +4,8 @@
-----------------------------------------------------------------------------*/ -----------------------------------------------------------------------------*/
#ifdef WIN32
#include <windows.h>
#endif
#include <reverb/reverb.hpp> #include <reverb/reverb.hpp>
#include <stdio.h> #include "plugin.hpp"
#include "iir.h"
#include "filter.hpp"
#include "paramutils.h" #include "paramutils.h"
#define NUM_PARMS 7 #define NUM_PARMS 7
@@ -37,11 +32,11 @@ char *pParmStr[NUM_PARMS] = {"Order","Filter-Type","Freq min","Freq max","Freque
AudioEffect* createEffectInstance (audioMasterCallback audioMaster) AudioEffect* createEffectInstance (audioMasterCallback audioMaster)
{ {
return new Filter (audioMaster); return new Plugin (audioMaster);
} }
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
Filter::Filter(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({(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.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_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))
@@ -49,101 +44,75 @@ Filter::Filter(audioMasterCallback audioMaster)
, m_reverb_2({(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; sampleRate = 48000;
fg = 1000/sampleRate; // default to 1000 Hz
order = 4;
q = 1.0f/MAX_Q;
type = IIR_FILTERTYPE_LOWPASS;
setNumInputs(2); // stereo in setNumInputs(2); // stereo in
setNumOutputs(2); // stereo out setNumOutputs(2); // stereo out
setUniqueID('Filt'); // identify setUniqueID('Filt'); // identify
canMono(); // makes sense to feed both inputs with the same signal canMono(); // makes sense to feed both inputs with the same signal
canProcessReplacing(); // supports both accumulating and replacing output canProcessReplacing(); // supports both accumulating and replacing output
strcpy(programName, "Default"); // default program name strcpy(programName, "Default"); // default program name
IIRInit(filterCoeff_L, order);
IIRInit(filterCoeff_R, order);
sm_fg = fg;
sm_q = q;
testParam=0; testParam=0;
IIRCalcFilterCoeff(filterCoeff_L, sampleRate, sm_fg*sampleRate, sm_q, order, type);
IIRCalcFilterCoeff(filterCoeff_R, sampleRate, sm_fg*sampleRate, sm_q, order, type);
forder = (0.5f/MAX_ORDER)*(float)(order -1);
ftype = (1.0f/MAX_TYPES)*(float)(type -1);
f_fmin = 0;
f_fmax = 17300.f/sampleRate;
} }
//----------------------------------------------------------------------------------------- //-----------------------------------------------------------------------------------------
Filter::~Filter() Plugin::~Plugin()
{ {
// nothing to do here // nothing to do here
} }
//----------------------------------------------------------------------------------------- //-----------------------------------------------------------------------------------------
void Filter::setProgramName(char *name) void Plugin::setProgramName(char *name)
{ {
strcpy(programName, name); strcpy(programName, name);
} }
//----------------------------------------------------------------------------------------- //-----------------------------------------------------------------------------------------
void Filter::getProgramName(char *name) void Plugin::getProgramName(char *name)
{ {
strcpy(name, programName); strcpy(name, programName);
} }
//----------------------------------------------------------------------------------------- //-----------------------------------------------------------------------------------------
void Filter::setParameter(VstInt32 index, float value) void Plugin::setParameter(VstInt32 index, float value)
{ {
fg = f_fmin + value*(f_fmax-f_fmin);
switch(index) switch(index)
{ {
case TYPE: case TYPE:
ftype = ParamQuantize(value,1.0f/(MAX_TYPES-1)); ftype = ParamQuantize(value,1.0f/(MAX_TYPES-1));
sprintf(dbgStr, "Set Param: %f",ftype);
type = 1 + (VstInt32)(ftype*(MAX_TYPES-1));
IIRCalcFilterCoeff(filterCoeff_L, sampleRate, 0.5f*fg*sampleRate, q*MAX_Q, order, type);
IIRCalcFilterCoeff(filterCoeff_R, sampleRate, 0.5f*fg*sampleRate, q*MAX_Q, order, type);
break; break;
case ORDER: case ORDER:
forder = ParamQuantize(value,1.0f/(MAX_ORDER/2-1)); forder = ParamQuantize(value,1.0f/(MAX_ORDER/2-1));
order = 2*(VstInt32)(1+forder*MAX_ORDER/2); sprintf(dbgStr, "Set Param: %f",forder);
sprintf(dbgStr, "value = %f, forder = %f, order = %d",value,forder,order);
// OutputDebugString(dbgStr);
IIRCalcFilterCoeff(filterCoeff_L, sampleRate, 0.5f*fg*sampleRate, q*MAX_Q, order, type);
IIRCalcFilterCoeff(filterCoeff_R, sampleRate, 0.5f*fg*sampleRate, q*MAX_Q, order, type);
break; break;
case FMIN: case FMIN:
f_fmin = value; sprintf(dbgStr, "Set Param: %f",value);
break; break;
case FMAX: case FMAX:
f_fmax = value; sprintf(dbgStr, "Set Param: %f",value);
break; break;
case FG: case FG:
f_fg_param = value; sprintf(dbgStr, "Set Param: %f",value);
break; break;
case Q: case Q:
q = value; sprintf(dbgStr, "Set Param: %f",value);
break; break;
case TESTPARAM: case TESTPARAM:
testParam=ParamQuantize(value,1.0f/3); testParam=ParamQuantize(value,1.0f/3);
sprintf(dbgStr, "Set Param: %f",value); sprintf(dbgStr, "Set Param: %f",value);
// OutputDebugString(dbgStr);
break; break;
} }
} }
//----------------------------------------------------------------------------------------- //-----------------------------------------------------------------------------------------
float Filter::getParameter(VstInt32 index) float Plugin::getParameter(VstInt32 index)
{ {
float value = 0; float value = 0;
@@ -183,13 +152,13 @@ float Filter::getParameter(VstInt32 index)
} }
//----------------------------------------------------------------------------------------- //-----------------------------------------------------------------------------------------
void Filter::getParameterName(VstInt32 index, char *label) void Plugin::getParameterName(VstInt32 index, char *label)
{ {
strcpy(label,pParmStr[index]); strcpy(label,pParmStr[index]);
} }
//----------------------------------------------------------------------------------------- //-----------------------------------------------------------------------------------------
void Filter::getParameterDisplay(VstInt32 index, char *text) void Plugin::getParameterDisplay(VstInt32 index, char *text)
{ {
switch(index) switch(index)
@@ -220,7 +189,7 @@ void Filter::getParameterDisplay(VstInt32 index, char *text)
} }
//----------------------------------------------------------------------------------------- //-----------------------------------------------------------------------------------------
void Filter::getParameterLabel(VstInt32 index, char *label) void Plugin::getParameterLabel(VstInt32 index, char *label)
{ {
switch(index) switch(index)
{ {
@@ -249,7 +218,7 @@ void Filter::getParameterLabel(VstInt32 index, char *label)
} }
//----------------------------------------------------------------------------------------- //-----------------------------------------------------------------------------------------
void Filter::processReplacing(float **inputs, float **outputs, VstInt32 sampleFrames) void Plugin::processReplacing(float **inputs, float **outputs, VstInt32 sampleFrames)
{ {
float *in1 = inputs[0]; float *in1 = inputs[0];
float *in2 = inputs[1]; float *in2 = inputs[1];
@@ -272,7 +241,7 @@ void Filter::processReplacing(float **inputs, float **outputs, VstInt32 sampleFr
} }
//----------------------------------------------------------------------------------------- //-----------------------------------------------------------------------------------------
void Filter::setSampleRate(float sampleRate) void Plugin::setSampleRate(float sampleRate)
{ {
this->sampleRate = sampleRate; this->sampleRate = sampleRate;
sprintf(dbgStr, "Sample Rate = %f",sampleRate); sprintf(dbgStr, "Sample Rate = %f",sampleRate);
@@ -280,7 +249,7 @@ void Filter::setSampleRate(float sampleRate)
} }
//----------------------------------------------------------------------------------------- //-----------------------------------------------------------------------------------------
void Filter::setBlockSize(VstInt32 blockSize) void Plugin::setBlockSize(VstInt32 blockSize)
{ {
this->blockSize = blockSize; this->blockSize = blockSize;
sprintf(dbgStr, "Block Size = %d",blockSize); sprintf(dbgStr, "Block Size = %d",blockSize);
+6 -9
View File
@@ -3,18 +3,17 @@
1999, Steinberg Soft und Hardware GmbH, All Rights Reserved 1999, Steinberg Soft und Hardware GmbH, All Rights Reserved
-----------------------------------------------------------------------------*/ -----------------------------------------------------------------------------*/
#ifndef __FILTER_H #ifndef __PLUGIN_H
#define __FILTER_H #define __PLUGIN_H
#include "public.sdk/source/vst2.x/audioeffectx.h" #include "public.sdk/source/vst2.x/audioeffectx.h"
#include <reverb/reverb.hpp> #include <reverb/reverb.hpp>
#include "iir.h"
class Filter : public AudioEffectX class Plugin : public AudioEffectX
{ {
public: public:
Filter(audioMasterCallback audioMaster); Plugin(audioMasterCallback audioMaster);
~Filter(); ~Plugin();
// Processing // Processing
virtual void processReplacing (float** inputs, float** outputs, VstInt32 sampleFrames); virtual void processReplacing (float** inputs, float** outputs, VstInt32 sampleFrames);
@@ -39,12 +38,10 @@ protected:
VstInt32 type, order; VstInt32 type, order;
char programName[32]; char programName[32];
char dbgStr[80]; char dbgStr[80];
IIRPARAM filterParms;
IIRCOEFF filterCoeff_L[8], filterCoeff_R[8];
private: private:
Reverb<float, 8> m_reverb_1; Reverb<float, 8> m_reverb_1;
Reverb<float, 8> m_reverb_2; Reverb<float, 8> m_reverb_2;
}; };
#endif #endif // __PLUGIN_H
+2 -2
View File
@@ -3,7 +3,7 @@
1999, Steinberg Soft und Hardware GmbH, All Rights Reserved 1999, Steinberg Soft und Hardware GmbH, All Rights Reserved
-----------------------------------------------------------------------------*/ -----------------------------------------------------------------------------*/
#include "filter.hpp" // *change* #include "plugin.hpp" // *change*
static AudioEffect *effect = 0; static AudioEffect *effect = 0;
bool oome = false; bool oome = false;
@@ -14,7 +14,7 @@ AEffect *VSTPluginMain (audioMasterCallback audioMaster)
if (!audioMaster (0, audioMasterVersion, 0, 0, 0, 0)) if (!audioMaster (0, audioMasterVersion, 0, 0, 0, 0))
return 0; // old version return 0; // old version
effect = new Filter (audioMaster); effect = new Plugin (audioMaster);
if (!effect) if (!effect)
return 0; return 0;
if (oome) if (oome)