aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHarald Eilertsen <haraldei@anduin.net>2021-03-28 14:32:58 +0200
committerHarald Eilertsen <haraldei@anduin.net>2021-03-28 14:34:54 +0200
commitcc36a9b13b2c378cdddd221d4995a50af7914a35 (patch)
treef844862c058a07d57f447e31d265da35b2165470
parentc0042de0d9e234a45c32aa297c775d6bdc5c730d (diff)
downloadairwindows-lv2-port-cc36a9b13b2c378cdddd221d4995a50af7914a35.tar.gz
airwindows-lv2-port-cc36a9b13b2c378cdddd221d4995a50af7914a35.tar.bz2
airwindows-lv2-port-cc36a9b13b2c378cdddd221d4995a50af7914a35.zip
LV2: Add another batch of plugins.
Plugins added in this batch: - BitGlitter - BitShiftGain - Bite - BlockParty - BrassRider - BrightAmbience - BuildATPDF - BussColors4 - ButterComp - ButterComp2
-rwxr-xr-xplugins/LV2/CMakeLists.txt20
-rw-r--r--plugins/LV2/manifest.ttl.in70
-rw-r--r--plugins/LV2/src/BitGlitter/BitGlitter.cpp58
-rw-r--r--plugins/LV2/src/BitGlitter/BitGlitter.h57
-rw-r--r--plugins/LV2/src/BitGlitter/BitGlitter.ttl68
-rw-r--r--plugins/LV2/src/BitGlitter/manifest.ttl.in6
-rw-r--r--plugins/LV2/src/BitShiftGain/BitShiftGain.cpp31
-rw-r--r--plugins/LV2/src/BitShiftGain/BitShiftGain.h31
-rw-r--r--plugins/LV2/src/BitShiftGain/BitShiftGain.ttl44
-rw-r--r--plugins/LV2/src/BitShiftGain/manifest.ttl.in6
-rw-r--r--plugins/LV2/src/Bite/Bite.cpp55
-rw-r--r--plugins/LV2/src/Bite/Bite.h54
-rw-r--r--plugins/LV2/src/Bite/Bite.ttl52
-rw-r--r--plugins/LV2/src/Bite/manifest.ttl.in6
-rw-r--r--plugins/LV2/src/BlockParty/BlockParty.cpp76
-rw-r--r--plugins/LV2/src/BlockParty/BlockParty.h79
-rw-r--r--plugins/LV2/src/BlockParty/BlockParty.ttl52
-rw-r--r--plugins/LV2/src/BlockParty/manifest.ttl.in6
-rw-r--r--plugins/LV2/src/BrassRider/BrassRider.cpp50
-rw-r--r--plugins/LV2/src/BrassRider/BrassRider.h51
-rw-r--r--plugins/LV2/src/BrassRider/BrassRider.ttl52
-rw-r--r--plugins/LV2/src/BrassRider/manifest.ttl.in6
-rw-r--r--plugins/LV2/src/BrightAmbience/BrightAmbience.cpp38
-rw-r--r--plugins/LV2/src/BrightAmbience/BrightAmbience.h38
-rw-r--r--plugins/LV2/src/BrightAmbience/BrightAmbience.ttl60
-rw-r--r--plugins/LV2/src/BrightAmbience/manifest.ttl.in6
-rw-r--r--plugins/LV2/src/BuildATPDF/BuildATPDF.cpp49
-rw-r--r--plugins/LV2/src/BuildATPDF/BuildATPDF.h46
-rw-r--r--plugins/LV2/src/BuildATPDF/BuildATPDF.ttl116
-rw-r--r--plugins/LV2/src/BuildATPDF/manifest.ttl.in6
-rw-r--r--plugins/LV2/src/BussColors4/BussColors4.cpp68
-rw-r--r--plugins/LV2/src/BussColors4/BussColors4.h51
-rw-r--r--plugins/LV2/src/BussColors4/BussColors4.ttl68
-rw-r--r--plugins/LV2/src/BussColors4/manifest.ttl.in6
-rw-r--r--plugins/LV2/src/ButterComp/ButterComp.cpp47
-rw-r--r--plugins/LV2/src/ButterComp/ButterComp.h47
-rw-r--r--plugins/LV2/src/ButterComp/ButterComp.ttl52
-rw-r--r--plugins/LV2/src/ButterComp/manifest.ttl.in6
-rw-r--r--plugins/LV2/src/ButterComp2/ButterComp2.cpp54
-rw-r--r--plugins/LV2/src/ButterComp2/ButterComp2.h52
-rw-r--r--plugins/LV2/src/ButterComp2/ButterComp2.ttl60
-rw-r--r--plugins/LV2/src/ButterComp2/manifest.ttl.in6
42 files changed, 1796 insertions, 10 deletions
diff --git a/plugins/LV2/CMakeLists.txt b/plugins/LV2/CMakeLists.txt
index 753c27f..d142614 100755
--- a/plugins/LV2/CMakeLists.txt
+++ b/plugins/LV2/CMakeLists.txt
@@ -30,16 +30,16 @@ add_airwindows_plugin(Beam)
add_airwindows_plugin(Biquad)
add_airwindows_plugin(Biquad2)
add_airwindows_plugin(BiquadOneHalf)
-# add_airwindows_plugin(Bite)
-# add_airwindows_plugin(BitGlitter)
-# add_airwindows_plugin(BitShiftGain)
-# add_airwindows_plugin(BlockParty)
-# add_airwindows_plugin(BrassRider)
-# add_airwindows_plugin(BrightAmbience)
-# add_airwindows_plugin(BuildATPDF)
-# add_airwindows_plugin(BussColors4)
-# add_airwindows_plugin(ButterComp)
-# add_airwindows_plugin(ButterComp2)
+add_airwindows_plugin(Bite)
+add_airwindows_plugin(BitGlitter)
+add_airwindows_plugin(BitShiftGain)
+add_airwindows_plugin(BlockParty)
+add_airwindows_plugin(BrassRider)
+add_airwindows_plugin(BrightAmbience)
+add_airwindows_plugin(BuildATPDF)
+add_airwindows_plugin(BussColors4)
+add_airwindows_plugin(ButterComp)
+add_airwindows_plugin(ButterComp2)
# add_airwindows_plugin(C5RawBuss)
# add_airwindows_plugin(C5RawChannel)
# add_airwindows_plugin(Calibre)
diff --git a/plugins/LV2/manifest.ttl.in b/plugins/LV2/manifest.ttl.in
index 68fa378..568a05d 100644
--- a/plugins/LV2/manifest.ttl.in
+++ b/plugins/LV2/manifest.ttl.in
@@ -150,3 +150,73 @@ airwindows:biquadonehalf
doap:license <http://opensource.org/licenses/mit> ;
lv2:binary <BiquadOneHalf@CMAKE_SHARED_LIBRARY_SUFFIX@> ;
rdfs:seeAlso <BiquadOneHalf.ttl> .
+
+airwindows:bitglitter
+ a lv2:Plugin ;
+ doap:name "Airwindows BitGlitter" ;
+ doap:license <http://opensource.org/licenses/mit> ;
+ lv2:binary <BitGlitter@CMAKE_SHARED_LIBRARY_SUFFIX@> ;
+ rdfs:seeAlso <BitGlitter.ttl> .
+
+airwindows:bitshiftgain
+ a lv2:Plugin ;
+ doap:name "Airwindows BitShiftGain" ;
+ doap:license <http://opensource.org/licenses/mit> ;
+ lv2:binary <BitShiftGain@CMAKE_SHARED_LIBRARY_SUFFIX@> ;
+ rdfs:seeAlso <BitShiftGain.ttl> .
+
+airwindows:bite
+ a lv2:Plugin ;
+ doap:name "Airwindows Bite" ;
+ doap:license <http://opensource.org/licenses/mit> ;
+ lv2:binary <Bite@CMAKE_SHARED_LIBRARY_SUFFIX@> ;
+ rdfs:seeAlso <Bite.ttl> .
+
+airwindows:blockparty
+ a lv2:Plugin ;
+ doap:name "Airwindows BlockParty" ;
+ doap:license <http://opensource.org/licenses/mit> ;
+ lv2:binary <BlockParty@CMAKE_SHARED_LIBRARY_SUFFIX@> ;
+ rdfs:seeAlso <BlockParty.ttl> .
+
+airwindows:brassrider
+ a lv2:Plugin ;
+ doap:name "Airwindows BrassRider" ;
+ doap:license <http://opensource.org/licenses/mit> ;
+ lv2:binary <BrassRider@CMAKE_SHARED_LIBRARY_SUFFIX@> ;
+ rdfs:seeAlso <BrassRider.ttl> .
+
+airwindows:brightambience
+ a lv2:Plugin ;
+ doap:name "Airwindows BrightAmbience" ;
+ doap:license <http://opensource.org/licenses/mit> ;
+ lv2:binary <BrightAmbience@CMAKE_SHARED_LIBRARY_SUFFIX@> ;
+ rdfs:seeAlso <BrightAmbience.ttl> .
+
+airwindows:buildatpdf
+ a lv2:Plugin ;
+ doap:name "Airwindows BuildATPDF" ;
+ doap:license <http://opensource.org/licenses/mit> ;
+ lv2:binary <BuildATPDF@CMAKE_SHARED_LIBRARY_SUFFIX@> ;
+ rdfs:seeAlso <BuildATPDF.ttl> .
+
+airwindows:busscolors4
+ a lv2:Plugin ;
+ doap:name "Airwindows BussColors4" ;
+ doap:license <http://opensource.org/licenses/mit> ;
+ lv2:binary <BussColors4@CMAKE_SHARED_LIBRARY_SUFFIX@> ;
+ rdfs:seeAlso <BussColors4.ttl> .
+
+airwindows:buttercomp2
+ a lv2:Plugin ;
+ doap:name "Airwindows ButterComp2" ;
+ doap:license <http://opensource.org/licenses/mit> ;
+ lv2:binary <ButterComp2@CMAKE_SHARED_LIBRARY_SUFFIX@> ;
+ rdfs:seeAlso <ButterComp2.ttl> .
+
+airwindows:buttercomp
+ a lv2:Plugin ;
+ doap:name "Airwindows ButterComp" ;
+ doap:license <http://opensource.org/licenses/mit> ;
+ lv2:binary <ButterComp@CMAKE_SHARED_LIBRARY_SUFFIX@> ;
+ rdfs:seeAlso <ButterComp.ttl> .
diff --git a/plugins/LV2/src/BitGlitter/BitGlitter.cpp b/plugins/LV2/src/BitGlitter/BitGlitter.cpp
new file mode 100644
index 0000000..27f5a9d
--- /dev/null
+++ b/plugins/LV2/src/BitGlitter/BitGlitter.cpp
@@ -0,0 +1,58 @@
+#include "BitGlitter.h"
+#include <iostream>
+#include <lv2wrapper.h>
+
+BitGlitter::BitGlitter(double rate)
+ : LV2Plugin(rate)
+{
+}
+
+void BitGlitter::activate()
+{
+ A = 0.5;
+ B = 0.0;
+ C = 0.5;
+ D = 1.0;
+
+ fpNShapeL = 0.0;
+ fpNShapeR = 0.0;
+
+ ataLastSampleL = 0.0;
+ ataHalfwaySampleL = 0.0;
+ lastSampleL = 0.0;
+ heldSampleAL = 0.0;
+ positionAL = 0.0;
+ heldSampleBL = 0.0;
+ positionBL = 0.0;
+ lastOutputSampleL = 0.0;
+
+ ataLastSampleR = 0.0;
+ ataHalfwaySampleR = 0.0;
+ lastSampleR = 0.0;
+ heldSampleAR = 0.0;
+ positionAR = 0.0;
+ heldSampleBR = 0.0;
+ positionBR = 0.0;
+ lastOutputSampleR = 0.0;
+ //this is reset: values being initialized only once. Startup values, whatever they are.
+
+}
+
+void BitGlitter::run(uint32_t num_samples)
+{
+ A = *params[0];
+ B = *params[1];
+ C = *params[2];
+ D = *params[3];
+
+ processReplacing(const_cast<float **>(in), out, num_samples);
+}
+
+//
+// Include the processing code from the VST version.
+//
+#include <cmath>
+#include "../../../LinuxVST/src/BitGlitter/BitGlitterProc.cpp"
+
+// Create the LV2Wrapper and register the plugin
+LV2Wrapper<BitGlitter> plugin;
diff --git a/plugins/LV2/src/BitGlitter/BitGlitter.h b/plugins/LV2/src/BitGlitter/BitGlitter.h
new file mode 100644
index 0000000..ce82e43
--- /dev/null
+++ b/plugins/LV2/src/BitGlitter/BitGlitter.h
@@ -0,0 +1,57 @@
+#ifndef __BitGlitter_H
+#define __BitGlitter_H
+
+#include <lv2plugin.h>
+
+class BitGlitter : public LV2Plugin<4> {
+public:
+ BitGlitter(double rate);
+
+ void activate();
+ void run(uint32_t num_samples);
+
+ static constexpr const char * URI = "https://www.airwindows.com/bitglitter";
+
+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;
+
+ double ataLastSampleL;
+ double ataHalfwaySampleL;
+ double ataDrySampleL;
+ double lastSampleL;
+ double heldSampleAL;
+ double heldSampleBL;
+ double positionAL;
+ double positionBL;
+ double lastOutputSampleL;
+
+ double ataLastSampleR;
+ double ataHalfwaySampleR;
+ double ataDrySampleR;
+ double lastSampleR;
+ double heldSampleAR;
+ double heldSampleBR;
+ double positionAR;
+ double positionBR;
+ double lastOutputSampleR;
+ //there is no noise shaping on this one, it uses all sorts of quantization to get its sound
+
+ float A;
+ float B;
+ float C;
+ float D;
+};
+
+#endif
diff --git a/plugins/LV2/src/BitGlitter/BitGlitter.ttl b/plugins/LV2/src/BitGlitter/BitGlitter.ttl
new file mode 100644
index 0000000..aa7e843
--- /dev/null
+++ b/plugins/LV2/src/BitGlitter/BitGlitter.ttl
@@ -0,0 +1,68 @@
+# Airwindows BitGlitter 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/bitglitter>
+ a lv2:Plugin ,
+ lv2:DistortionPlugin ;
+ 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 "Input" ;
+ 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 "Glitter" ;
+ 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 "Output" ;
+ 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 "Dry/Wet" ;
+ lv2:default 0.5 ;
+ lv2:minimum 0.0 ;
+ lv2:maximum 1.0 ;
+ ] , [
+ a lv2:InputPort , lv2:AudioPort ;
+ lv2:index 4 ;
+ lv2:symbol "in_l" ;
+ lv2:name "In left" ;
+ ] , [
+ a lv2:InputPort , lv2:AudioPort ;
+ lv2:index 5 ;
+ lv2:symbol "in_r" ;
+ lv2:name "In right" ;
+ ] , [
+ a lv2:OutputPort , lv2:AudioPort ;
+ lv2:index 6 ;
+ lv2:symbol "out_l" ;
+ lv2:name "Out left" ;
+ ] , [
+ a lv2:OutputPort , lv2:AudioPort ;
+ lv2:index 7 ;
+ lv2:symbol "out_r" ;
+ lv2:name "Out right" ;
+ ] .
diff --git a/plugins/LV2/src/BitGlitter/manifest.ttl.in b/plugins/LV2/src/BitGlitter/manifest.ttl.in
new file mode 100644
index 0000000..ed81290
--- /dev/null
+++ b/plugins/LV2/src/BitGlitter/manifest.ttl.in
@@ -0,0 +1,6 @@
+airwindows:bitglitter
+ a lv2:Plugin ;
+ doap:name "Airwindows BitGlitter" ;
+ doap:license <http://opensource.org/licenses/mit> ;
+ lv2:binary <BitGlitter@CMAKE_SHARED_LIBRARY_SUFFIX@> ;
+ rdfs:seeAlso <BitGlitter.ttl> .
diff --git a/plugins/LV2/src/BitShiftGain/BitShiftGain.cpp b/plugins/LV2/src/BitShiftGain/BitShiftGain.cpp
new file mode 100644
index 0000000..9a320cb
--- /dev/null
+++ b/plugins/LV2/src/BitShiftGain/BitShiftGain.cpp
@@ -0,0 +1,31 @@
+#include "BitShiftGain.h"
+#include <iostream>
+#include <lv2wrapper.h>
+
+BitShiftGain::BitShiftGain(double rate)
+ : LV2Plugin(rate)
+{
+}
+
+void BitShiftGain::activate()
+{
+ A = 0.5;
+ //this is reset: values being initialized only once. Startup values, whatever they are.
+
+}
+
+void BitShiftGain::run(uint32_t num_samples)
+{
+ A = *params[0];
+
+ processReplacing(const_cast<float **>(in), out, num_samples);
+}
+
+//
+// Include the processing code from the VST version.
+//
+#include <cmath>
+#include "../../../LinuxVST/src/BitShiftGain/BitShiftGainProc.cpp"
+
+// Create the LV2Wrapper and register the plugin
+LV2Wrapper<BitShiftGain> plugin;
diff --git a/plugins/LV2/src/BitShiftGain/BitShiftGain.h b/plugins/LV2/src/BitShiftGain/BitShiftGain.h
new file mode 100644
index 0000000..34566fa
--- /dev/null
+++ b/plugins/LV2/src/BitShiftGain/BitShiftGain.h
@@ -0,0 +1,31 @@
+#ifndef __BitShiftGain_H
+#define __BitShiftGain_H
+
+#include <lv2plugin.h>
+
+class BitShiftGain : public LV2Plugin<1> {
+public:
+ BitShiftGain(double rate);
+
+ void activate();
+ void run(uint32_t num_samples);
+
+ static constexpr const char * URI = "https://www.airwindows.com/bitshiftgain";
+
+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.
+ */
+
+
+ float A;
+};
+
+#endif
diff --git a/plugins/LV2/src/BitShiftGain/BitShiftGain.ttl b/plugins/LV2/src/BitShiftGain/BitShiftGain.ttl
new file mode 100644
index 0000000..6e14266
--- /dev/null
+++ b/plugins/LV2/src/BitShiftGain/BitShiftGain.ttl
@@ -0,0 +1,44 @@
+# Airwindows BitShiftGain 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/bitshiftgain>
+ a lv2:Plugin ,
+ lv2:AplifierPlugin ;
+ 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 "BitShift" ;
+ lv2:default 0.5 ;
+ lv2:minimum 0.0 ;
+ lv2:maximum 1.0 ;
+ ] , [
+ a lv2:InputPort , lv2:AudioPort ;
+ lv2:index 1 ;
+ lv2:symbol "in_l" ;
+ lv2:name "In left" ;
+ ] , [
+ a lv2:InputPort , lv2:AudioPort ;
+ lv2:index 2 ;
+ lv2:symbol "in_r" ;
+ lv2:name "In right" ;
+ ] , [
+ a lv2:OutputPort , lv2:AudioPort ;
+ lv2:index 3 ;
+ lv2:symbol "out_l" ;
+ lv2:name "Out left" ;
+ ] , [
+ a lv2:OutputPort , lv2:AudioPort ;
+ lv2:index 4 ;
+ lv2:symbol "out_r" ;
+ lv2:name "Out right" ;
+ ] .
diff --git a/plugins/LV2/src/BitShiftGain/manifest.ttl.in b/plugins/LV2/src/BitShiftGain/manifest.ttl.in
new file mode 100644
index 0000000..5944ea3
--- /dev/null
+++ b/plugins/LV2/src/BitShiftGain/manifest.ttl.in
@@ -0,0 +1,6 @@
+airwindows:bitshiftgain
+ a lv2:Plugin ;
+ doap:name "Airwindows BitShiftGain" ;
+ doap:license <http://opensource.org/licenses/mit> ;
+ lv2:binary <BitShiftGain@CMAKE_SHARED_LIBRARY_SUFFIX@> ;
+ rdfs:seeAlso <BitShiftGain.ttl> .
diff --git a/plugins/LV2/src/Bite/Bite.cpp b/plugins/LV2/src/Bite/Bite.cpp
new file mode 100644
index 0000000..9233522
--- /dev/null
+++ b/plugins/LV2/src/Bite/Bite.cpp
@@ -0,0 +1,55 @@
+#include "Bite.h"
+#include <iostream>
+#include <lv2wrapper.h>
+
+Bite::Bite(double rate)
+ : LV2Plugin(rate)
+{
+}
+
+void Bite::activate()
+{
+ A = 0.5;
+ B = 1.0;
+ sampleAL = 0.0;
+ sampleBL = 0.0;
+ sampleCL = 0.0;
+ sampleDL = 0.0;
+ sampleEL = 0.0;
+ sampleFL = 0.0;
+ sampleGL = 0.0;
+ sampleHL = 0.0;
+ sampleIL = 0.0;
+
+ sampleAR = 0.0;
+ sampleBR = 0.0;
+ sampleCR = 0.0;
+ sampleDR = 0.0;
+ sampleER = 0.0;
+ sampleFR = 0.0;
+ sampleGR = 0.0;
+ sampleHR = 0.0;
+ sampleIR = 0.0;
+
+ fpNShapeL = 0.0;
+ fpNShapeR = 0.0;
+ //this is reset: values being initialized only once. Startup values, whatever they are.
+
+}
+
+void Bite::run(uint32_t num_samples)
+{
+ A = *params[0];
+ B = *params[1];
+
+ processReplacing(const_cast<float **>(in), out, num_samples);
+}
+
+//
+// Include the processing code from the VST version.
+//
+#include <cmath>
+#include "../../../LinuxVST/src/Bite/BiteProc.cpp"
+
+// Create the LV2Wrapper and register the plugin
+LV2Wrapper<Bite> plugin;
diff --git a/plugins/LV2/src/Bite/Bite.h b/plugins/LV2/src/Bite/Bite.h
new file mode 100644
index 0000000..2e8de47
--- /dev/null
+++ b/plugins/LV2/src/Bite/Bite.h
@@ -0,0 +1,54 @@
+#ifndef __Bite_H
+#define __Bite_H
+
+#include <lv2plugin.h>
+
+class Bite : public LV2Plugin<2> {
+public:
+ Bite(double rate);
+
+ void activate();
+ void run(uint32_t num_samples);
+
+ static constexpr const char * URI = "https://www.airwindows.com/bite";
+
+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 sampleAL;
+ double sampleBL;
+ double sampleCL;
+ double sampleDL;
+ double sampleEL;
+ double sampleFL;
+ double sampleGL;
+ double sampleHL;
+ double sampleIL;
+
+ double sampleAR;
+ double sampleBR;
+ double sampleCR;
+ double sampleDR;
+ double sampleER;
+ double sampleFR;
+ double sampleGR;
+ double sampleHR;
+ double sampleIR;
+
+ float A;
+ float B;
+};
+
+#endif
diff --git a/plugins/LV2/src/Bite/Bite.ttl b/plugins/LV2/src/Bite/Bite.ttl
new file mode 100644
index 0000000..769ed64
--- /dev/null
+++ b/plugins/LV2/src/Bite/Bite.ttl
@@ -0,0 +1,52 @@
+# Airwindows Bite 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/bite>
+ 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 "Bite" ;
+ 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 "Output Level" ;
+ lv2:default 0.5 ;
+ lv2:minimum 0.0 ;
+ lv2:maximum 1.0 ;
+ ] , [
+ a lv2:InputPort , lv2:AudioPort ;
+ lv2:index 2 ;
+ lv2:symbol "in_l" ;
+ lv2:name "In left" ;
+ ] , [
+ a lv2:InputPort , lv2:AudioPort ;
+ lv2:index 3 ;
+ lv2:symbol "in_r" ;
+ lv2:name "In right" ;
+ ] , [
+ a lv2:OutputPort , lv2:AudioPort ;
+ lv2:index 4 ;
+ lv2:symbol "out_l" ;
+ lv2:name "Out left" ;
+ ] , [
+ a lv2:OutputPort , lv2:AudioPort ;
+ lv2:index 5 ;
+ lv2:symbol "out_r" ;
+ lv2:name "Out right" ;
+ ] .
diff --git a/plugins/LV2/src/Bite/manifest.ttl.in b/plugins/LV2/src/Bite/manifest.ttl.in
new file mode 100644
index 0000000..da127dd
--- /dev/null
+++ b/plugins/LV2/src/Bite/manifest.ttl.in
@@ -0,0 +1,6 @@
+airwindows:bite
+ a lv2:Plugin ;
+ doap:name "Airwindows Bite" ;
+ doap:license <http://opensource.org/licenses/mit> ;
+ lv2:binary <Bite@CMAKE_SHARED_LIBRARY_SUFFIX@> ;
+ rdfs:seeAlso <Bite.ttl> .
diff --git a/plugins/LV2/src/BlockParty/BlockParty.cpp b/plugins/LV2/src/BlockParty/BlockParty.cpp
new file mode 100644
index 0000000..434b22b
--- /dev/null
+++ b/plugins/LV2/src/BlockParty/BlockParty.cpp
@@ -0,0 +1,76 @@
+#include "BlockParty.h"
+#include <iostream>
+#include <lv2wrapper.h>
+
+BlockParty::BlockParty(double rate)
+ : LV2Plugin(rate)
+{
+}
+
+void BlockParty::activate()
+{
+ A = 0.0;
+ B = 1.0;
+ fpd = 17;
+
+ muSpeedAL = 10000;
+ muSpeedBL = 10000;
+ muSpeedCL = 10000;
+ muSpeedDL = 10000;
+ muSpeedEL = 10000;
+ muCoefficientAL = 1;
+ muCoefficientBL = 1;
+ muCoefficientCL = 1;
+ muCoefficientDL = 1;
+ muCoefficientEL = 1;
+ lastCoefficientAL = 1;
+ lastCoefficientBL = 1;
+ lastCoefficientCL = 1;
+ lastCoefficientDL = 1;
+ mergedCoefficientsL = 1;
+ thresholdL = 1.0;
+ thresholdBL = 1.0;
+ muVaryL = 1;
+
+ muSpeedAR = 10000;
+ muSpeedBR = 10000;
+ muSpeedCR = 10000;
+ muSpeedDR = 10000;
+ muSpeedER = 10000;
+ muCoefficientAR = 1;
+ muCoefficientBR = 1;
+ muCoefficientCR = 1;
+ muCoefficientDR = 1;
+ muCoefficientER = 1;
+ lastCoefficientAR = 1;
+ lastCoefficientBR = 1;
+ lastCoefficientCR = 1;
+ lastCoefficientDR = 1;
+ mergedCoefficientsR = 1;
+ thresholdR = 1.0;
+ thresholdBR = 1.0;
+ muVaryR = 1;
+
+ count = 1;
+ fpFlip = true;
+
+ //this is reset: values being initialized only once. Startup values, whatever they are.
+
+}
+
+void BlockParty::run(uint32_t num_samples)
+{
+ A = *params[0];
+ B = *params[1];
+
+ processReplacing(const_cast<float **>(in), out, num_samples);
+}
+
+//
+// Include the processing code from the VST version.
+//
+#include <cmath>
+#include "../../../LinuxVST/src/BlockParty/BlockPartyProc.cpp"
+
+// Create the LV2Wrapper and register the plugin
+LV2Wrapper<BlockParty> plugin;
diff --git a/plugins/LV2/src/BlockParty/BlockParty.h b/plugins/LV2/src/BlockParty/BlockParty.h
new file mode 100644
index 0000000..6b08f0b
--- /dev/null
+++ b/plugins/LV2/src/BlockParty/BlockParty.h
@@ -0,0 +1,79 @@
+#ifndef __BlockParty_H
+#define __BlockParty_H
+
+#include <lv2plugin.h>
+
+class BlockParty : public LV2Plugin<2> {
+public:
+ BlockParty(double rate);
+
+ void activate();
+ void run(uint32_t num_samples);
+
+ static constexpr const char * URI = "https://www.airwindows.com/blockparty";
+
+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.
+ */
+
+ uint32_t fpd;
+ //default stuff
+
+ float A;
+ float B;
+
+ double muVaryL;
+ double muAttackL;
+ double muNewSpeedL;
+ double muSpeedAL;
+ double muSpeedBL;
+ double muSpeedCL;
+ double muSpeedDL;
+ double muSpeedEL;
+ double muCoefficientAL;
+ double muCoefficientBL;
+ double muCoefficientCL;
+ double muCoefficientDL;
+ double muCoefficientEL;
+ double lastCoefficientAL;
+ double lastCoefficientBL;
+ double lastCoefficientCL;
+ double lastCoefficientDL;
+ double mergedCoefficientsL;
+ double thresholdL;
+ double thresholdBL;
+
+ double muVaryR;
+ double muAttackR;
+ double muNewSpeedR;
+ double muSpeedAR;
+ double muSpeedBR;
+ double muSpeedCR;
+ double muSpeedDR;
+ double muSpeedER;
+ double muCoefficientAR;
+ double muCoefficientBR;
+ double muCoefficientCR;
+ double muCoefficientDR;
+ double muCoefficientER;
+ double lastCoefficientAR;
+ double lastCoefficientBR;
+ double lastCoefficientCR;
+ double lastCoefficientDR;
+ double mergedCoefficientsR;
+ double thresholdR;
+ double thresholdBR;
+
+ int count;
+ bool fpFlip;
+};
+
+#endif
diff --git a/plugins/LV2/src/BlockParty/BlockParty.ttl b/plugins/LV2/src/BlockParty/BlockParty.ttl
new file mode 100644
index 0000000..a475c7e
--- /dev/null
+++ b/plugins/LV2/src/BlockParty/BlockParty.ttl
@@ -0,0 +1,52 @@
+# Airwindows BlockParty 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/blockparty>
+ a lv2:Plugin ,
+ lv2:LimiterPlugin ;
+ 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 "Pound" ;
+ 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 "Dry/Wet" ;
+ lv2:default 0.5 ;
+ lv2:minimum 0.0 ;
+ lv2:maximum 1.0 ;
+ ] , [
+ a lv2:InputPort , lv2:AudioPort ;
+ lv2:index 2 ;
+ lv2:symbol "in_l" ;
+ lv2:name "In left" ;
+ ] , [
+ a lv2:InputPort , lv2:AudioPort ;
+ lv2:index 3 ;
+ lv2:symbol "in_r" ;
+ lv2:name "In right" ;
+ ] , [
+ a lv2:OutputPort , lv2:AudioPort ;
+ lv2:index 4 ;
+ lv2:symbol "out_l" ;
+ lv2:name "Out left" ;
+ ] , [
+ a lv2:OutputPort , lv2:AudioPort ;
+ lv2:index 5 ;
+ lv2:symbol "out_r" ;
+ lv2:name "Out right" ;
+ ] .
diff --git a/plugins/LV2/src/BlockParty/manifest.ttl.in b/plugins/LV2/src/BlockParty/manifest.ttl.in
new file mode 100644
index 0000000..59f63f7
--- /dev/null
+++ b/plugins/LV2/src/BlockParty/manifest.ttl.in
@@ -0,0 +1,6 @@
+airwindows:blockparty
+ a lv2:Plugin ;
+ doap:name "Airwindows BlockParty" ;
+ doap:license <http://opensource.org/licenses/mit> ;
+ lv2:binary <BlockParty@CMAKE_SHARED_LIBRARY_SUFFIX@> ;
+ rdfs:seeAlso <BlockParty.ttl> .
diff --git a/plugins/LV2/src/BrassRider/BrassRider.cpp b/plugins/LV2/src/BrassRider/BrassRider.cpp
new file mode 100644
index 0000000..203f14a
--- /dev/null
+++ b/plugins/LV2/src/BrassRider/BrassRider.cpp
@@ -0,0 +1,50 @@
+#include "BrassRider.h"
+#include <iostream>
+#include <lv2wrapper.h>
+
+BrassRider::BrassRider(double rate)
+ : LV2Plugin(rate)
+{
+}
+
+void BrassRider::activate()
+{
+ A = 0.0;
+ B = 0.0;
+ for(int count = 0; count < 80001; count++) {d[count] = 0.0; e[count] = 0.0;}
+ control = 0.0;
+ clamp = 0.0;
+ highIIRL = 0.0;
+ slewIIRL = 0.0;
+ highIIR2L = 0.0;
+ slewIIR2L = 0.0;
+ lastSampleL = 0.0;
+ lastSlewL = 0.0;
+ highIIRR = 0.0;
+ slewIIRR = 0.0;
+ highIIR2R = 0.0;
+ slewIIR2R = 0.0;
+ lastSampleR = 0.0;
+ lastSlewR = 0.0;
+ gcount = 0;
+ fpd = 17;
+ //this is reset: values being initialized only once. Startup values, whatever they are.
+
+}
+
+void BrassRider::run(uint32_t num_samples)
+{
+ A = *params[0];
+ B = *params[1];
+
+ processReplacing(const_cast<float **>(in), out, num_samples);
+}
+
+//
+// Include the processing code from the VST version.
+//
+#include <cmath>
+#include "../../../LinuxVST/src/BrassRider/BrassRiderProc.cpp"
+
+// Create the LV2Wrapper and register the plugin
+LV2Wrapper<BrassRider> plugin;
diff --git a/plugins/LV2/src/BrassRider/BrassRider.h b/plugins/LV2/src/BrassRider/BrassRider.h
new file mode 100644
index 0000000..b5817d2
--- /dev/null
+++ b/plugins/LV2/src/BrassRider/BrassRider.h
@@ -0,0 +1,51 @@
+#ifndef __BrassRider_H
+#define __BrassRider_H
+
+#include <lv2plugin.h>
+
+class BrassRider : public LV2Plugin<2> {
+public:
+ BrassRider(double rate);
+
+ void activate();
+ void run(uint32_t num_samples);
+
+ static constexpr const char * URI = "https://www.airwindows.com/brassrider";
+
+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.
+ */
+
+ double d[80002];
+ double e[80002];
+ double highIIRL;
+ double slewIIRL;
+ double highIIR2L;
+ double slewIIR2L;
+ double highIIRR;
+ double slewIIRR;
+ double highIIR2R;
+ double slewIIR2R;
+ double control;
+ double clamp;
+ double lastSampleL;
+ double lastSlewL;
+ double lastSampleR;
+ double lastSlewR;
+ int gcount;
+ uint32_t fpd;
+ //default stuff
+
+ float A;
+ float B;
+};
+
+#endif
diff --git a/plugins/LV2/src/BrassRider/BrassRider.ttl b/plugins/LV2/src/BrassRider/BrassRider.ttl
new file mode 100644
index 0000000..e505ab4
--- /dev/null
+++ b/plugins/LV2/src/BrassRider/BrassRider.ttl
@@ -0,0 +1,52 @@
+# Airwindows BrassRider 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/brassrider>
+ a lv2:Plugin ,
+ lv2:UtilityPlugin ;
+ 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 "Thresh" ;
+ 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 "Dry/Wet" ;
+ lv2:default 0.5 ;
+ lv2:minimum 0.0 ;
+ lv2:maximum 1.0 ;
+ ] , [
+ a lv2:InputPort , lv2:AudioPort ;
+ lv2:index 2 ;
+ lv2:symbol "in_l" ;
+ lv2:name "In left" ;
+ ] , [
+ a lv2:InputPort , lv2:AudioPort ;
+ lv2:index 3 ;
+ lv2:symbol "in_r" ;
+ lv2:name "In right" ;
+ ] , [
+ a lv2:OutputPort , lv2:AudioPort ;
+ lv2:index 4 ;
+ lv2:symbol "out_l" ;
+ lv2:name "Out left" ;
+ ] , [
+ a lv2:OutputPort , lv2:AudioPort ;
+ lv2:index 5 ;
+ lv2:symbol "out_r" ;
+ lv2:name "Out right" ;
+ ] .
diff --git a/plugins/LV2/src/BrassRider/manifest.ttl.in b/plugins/LV2/src/BrassRider/manifest.ttl.in
new file mode 100644
index 0000000..75a0191
--- /dev/null
+++ b/plugins/LV2/src/BrassRider/manifest.ttl.in
@@ -0,0 +1,6 @@
+airwindows:brassrider
+ a lv2:Plugin ;
+ doap:name "Airwindows BrassRider" ;
+ doap:license <http://opensource.org/licenses/mit> ;
+ lv2:binary <BrassRider@CMAKE_SHARED_LIBRARY_SUFFIX@> ;
+ rdfs:seeAlso <BrassRider.ttl> .
diff --git a/plugins/LV2/src/BrightAmbience/BrightAmbience.cpp b/plugins/LV2/src/BrightAmbience/BrightAmbience.cpp
new file mode 100644
index 0000000..2df98c3
--- /dev/null
+++ b/plugins/LV2/src/BrightAmbience/BrightAmbience.cpp
@@ -0,0 +1,38 @@
+#include "BrightAmbience.h"
+#include <iostream>
+#include <lv2wrapper.h>
+
+BrightAmbience::BrightAmbience(double rate)
+ : LV2Plugin(rate)
+{
+}
+
+void BrightAmbience::activate()
+{
+ for(int count = 0; count < 25360; count++) {pL[count] = 0;pR[count] = 0;}
+ gcount = 0;
+ A = 0.0;
+ B = 0.0;
+ C = 0.0;
+ fpd = 17;
+ //this is reset: values being initialized only once. Startup values, whatever they are.
+
+}
+
+void BrightAmbience::run(uint32_t num_samples)
+{
+ A = *params[0];
+ B = *params[1];
+ C = *params[2];
+
+ processReplacing(const_cast<float **>(in), out, num_samples);
+}
+
+//
+// Include the processing code from the VST version.
+//
+#include <cmath>
+#include "../../../LinuxVST/src/BrightAmbience/BrightAmbienceProc.cpp"
+
+// Create the LV2Wrapper and register the plugin
+LV2Wrapper<BrightAmbience> plugin;
diff --git a/plugins/LV2/src/BrightAmbience/BrightAmbience.h b/plugins/LV2/src/BrightAmbience/BrightAmbience.h
new file mode 100644
index 0000000..b85ba64
--- /dev/null
+++ b/plugins/LV2/src/BrightAmbience/BrightAmbience.h
@@ -0,0 +1,38 @@
+#ifndef __BrightAmbience_H
+#define __BrightAmbience_H
+
+#include <lv2plugin.h>
+
+class BrightAmbience : public LV2Plugin<3> {
+public:
+ BrightAmbience(double rate);
+
+ void activate();
+ void run(uint32_t num_samples);
+
+ static constexpr const char * URI = "https://www.airwindows.com/brightambience";
+
+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.
+ */
+
+ int32_t pL[25361];
+ int32_t pR[25361];
+ int gcount;
+ uint32_t fpd;
+ //default stuff
+
+ float A;
+ float B;
+ float C;
+};
+
+#endif
diff --git a/plugins/LV2/src/BrightAmbience/BrightAmbience.ttl b/plugins/LV2/src/BrightAmbience/BrightAmbience.ttl
new file mode 100644
index 0000000..51687ed
--- /dev/null
+++ b/plugins/LV2/src/BrightAmbience/BrightAmbience.ttl
@@ -0,0 +1,60 @@
+# Airwindows BrightAmbience 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/brightambience>
+ a lv2:Plugin ,
+ lv2:EffectsPlugin ;
+ 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 "Dry/Wet" ;
+ 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 "Sustain" ;
+ 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 "Decay" ;
+ lv2:default 0.5 ;
+ lv2:minimum 0.0 ;
+ lv2:maximum 1.0 ;
+ ] , [
+ a lv2:InputPort , lv2:AudioPort ;
+ lv2:index 3 ;
+ lv2:symbol "in_l" ;
+ lv2:name "In left" ;
+ ] , [
+ a lv2:InputPort , lv2:AudioPort ;
+ lv2:index 4 ;
+ lv2:symbol "in_r" ;
+ lv2:name "In right" ;
+ ] , [
+ a lv2:OutputPort , lv2:AudioPort ;
+ lv2:index 5 ;
+ lv2:symbol "out_l" ;
+ lv2:name "Out left" ;
+ ] , [
+ a lv2:OutputPort , lv2:AudioPort ;
+ lv2:index 6 ;
+ lv2:symbol "out_r" ;
+ lv2:name "Out right" ;
+ ] .
diff --git a/plugins/LV2/src/BrightAmbience/manifest.ttl.in b/plugins/LV2/src/BrightAmbience/manifest.ttl.in
new file mode 100644
index 0000000..416b4f8
--- /dev/null
+++ b/plugins/LV2/src/BrightAmbience/manifest.ttl.in
@@ -0,0 +1,6 @@
+airwindows:brightambience
+ a lv2:Plugin ;
+ doap:name "Airwindows BrightAmbience" ;
+ doap:license <http://opensource.org/licenses/mit> ;
+ lv2:binary <BrightAmbience@CMAKE_SHARED_LIBRARY_SUFFIX@> ;
+ rdfs:seeAlso <BrightAmbience.ttl> .
diff --git a/plugins/LV2/src/BuildATPDF/BuildATPDF.cpp b/plugins/LV2/src/BuildATPDF/BuildATPDF.cpp
new file mode 100644
index 0000000..ac70283
--- /dev/null
+++ b/plugins/LV2/src/BuildATPDF/BuildATPDF.cpp
@@ -0,0 +1,49 @@
+#include "BuildATPDF.h"
+#include <iostream>
+#include <lv2wrapper.h>
+
+BuildATPDF::BuildATPDF(double rate)
+ : LV2Plugin(rate)
+{
+}
+
+void BuildATPDF::activate()
+{
+ A = 0.5;
+ B = 0.5;
+ C = 0.5;
+ D = 0.5;
+ E = 0.5;
+ F = 0.5;
+ G = 0.5;
+ H = 0.5;
+ I = 0.5;
+ J = 0.5;
+ //this is reset: values being initialized only once. Startup values, whatever they are.
+
+}
+
+void BuildATPDF::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];
+ I = *params[8];
+ J = *params[9];
+
+ processReplacing(const_cast<float **>(in), out, num_samples);
+}
+
+//
+// Include the processing code from the VST version.
+//
+#include <cmath>
+#include "../../../LinuxVST/src/BuildATPDF/BuildATPDFProc.cpp"
+
+// Create the LV2Wrapper and register the plugin
+LV2Wrapper<BuildATPDF> plugin;
diff --git a/plugins/LV2/src/BuildATPDF/BuildATPDF.h b/plugins/LV2/src/BuildATPDF/BuildATPDF.h
new file mode 100644
index 0000000..3f0da87
--- /dev/null
+++ b/plugins/LV2/src/BuildATPDF/BuildATPDF.h
@@ -0,0 +1,46 @@
+#ifndef __BuildATPDF_H
+#define __BuildATPDF_H
+
+#include <lv2plugin.h>
+
+class BuildATPDF : public LV2Plugin<10> {
+public:
+ BuildATPDF(double rate);
+
+ void activate();
+ void run(uint32_t num_samples);
+
+ static constexpr const char * URI = "https://www.airwindows.com/buildatpdf";
+
+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.
+ */
+
+ double bL[11];
+ double bR[11];
+ double f[11];
+ //default stuff
+
+ float A;
+ float B;
+ float C;
+ float D;
+ float E;
+ float F;
+ float G;
+ float H;
+ float I;
+ float J;
+ //parameters. Always 0-1, and we scale/alter them elsewhere.
+
+};
+
+#endif
diff --git a/plugins/LV2/src/BuildATPDF/BuildATPDF.ttl b/plugins/LV2/src/BuildATPDF/BuildATPDF.ttl
new file mode 100644
index 0000000..c41adf1
--- /dev/null
+++ b/plugins/LV2/src/BuildATPDF/BuildATPDF.ttl
@@ -0,0 +1,116 @@
+# Airwindows BuildATPDF 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/buildatpdf>
+ a lv2:Plugin ,
+ lv2:EffectsPlugin ;
+ 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 "First" ;
+ 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 "Second" ;
+ 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 "Third" ;
+ 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 "Fourth" ;
+ 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 "Fifth" ;
+ 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 "Sixth" ;
+ 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 "Seventh" ;
+ 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 "Eighth" ;
+ lv2:default 0.5 ;
+ lv2:minimum 0.0 ;
+ lv2:maximum 1.0 ;
+ ] , [
+ a lv2:InputPort , lv2:ControlPort ;
+ lv2:index 8 ;
+ lv2:symbol "I" ;
+ lv2:name "Ninth" ;
+ lv2:default 0.5 ;
+ lv2:minimum 0.0 ;
+ lv2:maximum 1.0 ;
+ ] , [
+ a lv2:InputPort , lv2:ControlPort ;
+ lv2:index 9 ;
+ lv2:symbol "J" ;
+ lv2:name "Tenth" ;
+ lv2:default 0.5 ;
+ lv2:minimum 0.0 ;
+ lv2:maximum 1.0 ;
+ ] , [
+ a lv2:InputPort , lv2:AudioPort ;
+ lv2:index 10 ;
+ lv2:symbol "in_l" ;
+ lv2:name "In left" ;
+ ] , [
+ a lv2:InputPort , lv2:AudioPort ;
+ lv2:index 11 ;
+ lv2:symbol "in_r" ;
+ lv2:name "In right" ;
+ ] , [
+ a lv2:OutputPort , lv2:AudioPort ;
+ lv2:index 12 ;
+ lv2:symbol "out_l" ;
+ lv2:name "Out left" ;
+ ] , [
+ a lv2:OutputPort , lv2:AudioPort ;
+ lv2:index 13 ;
+ lv2:symbol "out_r" ;
+ lv2:name "Out right" ;
+ ] .
diff --git a/plugins/LV2/src/BuildATPDF/manifest.ttl.in b/plugins/LV2/src/BuildATPDF/manifest.ttl.in
new file mode 100644
index 0000000..6bcf307
--- /dev/null
+++ b/plugins/LV2/src/BuildATPDF/manifest.ttl.in
@@ -0,0 +1,6 @@
+airwindows:buildatpdf
+ a lv2:Plugin ;
+ doap:name "Airwindows BuildATPDF" ;
+ doap:license <http://opensource.org/licenses/mit> ;
+ lv2:binary <BuildATPDF@CMAKE_SHARED_LIBRARY_SUFFIX@> ;
+ rdfs:seeAlso <BuildATPDF.ttl> .
diff --git a/plugins/LV2/src/BussColors4/BussColors4.cpp b/plugins/LV2/src/BussColors4/BussColors4.cpp
new file mode 100644
index 0000000..1bcb13a
--- /dev/null
+++ b/plugins/LV2/src/BussColors4/BussColors4.cpp
@@ -0,0 +1,68 @@
+#include "BussColors4.h"
+#include <iostream>
+#include <lv2wrapper.h>
+#include <cmath>
+
+BussColors4::BussColors4(double rate)
+ : LV2Plugin(rate)
+{
+}
+
+void BussColors4::activate()
+{
+ A = 0.0;
+ B = 0.5;
+ C = 0.5;
+ D = 1.0;
+
+ for (int count = 0; count < 174; count++) {bL[count] = 0; bR[count] = 0;}
+ for (int count = 0; count < 99; count++) {dL[count] = 0; dR[count] = 0;}
+ for (int count = 0; count < 34; count++) c[count] = count; //initial setup for 44.1K
+ g[1] = pow(10.0, -5.2 / 14.0); //dark
+ g[2] = pow(10.0, -6.2 / 14.0); //rock
+ g[3] = pow(10.0, -2.9 / 14.0); //lush
+ g[4] = pow(10.0, -1.1 / 14.0); //vibe
+ g[5] = pow(10.0, -5.1 / 14.0); //holo
+ g[6] = pow(10.0, -3.6 / 14.0); //punch
+ g[7] = pow(10.0, -2.3 / 14.0); //steel
+ g[8] = pow(10.0, -2.9 / 14.0); //tube
+ //preset gains for models
+ outg[1] = pow(10.0, -0.3 / 14.0); //dark
+ outg[2] = pow(10.0, 0.5 / 14.0); //rock
+ outg[3] = pow(10.0, -0.7 / 14.0); //lush
+ outg[4] = pow(10.0, -0.6 / 14.0); //vibe
+ outg[5] = pow(10.0, -0.2 / 14.0); //holo
+ outg[6] = pow(10.0, 0.3 / 14.0); //punch
+ outg[7] = pow(10.0, 0.1 / 14.0); //steel
+ outg[8] = pow(10.0, 0.9 / 14.0); //tube
+ //preset gains for models
+ controlL = 0;
+ controlR = 0;
+ slowdynL = 0;
+ slowdynR = 0;
+ gcount = 0;
+
+ fpNShapeL = 0.0;
+ fpNShapeR = 0.0;
+ //this is reset: values being initialized only once. Startup values, whatever they are.
+
+}
+
+void BussColors4::run(uint32_t num_samples)
+{
+ A = *params[0];
+ B = *params[1];
+ C = *params[2];
+ D = *params[3];
+
+ processReplacing(const_cast<float **>(in), out, num_samples);
+}
+
+//
+// Include the processing code from the VST version.
+//
+#include <cmath>
+#include "../../../LinuxVST/src/BussColors4/BussColors4Proc.cpp"
+
+// Create the LV2Wrapper and register the plugin
+LV2Wrapper<BussColors4> plugin;
diff --git a/plugins/LV2/src/BussColors4/BussColors4.h b/plugins/LV2/src/BussColors4/BussColors4.h
new file mode 100644
index 0000000..ceec6e6
--- /dev/null
+++ b/plugins/LV2/src/BussColors4/BussColors4.h
@@ -0,0 +1,51 @@
+#ifndef __BussColors4_H
+#define __BussColors4_H
+
+#include <lv2plugin.h>
+
+class BussColors4 : public LV2Plugin<4> {
+public:
+ BussColors4(double rate);
+
+ void activate();
+ void run(uint32_t num_samples);
+
+ static constexpr const char * URI = "https://www.airwindows.com/busscolors4";
+
+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.
+ */
+
+ double bL[175]; //full buffer for high sample rates. Scales to 192K
+ double bR[175]; //full buffer for high sample rates. Scales to 192K
+ double dL[100]; //buffer for calculating sag as it relates to the dynamic impulse synthesis. To 192K.
+ double dR[100]; //buffer for calculating sag as it relates to the dynamic impulse synthesis. To 192K.
+ int c[35]; //just the number of taps we use, doesn't have to scale
+ double g[9]; //console model
+ double outg[9]; //console model
+ double controlL;
+ double controlR;
+ double slowdynL;
+ double slowdynR;
+ int gcount;
+
+ long double fpNShapeL;
+ long double fpNShapeR;
+ //default stuff
+
+ float A;
+ float B;
+ float C;
+ float D; //parameters. Always 0-1, and we scale/alter them elsewhere.
+
+};
+
+#endif
diff --git a/plugins/LV2/src/BussColors4/BussColors4.ttl b/plugins/LV2/src/BussColors4/BussColors4.ttl
new file mode 100644
index 0000000..6728240
--- /dev/null
+++ b/plugins/LV2/src/BussColors4/BussColors4.ttl
@@ -0,0 +1,68 @@
+# Airwindows BussColors4 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/busscolors4>
+ a lv2:Plugin ,
+ lv2:DistortionPlugin ;
+ 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 "Color" ;
+ 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 "Input Trim" ;
+ 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 "Output Trim" ;
+ 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 "Dry/Wet" ;
+ lv2:default 0.5 ;
+ lv2:minimum 0.0 ;
+ lv2:maximum 1.0 ;
+ ] , [
+ a lv2:InputPort , lv2:AudioPort ;
+ lv2:index 4 ;
+ lv2:symbol "in_l" ;
+ lv2:name "In left" ;
+ ] , [
+ a lv2:InputPort , lv2:AudioPort ;
+ lv2:index 5 ;
+ lv2:symbol "in_r" ;
+ lv2:name "In right" ;
+ ] , [
+ a lv2:OutputPort , lv2:AudioPort ;
+ lv2:index 6 ;
+ lv2:symbol "out_l" ;
+ lv2:name "Out left" ;
+ ] , [
+ a lv2:OutputPort , lv2:AudioPort ;
+ lv2:index 7 ;
+ lv2:symbol "out_r" ;
+ lv2:name "Out right" ;
+ ] .
diff --git a/plugins/LV2/src/BussColors4/manifest.ttl.in b/plugins/LV2/src/BussColors4/manifest.ttl.in
new file mode 100644
index 0000000..b1bb555
--- /dev/null
+++ b/plugins/LV2/src/BussColors4/manifest.ttl.in
@@ -0,0 +1,6 @@
+airwindows:busscolors4
+ a lv2:Plugin ;
+ doap:name "Airwindows BussColors4" ;
+ doap:license <http://opensource.org/licenses/mit> ;
+ lv2:binary <BussColors4@CMAKE_SHARED_LIBRARY_SUFFIX@> ;
+ rdfs:seeAlso <BussColors4.ttl> .
diff --git a/plugins/LV2/src/ButterComp/ButterComp.cpp b/plugins/LV2/src/ButterComp/ButterComp.cpp
new file mode 100644
index 0000000..654f88e
--- /dev/null
+++ b/plugins/LV2/src/ButterComp/ButterComp.cpp
@@ -0,0 +1,47 @@
+#include "ButterComp.h"
+#include <iostream>
+#include <lv2wrapper.h>
+
+ButterComp::ButterComp(double rate)
+ : LV2Plugin(rate)
+{
+}
+
+void ButterComp::activate()
+{
+ A = 0.0;
+ B = 1.0;
+ controlAposL = 1.0;
+ controlAnegL = 1.0;
+ controlBposL = 1.0;
+ controlBnegL = 1.0;
+ targetposL = 1.0;
+ targetnegL = 1.0;
+ controlAposR = 1.0;
+ controlAnegR = 1.0;
+ controlBposR = 1.0;
+ controlBnegR = 1.0;
+ targetposR = 1.0;
+ targetnegR = 1.0;
+ fpNShapeL = 0.0;
+ fpNShapeR = 0.0;
+ //this is reset: values being initialized only once. Startup values, whatever they are.
+
+}
+
+void ButterComp::run(uint32_t num_samples)
+{
+ A = *params[0];
+ B = *params[1];
+
+ processReplacing(const_cast<float **>(in), out, num_samples);
+}
+
+//
+// Include the processing code from the VST version.
+//
+#include <cmath>
+#include "../../../LinuxVST/src/ButterComp/ButterCompProc.cpp"
+
+// Create the LV2Wrapper and register the plugin
+LV2Wrapper<ButterComp> plugin;
diff --git a/plugins/LV2/src/ButterComp/ButterComp.h b/plugins/LV2/src/ButterComp/ButterComp.h
new file mode 100644
index 0000000..c649fdf
--- /dev/null
+++ b/plugins/LV2/src/ButterComp/ButterComp.h
@@ -0,0 +1,47 @@
+#ifndef __ButterComp_H
+#define __ButterComp_H
+
+#include <lv2plugin.h>
+
+class ButterComp : public LV2Plugin<2> {
+public:
+ ButterComp(double rate);
+
+ void activate();
+ void run(uint32_t num_samples);
+
+ static constexpr const char * URI = "https://www.airwindows.com/buttercomp";
+
+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.
+ */
+
+ double controlAposL;
+ double controlAnegL;
+ double controlBposL;
+ double controlBnegL;
+ double targetposL;
+ double targetnegL;
+ double controlAposR;
+ double controlAnegR;
+ double controlBposR;
+ double controlBnegR;
+ double targetposR;
+ double targetnegR;
+ long double fpNShapeL;
+ long double fpNShapeR;
+ //default stuff
+
+ float A;
+ float B;
+};
+
+#endif
diff --git a/plugins/LV2/src/ButterComp/ButterComp.ttl b/plugins/LV2/src/ButterComp/ButterComp.ttl
new file mode 100644
index 0000000..735011f
--- /dev/null
+++ b/plugins/LV2/src/ButterComp/ButterComp.ttl
@@ -0,0 +1,52 @@
+# Airwindows ButterComp 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/buttercomp>
+ a lv2:Plugin ,
+ lv2:EffectsPlugin ;
+ 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 "Compress" ;
+ 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 "Dry/Wet" ;
+ lv2:default 0.5 ;
+ lv2:minimum 0.0 ;
+ lv2:maximum 1.0 ;
+ ] , [
+ a lv2:InputPort , lv2:AudioPort ;
+ lv2:index 2 ;
+ lv2:symbol "in_l" ;
+ lv2:name "In left" ;
+ ] , [
+ a lv2:InputPort , lv2:AudioPort ;
+ lv2:index 3 ;
+ lv2:symbol "in_r" ;
+ lv2:name "In right" ;
+ ] , [
+ a lv2:OutputPort , lv2:AudioPort ;
+ lv2:index 4 ;
+ lv2:symbol "out_l" ;
+ lv2:name "Out left" ;
+ ] , [
+ a lv2:OutputPort , lv2:AudioPort ;
+ lv2:index 5 ;
+ lv2:symbol "out_r" ;
+ lv2:name "Out right" ;
+ ] .
diff --git a/plugins/LV2/src/ButterComp/manifest.ttl.in b/plugins/LV2/src/ButterComp/manifest.ttl.in
new file mode 100644
index 0000000..b6a4e94
--- /dev/null
+++ b/plugins/LV2/src/ButterComp/manifest.ttl.in
@@ -0,0 +1,6 @@
+airwindows:buttercomp
+ a lv2:Plugin ;
+ doap:name "Airwindows ButterComp" ;
+ doap:license <http://opensource.org/licenses/mit> ;
+ lv2:binary <ButterComp@CMAKE_SHARED_LIBRARY_SUFFIX@> ;
+ rdfs:seeAlso <ButterComp.ttl> .
diff --git a/plugins/LV2/src/ButterComp2/ButterComp2.cpp b/plugins/LV2/src/ButterComp2/ButterComp2.cpp
new file mode 100644
index 0000000..c329092
--- /dev/null
+++ b/plugins/LV2/src/ButterComp2/ButterComp2.cpp
@@ -0,0 +1,54 @@
+#include "ButterComp2.h"
+#include <iostream>
+#include <lv2wrapper.h>
+
+ButterComp2::ButterComp2(double rate)
+ : LV2Plugin(rate)
+{
+}
+
+void ButterComp2::activate()
+{
+ controlAposL = 1.0;
+ controlAnegL = 1.0;
+ controlBposL = 1.0;
+ controlBnegL = 1.0;
+ targetposL = 1.0;
+ targetnegL = 1.0;
+ lastOutputL = 0.0;
+
+ controlAposR = 1.0;
+ controlAnegR = 1.0;
+ controlBposR = 1.0;
+ controlBnegR = 1.0;
+ targetposR = 1.0;
+ targetnegR = 1.0;
+ lastOutputR = 0.0;
+
+ flip = false;
+ A = 0.0;
+ B = 0.5;
+ C = 1.0;
+ fpNShapeL = 0.0;
+ fpNShapeR = 0.0;
+ //this is reset: values being initialized only once. Startup values, whatever they are.
+
+}
+
+void ButterComp2::run(uint32_t num_samples)
+{
+ A = *params[0];
+ B = *params[1];
+ C = *params[2];
+
+ processReplacing(const_cast<float **>(in), out, num_samples);
+}
+
+//
+// Include the processing code from the VST version.
+//
+#include <cmath>
+#include "../../../LinuxVST/src/ButterComp2/ButterComp2Proc.cpp"
+
+// Create the LV2Wrapper and register the plugin
+LV2Wrapper<ButterComp2> plugin;
diff --git a/plugins/LV2/src/ButterComp2/ButterComp2.h b/plugins/LV2/src/ButterComp2/ButterComp2.h
new file mode 100644
index 0000000..228cf9d
--- /dev/null
+++ b/plugins/LV2/src/ButterComp2/ButterComp2.h
@@ -0,0 +1,52 @@
+#ifndef __ButterComp2_H
+#define __ButterComp2_H
+
+#include <lv2plugin.h>
+
+class ButterComp2 : public LV2Plugin<3> {
+public:
+ ButterComp2(double rate);
+
+ void activate();
+ void run(uint32_t num_samples);
+
+ static constexpr const char * URI = "https://www.airwindows.com/buttercomp2";
+
+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 controlAposL;
+ long double controlAnegL;
+ long double controlBposL;
+ long double controlBnegL;
+ long double targetposL;
+ long double targetnegL;
+ long double lastOutputL;
+ long double controlAposR;
+ long double controlAnegR;
+ long double controlBposR;
+ long double controlBnegR;
+ long double targetposR;
+ long double targetnegR;
+ long double lastOutputR;
+ bool flip;
+ long double fpNShapeL;
+ long double fpNShapeR;
+ //default stuff
+
+ float A;
+ float B;
+ float C;
+
+};
+
+#endif
diff --git a/plugins/LV2/src/ButterComp2/ButterComp2.ttl b/plugins/LV2/src/ButterComp2/ButterComp2.ttl
new file mode 100644
index 0000000..4cdc2de
--- /dev/null
+++ b/plugins/LV2/src/ButterComp2/ButterComp2.ttl
@@ -0,0 +1,60 @@
+# Airwindows ButterComp2 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/buttercomp2>
+ a lv2:Plugin ,
+ lv2:CompressorPlugin ;
+ 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 "Compress" ;
+ 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 "Output" ;
+ 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 "Dry/Wet" ;
+ lv2:default 0.5 ;
+ lv2:minimum 0.0 ;
+ lv2:maximum 1.0 ;
+ ] , [
+ a lv2:InputPort , lv2:AudioPort ;
+ lv2:index 3 ;
+ lv2:symbol "in_l" ;
+ lv2:name "In left" ;
+ ] , [
+ a lv2:InputPort , lv2:AudioPort ;
+ lv2:index 4 ;
+ lv2:symbol "in_r" ;
+ lv2:name "In right" ;
+ ] , [
+ a lv2:OutputPort , lv2:AudioPort ;
+ lv2:index 5 ;
+ lv2:symbol "out_l" ;
+ lv2:name "Out left" ;
+ ] , [
+ a lv2:OutputPort , lv2:AudioPort ;
+ lv2:index 6 ;
+ lv2:symbol "out_r" ;
+ lv2:name "Out right" ;
+ ] .
diff --git a/plugins/LV2/src/ButterComp2/manifest.ttl.in b/plugins/LV2/src/ButterComp2/manifest.ttl.in
new file mode 100644
index 0000000..af647e5
--- /dev/null
+++ b/plugins/LV2/src/ButterComp2/manifest.ttl.in
@@ -0,0 +1,6 @@
+airwindows:buttercomp2
+ a lv2:Plugin ;
+ doap:name "Airwindows ButterComp2" ;
+ doap:license <http://opensource.org/licenses/mit> ;
+ lv2:binary <ButterComp2@CMAKE_SHARED_LIBRARY_SUFFIX@> ;
+ rdfs:seeAlso <ButterComp2.ttl> .