aboutsummaryrefslogtreecommitdiffstats
path: root/plugins/LV2/src/EQ
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/LV2/src/EQ')
-rw-r--r--plugins/LV2/src/EQ/EQ.cpp138
-rw-r--r--plugins/LV2/src/EQ/EQ.h135
-rw-r--r--plugins/LV2/src/EQ/EQ.ttl100
-rw-r--r--plugins/LV2/src/EQ/manifest.ttl.in6
4 files changed, 379 insertions, 0 deletions
diff --git a/plugins/LV2/src/EQ/EQ.cpp b/plugins/LV2/src/EQ/EQ.cpp
new file mode 100644
index 0000000..6698760
--- /dev/null
+++ b/plugins/LV2/src/EQ/EQ.cpp
@@ -0,0 +1,138 @@
+#include "EQ.h"
+#include <iostream>
+#include <lv2wrapper.h>
+
+EQ::EQ(double rate)
+ : LV2Plugin(rate)
+{
+}
+
+void EQ::activate()
+{
+ A = 0.5; //Treble -12 to 12
+ B = 0.5; //Mid -12 to 12
+ C = 0.5; //Bass -12 to 12
+ D = 1.0; //Lowpass 16.0K log 1 to 16 defaulting to 16K
+ E = 0.4; //TrebFrq 6.0 log 1 to 16 defaulting to 6K
+ F = 0.4; //BassFrq 100.0 log 30 to 1600 defaulting to 100 hz
+ G = 0.0; //Hipass 30.0 log 30 to 1600 defaulting to 30
+ H = 0.5; //OutGain -18 to 18
+
+ lastSampleL = 0.0;
+ last2SampleL = 0.0;
+ lastSampleR = 0.0;
+ last2SampleR = 0.0;
+
+ iirHighSampleLA = 0.0;
+ iirHighSampleLB = 0.0;
+ iirHighSampleLC = 0.0;
+ iirHighSampleLD = 0.0;
+ iirHighSampleLE = 0.0;
+ iirLowSampleLA = 0.0;
+ iirLowSampleLB = 0.0;
+ iirLowSampleLC = 0.0;
+ iirLowSampleLD = 0.0;
+ iirLowSampleLE = 0.0;
+ iirHighSampleL = 0.0;
+ iirLowSampleL = 0.0;
+
+ iirHighSampleRA = 0.0;
+ iirHighSampleRB = 0.0;
+ iirHighSampleRC = 0.0;
+ iirHighSampleRD = 0.0;
+ iirHighSampleRE = 0.0;
+ iirLowSampleRA = 0.0;
+ iirLowSampleRB = 0.0;
+ iirLowSampleRC = 0.0;
+ iirLowSampleRD = 0.0;
+ iirLowSampleRE = 0.0;
+ iirHighSampleR = 0.0;
+ iirLowSampleR = 0.0;
+
+ tripletLA = 0.0;
+ tripletLB = 0.0;
+ tripletLC = 0.0;
+ tripletFactorL = 0.0;
+
+ tripletRA = 0.0;
+ tripletRB = 0.0;
+ tripletRC = 0.0;
+ tripletFactorR = 0.0;
+
+ lowpassSampleLAA = 0.0;
+ lowpassSampleLAB = 0.0;
+ lowpassSampleLBA = 0.0;
+ lowpassSampleLBB = 0.0;
+ lowpassSampleLCA = 0.0;
+ lowpassSampleLCB = 0.0;
+ lowpassSampleLDA = 0.0;
+ lowpassSampleLDB = 0.0;
+ lowpassSampleLE = 0.0;
+ lowpassSampleLF = 0.0;
+ lowpassSampleLG = 0.0;
+
+ lowpassSampleRAA = 0.0;
+ lowpassSampleRAB = 0.0;
+ lowpassSampleRBA = 0.0;
+ lowpassSampleRBB = 0.0;
+ lowpassSampleRCA = 0.0;
+ lowpassSampleRCB = 0.0;
+ lowpassSampleRDA = 0.0;
+ lowpassSampleRDB = 0.0;
+ lowpassSampleRE = 0.0;
+ lowpassSampleRF = 0.0;
+ lowpassSampleRG = 0.0;
+
+ highpassSampleLAA = 0.0;
+ highpassSampleLAB = 0.0;
+ highpassSampleLBA = 0.0;
+ highpassSampleLBB = 0.0;
+ highpassSampleLCA = 0.0;
+ highpassSampleLCB = 0.0;
+ highpassSampleLDA = 0.0;
+ highpassSampleLDB = 0.0;
+ highpassSampleLE = 0.0;
+ highpassSampleLF = 0.0;
+
+ highpassSampleRAA = 0.0;
+ highpassSampleRAB = 0.0;
+ highpassSampleRBA = 0.0;
+ highpassSampleRBB = 0.0;
+ highpassSampleRCA = 0.0;
+ highpassSampleRCB = 0.0;
+ highpassSampleRDA = 0.0;
+ highpassSampleRDB = 0.0;
+ highpassSampleRE = 0.0;
+ highpassSampleRF = 0.0;
+
+ flip = false;
+ flipthree = 0;
+
+ fpNShapeL = 0.0;
+ fpNShapeR = 0.0;
+ //this is reset: values being initialized only once. Startup values, whatever they are.
+
+}
+
+void EQ::run(uint32_t num_samples)
+{
+ A = *params[0];
+ B = *params[1];
+ C = *params[2];
+ D = *params[3];
+ E = *params[4];
+ F = *params[5];
+ G = *params[6];
+ H = *params[7];
+
+ processReplacing(const_cast<float **>(in), out, num_samples);
+}
+
+//
+// Include the processing code from the VST version.
+//
+#include <cmath>
+#include "../../../LinuxVST/src/EQ/EQProc.cpp"
+
+// Create the LV2Wrapper and register the plugin
+LV2Wrapper<EQ> plugin;
diff --git a/plugins/LV2/src/EQ/EQ.h b/plugins/LV2/src/EQ/EQ.h
new file mode 100644
index 0000000..619b1aa
--- /dev/null
+++ b/plugins/LV2/src/EQ/EQ.h
@@ -0,0 +1,135 @@
+#ifndef __EQ_H
+#define __EQ_H
+
+#include <lv2plugin.h>
+
+class EQ : public LV2Plugin<8> {
+public:
+ EQ(double rate);
+
+ void activate();
+ void run(uint32_t num_samples);
+
+ static constexpr const char * URI = "https://www.airwindows.com/eq";
+
+private:
+ /*
+ * These are the original DSP functions from the VST plugin.
+ * They need to be called from the LV2 plugins `run` function.
+ */
+ void processReplacing(float **in, float **out, VstInt32 samples);
+ void processDoubleReplacing(double **in, double **out, VstInt32 samples);
+
+ /*
+ * Members needed by the processing functions.
+ */
+
+ long double fpNShapeL;
+ long double fpNShapeR;
+ //default stuff
+
+ double lastSampleL;
+ double last2SampleL;
+ double lastSampleR;
+ double last2SampleR;
+
+ //begin EQ
+ double iirHighSampleLA;
+ double iirHighSampleLB;
+ double iirHighSampleLC;
+ double iirHighSampleLD;
+ double iirHighSampleLE;
+ double iirLowSampleLA;
+ double iirLowSampleLB;
+ double iirLowSampleLC;
+ double iirLowSampleLD;
+ double iirLowSampleLE;
+ double iirHighSampleL;
+ double iirLowSampleL;
+
+ double iirHighSampleRA;
+ double iirHighSampleRB;
+ double iirHighSampleRC;
+ double iirHighSampleRD;
+ double iirHighSampleRE;
+ double iirLowSampleRA;
+ double iirLowSampleRB;
+ double iirLowSampleRC;
+ double iirLowSampleRD;
+ double iirLowSampleRE;
+ double iirHighSampleR;
+ double iirLowSampleR;
+
+ double tripletLA;
+ double tripletLB;
+ double tripletLC;
+ double tripletFactorL;
+
+ double tripletRA;
+ double tripletRB;
+ double tripletRC;
+ double tripletFactorR;
+
+ double lowpassSampleLAA;
+ double lowpassSampleLAB;
+ double lowpassSampleLBA;
+ double lowpassSampleLBB;
+ double lowpassSampleLCA;
+ double lowpassSampleLCB;
+ double lowpassSampleLDA;
+ double lowpassSampleLDB;
+ double lowpassSampleLE;
+ double lowpassSampleLF;
+ double lowpassSampleLG;
+
+ double lowpassSampleRAA;
+ double lowpassSampleRAB;
+ double lowpassSampleRBA;
+ double lowpassSampleRBB;
+ double lowpassSampleRCA;
+ double lowpassSampleRCB;
+ double lowpassSampleRDA;
+ double lowpassSampleRDB;
+ double lowpassSampleRE;
+ double lowpassSampleRF;
+ double lowpassSampleRG;
+
+ double highpassSampleLAA;
+ double highpassSampleLAB;
+ double highpassSampleLBA;
+ double highpassSampleLBB;
+ double highpassSampleLCA;
+ double highpassSampleLCB;
+ double highpassSampleLDA;
+ double highpassSampleLDB;
+ double highpassSampleLE;
+ double highpassSampleLF;
+
+ double highpassSampleRAA;
+ double highpassSampleRAB;
+ double highpassSampleRBA;
+ double highpassSampleRBB;
+ double highpassSampleRCA;
+ double highpassSampleRCB;
+ double highpassSampleRDA;
+ double highpassSampleRDB;
+ double highpassSampleRE;
+ double highpassSampleRF;
+
+ bool flip;
+ int flipthree;
+ //end EQ
+
+
+ float A;
+ float B;
+ float C;
+ float D;
+ float E;
+ float F;
+ float G;
+ float H;
+
+};
+
+#endif
diff --git a/plugins/LV2/src/EQ/EQ.ttl b/plugins/LV2/src/EQ/EQ.ttl
new file mode 100644
index 0000000..768a8e0
--- /dev/null
+++ b/plugins/LV2/src/EQ/EQ.ttl
@@ -0,0 +1,100 @@
+# Airwindows EQ plugin description
+
+@prefix lv2: <http://lv2plug.in/ns/lv2core#> .
+@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
+@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
+@prefix units: <http://lv2plug.in/ns/extensions/units#> .
+
+<https://www.airwindows.com/eq>
+ a lv2:Plugin ,
+ lv2:EQPlugin ;
+ lv2:project <https://www.airwindows.com> ;
+
+ lv2:optionalFeature lv2:hardRTCapable ;
+
+ # Define the ports for this plugin.
+ lv2:port [
+ a lv2:InputPort , lv2:ControlPort ;
+ lv2:index 0 ;
+ lv2:symbol "A" ;
+ lv2:name "Treble" ;
+ lv2:default 0.5 ;
+ lv2:minimum 0.0 ;
+ lv2:maximum 1.0 ;
+ ] , [
+ a lv2:InputPort , lv2:ControlPort ;
+ lv2:index 1 ;
+ lv2:symbol "B" ;
+ lv2:name "Mid" ;
+ lv2:default 0.5 ;
+ lv2:minimum 0.0 ;
+ lv2:maximum 1.0 ;
+ ] , [
+ a lv2:InputPort , lv2:ControlPort ;
+ lv2:index 2 ;
+ lv2:symbol "C" ;
+ lv2:name "Bass" ;
+ lv2:default 0.5 ;
+ lv2:minimum 0.0 ;
+ lv2:maximum 1.0 ;
+ ] , [
+ a lv2:InputPort , lv2:ControlPort ;
+ lv2:index 3 ;
+ lv2:symbol "D" ;
+ lv2:name "Lowpass" ;
+ lv2:default 0.5 ;
+ lv2:minimum 0.0 ;
+ lv2:maximum 1.0 ;
+ ] , [
+ a lv2:InputPort , lv2:ControlPort ;
+ lv2:index 4 ;
+ lv2:symbol "E" ;
+ lv2:name "TrebFrq" ;
+ lv2:default 0.5 ;
+ lv2:minimum 0.0 ;
+ lv2:maximum 1.0 ;
+ ] , [
+ a lv2:InputPort , lv2:ControlPort ;
+ lv2:index 5 ;
+ lv2:symbol "F" ;
+ lv2:name "BassFrq" ;
+ lv2:default 0.5 ;
+ lv2:minimum 0.0 ;
+ lv2:maximum 1.0 ;
+ ] , [
+ a lv2:InputPort , lv2:ControlPort ;
+ lv2:index 6 ;
+ lv2:symbol "G" ;
+ lv2:name "Hipass" ;
+ lv2:default 0.5 ;
+ lv2:minimum 0.0 ;
+ lv2:maximum 1.0 ;
+ ] , [
+ a lv2:InputPort , lv2:ControlPort ;
+ lv2:index 7 ;
+ lv2:symbol "H" ;
+ lv2:name "OutGain" ;
+ lv2:default 0.5 ;
+ lv2:minimum 0.0 ;
+ lv2:maximum 1.0 ;
+ ] , [
+ a lv2:InputPort , lv2:AudioPort ;
+ lv2:index 8 ;
+ lv2:symbol "in_l" ;
+ lv2:name "In left" ;
+ ] , [
+ a lv2:InputPort , lv2:AudioPort ;
+ lv2:index 9 ;
+ lv2:symbol "in_r" ;
+ lv2:name "In right" ;
+ ] , [
+ a lv2:OutputPort , lv2:AudioPort ;
+ lv2:index 10 ;
+ lv2:symbol "out_l" ;
+ lv2:name "Out left" ;
+ ] , [
+ a lv2:OutputPort , lv2:AudioPort ;
+ lv2:index 11 ;
+ lv2:symbol "out_r" ;
+ lv2:name "Out right" ;
+ ] .
diff --git a/plugins/LV2/src/EQ/manifest.ttl.in b/plugins/LV2/src/EQ/manifest.ttl.in
new file mode 100644
index 0000000..8b8f7b4
--- /dev/null
+++ b/plugins/LV2/src/EQ/manifest.ttl.in
@@ -0,0 +1,6 @@
+airwindows:eq
+ a lv2:Plugin ;
+ doap:name "Airwindows EQ" ;
+ doap:license <http://opensource.org/licenses/mit> ;
+ lv2:binary <EQ@CMAKE_SHARED_LIBRARY_SUFFIX@> ;
+ rdfs:seeAlso <EQ.ttl> .