aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rwxr-xr-xplugins/LV2/CMakeLists.txt48
-rw-r--r--plugins/LV2/manifest.ttl.in456
-rw-r--r--plugins/LV2/src/Swell/Swell.cpp43
-rw-r--r--plugins/LV2/src/Swell/Swell.h43
-rw-r--r--plugins/LV2/src/Swell/Swell.ttl60
-rw-r--r--plugins/LV2/src/Swell/manifest.ttl.in6
-rw-r--r--plugins/LV2/src/TPDFDither/TPDFDither.cpp29
-rw-r--r--plugins/LV2/src/TPDFDither/TPDFDither.h29
-rw-r--r--plugins/LV2/src/TPDFDither/TPDFDither.ttl38
-rw-r--r--plugins/LV2/src/TPDFDither/manifest.ttl.in6
-rw-r--r--plugins/LV2/src/Tape/Tape.cpp49
-rw-r--r--plugins/LV2/src/Tape/Tape.h58
-rw-r--r--plugins/LV2/src/Tape/Tape.ttl52
-rw-r--r--plugins/LV2/src/Tape/manifest.ttl.in6
-rw-r--r--plugins/LV2/src/TapeDelay/TapeDelay.cpp51
-rw-r--r--plugins/LV2/src/TapeDelay/TapeDelay.h48
-rw-r--r--plugins/LV2/src/TapeDelay/TapeDelay.ttl84
-rw-r--r--plugins/LV2/src/TapeDelay/manifest.ttl.in6
-rw-r--r--plugins/LV2/src/TapeDither/TapeDither.cpp38
-rw-r--r--plugins/LV2/src/TapeDither/TapeDither.h38
-rw-r--r--plugins/LV2/src/TapeDither/TapeDither.ttl38
-rw-r--r--plugins/LV2/src/TapeDither/manifest.ttl.in6
-rw-r--r--plugins/LV2/src/TapeDust/TapeDust.cpp44
-rw-r--r--plugins/LV2/src/TapeDust/TapeDust.h42
-rw-r--r--plugins/LV2/src/TapeDust/TapeDust.ttl52
-rw-r--r--plugins/LV2/src/TapeDust/manifest.ttl.in6
-rw-r--r--plugins/LV2/src/TapeFat/TapeFat.cpp39
-rw-r--r--plugins/LV2/src/TapeFat/TapeFat.h39
-rw-r--r--plugins/LV2/src/TapeFat/TapeFat.ttl52
-rw-r--r--plugins/LV2/src/TapeFat/manifest.ttl.in6
-rw-r--r--plugins/LV2/src/Thunder/Thunder.cpp51
-rw-r--r--plugins/LV2/src/Thunder/Thunder.h52
-rw-r--r--plugins/LV2/src/Thunder/Thunder.ttl52
-rw-r--r--plugins/LV2/src/Thunder/manifest.ttl.in6
-rw-r--r--plugins/LV2/src/ToTape5/ToTape5.cpp123
-rw-r--r--plugins/LV2/src/ToTape5/ToTape5.h122
-rw-r--r--plugins/LV2/src/ToTape5/ToTape5.ttl84
-rw-r--r--plugins/LV2/src/ToTape5/manifest.ttl.in6
-rw-r--r--plugins/LV2/src/ToTape6/ToTape6.cpp68
-rw-r--r--plugins/LV2/src/ToTape6/ToTape6.h68
-rw-r--r--plugins/LV2/src/ToTape6/ToTape6.ttl84
-rw-r--r--plugins/LV2/src/ToTape6/manifest.ttl.in6
-rw-r--r--plugins/LV2/src/ToVinyl4/ToVinyl4.cpp110
-rw-r--r--plugins/LV2/src/ToVinyl4/ToVinyl4.h124
-rw-r--r--plugins/LV2/src/ToVinyl4/ToVinyl4.ttl68
-rw-r--r--plugins/LV2/src/ToVinyl4/manifest.ttl.in6
-rw-r--r--plugins/LV2/src/ToneSlant/ToneSlant.cpp36
-rw-r--r--plugins/LV2/src/ToneSlant/ToneSlant.h39
-rw-r--r--plugins/LV2/src/ToneSlant/ToneSlant.ttl52
-rw-r--r--plugins/LV2/src/ToneSlant/manifest.ttl.in6
-rw-r--r--plugins/LV2/src/TransDesk/TransDesk.cpp45
-rw-r--r--plugins/LV2/src/TransDesk/TransDesk.h46
-rw-r--r--plugins/LV2/src/TransDesk/TransDesk.ttl38
-rw-r--r--plugins/LV2/src/TransDesk/manifest.ttl.in6
-rw-r--r--plugins/LV2/src/Tremolo/Tremolo.cpp42
-rw-r--r--plugins/LV2/src/Tremolo/Tremolo.h43
-rw-r--r--plugins/LV2/src/Tremolo/Tremolo.ttl52
-rw-r--r--plugins/LV2/src/Tremolo/manifest.ttl.in6
-rw-r--r--plugins/LV2/src/TubeDesk/TubeDesk.cpp45
-rw-r--r--plugins/LV2/src/TubeDesk/TubeDesk.h46
-rw-r--r--plugins/LV2/src/TubeDesk/TubeDesk.ttl38
-rw-r--r--plugins/LV2/src/TubeDesk/manifest.ttl.in6
-rw-r--r--plugins/LV2/src/UnBox/UnBox.cpp45
-rw-r--r--plugins/LV2/src/UnBox/UnBox.h49
-rw-r--r--plugins/LV2/src/UnBox/UnBox.ttl60
-rw-r--r--plugins/LV2/src/UnBox/manifest.ttl.in6
-rw-r--r--plugins/LV2/src/VariMu/VariMu.cpp55
-rw-r--r--plugins/LV2/src/VariMu/VariMu.h56
-rw-r--r--plugins/LV2/src/VariMu/VariMu.ttl68
-rw-r--r--plugins/LV2/src/VariMu/manifest.ttl.in6
-rw-r--r--plugins/LV2/src/Vibrato/Vibrato.cpp57
-rw-r--r--plugins/LV2/src/Vibrato/Vibrato.h54
-rw-r--r--plugins/LV2/src/Vibrato/Vibrato.ttl76
-rw-r--r--plugins/LV2/src/Vibrato/manifest.ttl.in6
-rw-r--r--plugins/LV2/src/VinylDither/VinylDither.cpp66
-rw-r--r--plugins/LV2/src/VinylDither/VinylDither.h36
-rw-r--r--plugins/LV2/src/VinylDither/VinylDither.ttl38
-rw-r--r--plugins/LV2/src/VinylDither/manifest.ttl.in6
-rw-r--r--plugins/LV2/src/VoiceOfTheStarship/VoiceOfTheStarship.cpp49
-rw-r--r--plugins/LV2/src/VoiceOfTheStarship/VoiceOfTheStarship.h55
-rw-r--r--plugins/LV2/src/VoiceOfTheStarship/VoiceOfTheStarship.ttl52
-rw-r--r--plugins/LV2/src/VoiceOfTheStarship/manifest.ttl.in6
-rw-r--r--plugins/LV2/src/VoiceTrick/VoiceTrick.cpp42
-rw-r--r--plugins/LV2/src/VoiceTrick/VoiceTrick.h42
-rw-r--r--plugins/LV2/src/VoiceTrick/VoiceTrick.ttl44
-rw-r--r--plugins/LV2/src/VoiceTrick/manifest.ttl.in6
-rw-r--r--plugins/LV2/src/Wider/Wider.cpp39
-rw-r--r--plugins/LV2/src/Wider/Wider.h39
-rw-r--r--plugins/LV2/src/Wider/Wider.ttl60
-rw-r--r--plugins/LV2/src/Wider/manifest.ttl.in6
-rw-r--r--plugins/LV2/src/uLawDecode/manifest.ttl.in6
-rw-r--r--plugins/LV2/src/uLawDecode/uLawDecode.cpp35
-rw-r--r--plugins/LV2/src/uLawDecode/uLawDecode.h35
-rw-r--r--plugins/LV2/src/uLawDecode/uLawDecode.ttl52
-rw-r--r--plugins/LV2/src/uLawEncode/manifest.ttl.in6
-rw-r--r--plugins/LV2/src/uLawEncode/uLawEncode.cpp35
-rw-r--r--plugins/LV2/src/uLawEncode/uLawEncode.h35
-rw-r--r--plugins/LV2/src/uLawEncode/uLawEncode.ttl52
98 files changed, 4444 insertions, 24 deletions
diff --git a/plugins/LV2/CMakeLists.txt b/plugins/LV2/CMakeLists.txt
index 91fcaf3..cb8e461 100755
--- a/plugins/LV2/CMakeLists.txt
+++ b/plugins/LV2/CMakeLists.txt
@@ -196,27 +196,27 @@ add_airwindows_plugin(StudioTan)
add_airwindows_plugin(SubsOnly)
add_airwindows_plugin(Surge)
add_airwindows_plugin(SurgeTide)
-# add_airwindows_plugin(Swell)
-# add_airwindows_plugin(Tape)
-# add_airwindows_plugin(TapeDelay)
-# add_airwindows_plugin(TapeDither)
-# add_airwindows_plugin(TapeDust)
-# add_airwindows_plugin(TapeFat)
-# add_airwindows_plugin(Thunder)
-# add_airwindows_plugin(ToneSlant)
-# add_airwindows_plugin(ToTape5)
-# add_airwindows_plugin(ToTape6)
-# add_airwindows_plugin(ToVinyl4)
-# add_airwindows_plugin(TPDFDither)
-# add_airwindows_plugin(TransDesk)
-# add_airwindows_plugin(Tremolo)
-# add_airwindows_plugin(TubeDesk)
-# add_airwindows_plugin(uLawDecode)
-# add_airwindows_plugin(uLawEncode)
-# add_airwindows_plugin(UnBox)
-# add_airwindows_plugin(VariMu)
-# add_airwindows_plugin(Vibrato)
-# add_airwindows_plugin(VinylDither)
-# add_airwindows_plugin(VoiceOfTheStarship)
-# add_airwindows_plugin(VoiceTrick)
-# add_airwindows_plugin(Wider)
+add_airwindows_plugin(Swell)
+add_airwindows_plugin(Tape)
+add_airwindows_plugin(TapeDelay)
+add_airwindows_plugin(TapeDither)
+add_airwindows_plugin(TapeDust)
+add_airwindows_plugin(TapeFat)
+add_airwindows_plugin(Thunder)
+add_airwindows_plugin(ToneSlant)
+add_airwindows_plugin(ToTape5)
+add_airwindows_plugin(ToTape6)
+add_airwindows_plugin(ToVinyl4)
+add_airwindows_plugin(TPDFDither)
+add_airwindows_plugin(TransDesk)
+add_airwindows_plugin(Tremolo)
+add_airwindows_plugin(TubeDesk)
+add_airwindows_plugin(uLawDecode)
+add_airwindows_plugin(uLawEncode)
+add_airwindows_plugin(UnBox)
+add_airwindows_plugin(VariMu)
+add_airwindows_plugin(Vibrato)
+add_airwindows_plugin(VinylDither)
+add_airwindows_plugin(VoiceOfTheStarship)
+add_airwindows_plugin(VoiceTrick)
+add_airwindows_plugin(Wider)
diff --git a/plugins/LV2/manifest.ttl.in b/plugins/LV2/manifest.ttl.in
index 6c1bb5f..782ef45 100644
--- a/plugins/LV2/manifest.ttl.in
+++ b/plugins/LV2/manifest.ttl.in
@@ -1249,3 +1249,459 @@ airwindows:surgetide
doap:license <http://opensource.org/licenses/mit> ;
lv2:binary <SurgeTide@CMAKE_SHARED_LIBRARY_SUFFIX@> ;
rdfs:seeAlso <SurgeTide.ttl> .
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+airwindows:swell
+ a lv2:Plugin ;
+ doap:name "Airwindows Swell" ;
+ doap:license <http://opensource.org/licenses/mit> ;
+ lv2:binary <Swell@CMAKE_SHARED_LIBRARY_SUFFIX@> ;
+ rdfs:seeAlso <Swell.ttl> .
+
+airwindows:tpdfdither
+ a lv2:Plugin ;
+ doap:name "Airwindows TPDFDither" ;
+ doap:license <http://opensource.org/licenses/mit> ;
+ lv2:binary <TPDFDither@CMAKE_SHARED_LIBRARY_SUFFIX@> ;
+ rdfs:seeAlso <TPDFDither.ttl> .
+
+airwindows:tape
+ a lv2:Plugin ;
+ doap:name "Airwindows Tape" ;
+ doap:license <http://opensource.org/licenses/mit> ;
+ lv2:binary <Tape@CMAKE_SHARED_LIBRARY_SUFFIX@> ;
+ rdfs:seeAlso <Tape.ttl> .
+
+airwindows:tapedelay
+ a lv2:Plugin ;
+ doap:name "Airwindows TapeDelay" ;
+ doap:license <http://opensource.org/licenses/mit> ;
+ lv2:binary <TapeDelay@CMAKE_SHARED_LIBRARY_SUFFIX@> ;
+ rdfs:seeAlso <TapeDelay.ttl> .
+
+airwindows:tapedither
+ a lv2:Plugin ;
+ doap:name "Airwindows TapeDither" ;
+ doap:license <http://opensource.org/licenses/mit> ;
+ lv2:binary <TapeDither@CMAKE_SHARED_LIBRARY_SUFFIX@> ;
+ rdfs:seeAlso <TapeDither.ttl> .
+
+airwindows:tapedust
+ a lv2:Plugin ;
+ doap:name "Airwindows TapeDust" ;
+ doap:license <http://opensource.org/licenses/mit> ;
+ lv2:binary <TapeDust@CMAKE_SHARED_LIBRARY_SUFFIX@> ;
+ rdfs:seeAlso <TapeDust.ttl> .
+
+airwindows:tapefat
+ a lv2:Plugin ;
+ doap:name "Airwindows TapeFat" ;
+ doap:license <http://opensource.org/licenses/mit> ;
+ lv2:binary <TapeFat@CMAKE_SHARED_LIBRARY_SUFFIX@> ;
+ rdfs:seeAlso <TapeFat.ttl> .
+
+airwindows:thunder
+ a lv2:Plugin ;
+ doap:name "Airwindows Thunder" ;
+ doap:license <http://opensource.org/licenses/mit> ;
+ lv2:binary <Thunder@CMAKE_SHARED_LIBRARY_SUFFIX@> ;
+ rdfs:seeAlso <Thunder.ttl> .
+
+airwindows:totape5
+ a lv2:Plugin ;
+ doap:name "Airwindows ToTape5" ;
+ doap:license <http://opensource.org/licenses/mit> ;
+ lv2:binary <ToTape5@CMAKE_SHARED_LIBRARY_SUFFIX@> ;
+ rdfs:seeAlso <ToTape5.ttl> .
+
+airwindows:totape6
+ a lv2:Plugin ;
+ doap:name "Airwindows ToTape6" ;
+ doap:license <http://opensource.org/licenses/mit> ;
+ lv2:binary <ToTape6@CMAKE_SHARED_LIBRARY_SUFFIX@> ;
+ rdfs:seeAlso <ToTape6.ttl> .
+
+airwindows:tovinyl4
+ a lv2:Plugin ;
+ doap:name "Airwindows ToVinyl4" ;
+ doap:license <http://opensource.org/licenses/mit> ;
+ lv2:binary <ToVinyl4@CMAKE_SHARED_LIBRARY_SUFFIX@> ;
+ rdfs:seeAlso <ToVinyl4.ttl> .
+
+airwindows:toneslant
+ a lv2:Plugin ;
+ doap:name "Airwindows ToneSlant" ;
+ doap:license <http://opensource.org/licenses/mit> ;
+ lv2:binary <ToneSlant@CMAKE_SHARED_LIBRARY_SUFFIX@> ;
+ rdfs:seeAlso <ToneSlant.ttl> .
+
+airwindows:transdesk
+ a lv2:Plugin ;
+ doap:name "Airwindows TransDesk" ;
+ doap:license <http://opensource.org/licenses/mit> ;
+ lv2:binary <TransDesk@CMAKE_SHARED_LIBRARY_SUFFIX@> ;
+ rdfs:seeAlso <TransDesk.ttl> .
+
+airwindows:tremolo
+ a lv2:Plugin ;
+ doap:name "Airwindows Tremolo" ;
+ doap:license <http://opensource.org/licenses/mit> ;
+ lv2:binary <Tremolo@CMAKE_SHARED_LIBRARY_SUFFIX@> ;
+ rdfs:seeAlso <Tremolo.ttl> .
+
+airwindows:tubedesk
+ a lv2:Plugin ;
+ doap:name "Airwindows TubeDesk" ;
+ doap:license <http://opensource.org/licenses/mit> ;
+ lv2:binary <TubeDesk@CMAKE_SHARED_LIBRARY_SUFFIX@> ;
+ rdfs:seeAlso <TubeDesk.ttl> .
+
+airwindows:unbox
+ a lv2:Plugin ;
+ doap:name "Airwindows UnBox" ;
+ doap:license <http://opensource.org/licenses/mit> ;
+ lv2:binary <UnBox@CMAKE_SHARED_LIBRARY_SUFFIX@> ;
+ rdfs:seeAlso <UnBox.ttl> .
+
+airwindows:varimu
+ a lv2:Plugin ;
+ doap:name "Airwindows VariMu" ;
+ doap:license <http://opensource.org/licenses/mit> ;
+ lv2:binary <VariMu@CMAKE_SHARED_LIBRARY_SUFFIX@> ;
+ rdfs:seeAlso <VariMu.ttl> .
+
+airwindows:vibrato
+ a lv2:Plugin ;
+ doap:name "Airwindows Vibrato" ;
+ doap:license <http://opensource.org/licenses/mit> ;
+ lv2:binary <Vibrato@CMAKE_SHARED_LIBRARY_SUFFIX@> ;
+ rdfs:seeAlso <Vibrato.ttl> .
+
+airwindows:vinyldither
+ a lv2:Plugin ;
+ doap:name "Airwindows VinylDither" ;
+ doap:license <http://opensource.org/licenses/mit> ;
+ lv2:binary <VinylDither@CMAKE_SHARED_LIBRARY_SUFFIX@> ;
+ rdfs:seeAlso <VinylDither.ttl> .
+
+airwindows:voiceofthestarship
+ a lv2:Plugin ;
+ doap:name "Airwindows VoiceOfTheStarship" ;
+ doap:license <http://opensource.org/licenses/mit> ;
+ lv2:binary <VoiceOfTheStarship@CMAKE_SHARED_LIBRARY_SUFFIX@> ;
+ rdfs:seeAlso <VoiceOfTheStarship.ttl> .
+
+airwindows:voicetrick
+ a lv2:Plugin ;
+ doap:name "Airwindows VoiceTrick" ;
+ doap:license <http://opensource.org/licenses/mit> ;
+ lv2:binary <VoiceTrick@CMAKE_SHARED_LIBRARY_SUFFIX@> ;
+ rdfs:seeAlso <VoiceTrick.ttl> .
+
+airwindows:wider
+ a lv2:Plugin ;
+ doap:name "Airwindows Wider" ;
+ doap:license <http://opensource.org/licenses/mit> ;
+ lv2:binary <Wider@CMAKE_SHARED_LIBRARY_SUFFIX@> ;
+ rdfs:seeAlso <Wider.ttl> .
+
+airwindows:ulawdecode
+ a lv2:Plugin ;
+ doap:name "Airwindows uLawDecode" ;
+ doap:license <http://opensource.org/licenses/mit> ;
+ lv2:binary <uLawDecode@CMAKE_SHARED_LIBRARY_SUFFIX@> ;
+ rdfs:seeAlso <uLawDecode.ttl> .
+
+airwindows:ulawencode
+ a lv2:Plugin ;
+ doap:name "Airwindows uLawEncode" ;
+ doap:license <http://opensource.org/licenses/mit> ;
+ lv2:binary <uLawEncode@CMAKE_SHARED_LIBRARY_SUFFIX@> ;
+ rdfs:seeAlso <uLawEncode.ttl> .
diff --git a/plugins/LV2/src/Swell/Swell.cpp b/plugins/LV2/src/Swell/Swell.cpp
new file mode 100644
index 0000000..52c9fae
--- /dev/null
+++ b/plugins/LV2/src/Swell/Swell.cpp
@@ -0,0 +1,43 @@
+#include "Swell.h"
+#include <iostream>
+#include <lv2wrapper.h>
+
+Swell::Swell(double rate)
+ : LV2Plugin(rate)
+{
+}
+
+void Swell::activate()
+{
+ A = 0.9;
+ B = 0.5;
+ C = 1.0;
+
+ swellL = 0.0;
+ swellR = 0.0;
+ louderL = false;
+ louderR = false;
+
+ fpNShapeL = 0.0;
+ fpNShapeR = 0.0;
+ //this is reset: values being initialized only once. Startup values, whatever they are.
+
+}
+
+void Swell::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/Swell/SwellProc.cpp"
+
+// Create the LV2Wrapper and register the plugin
+LV2Wrapper<Swell> plugin;
diff --git a/plugins/LV2/src/Swell/Swell.h b/plugins/LV2/src/Swell/Swell.h
new file mode 100644
index 0000000..9cb2113
--- /dev/null
+++ b/plugins/LV2/src/Swell/Swell.h
@@ -0,0 +1,43 @@
+#ifndef __Swell_H
+#define __Swell_H
+
+#include <lv2plugin.h>
+
+class Swell : public LV2Plugin<3> {
+public:
+ Swell(double rate);
+
+ void activate();
+ void run(uint32_t num_samples);
+
+ static constexpr const char * URI = "https://www.airwindows.com/swell";
+
+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
+
+
+ long double swellL;
+ long double swellR;
+ bool louderL;
+ bool louderR;
+
+ float A;
+ float B;
+ float C;
+
+};
+
+#endif
diff --git a/plugins/LV2/src/Swell/Swell.ttl b/plugins/LV2/src/Swell/Swell.ttl
new file mode 100644
index 0000000..84ca107
--- /dev/null
+++ b/plugins/LV2/src/Swell/Swell.ttl
@@ -0,0 +1,60 @@
+# Airwindows Swell 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/swell>
+ 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 "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 "Swell" ;
+ 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/Swell/manifest.ttl.in b/plugins/LV2/src/Swell/manifest.ttl.in
new file mode 100644
index 0000000..ec09308
--- /dev/null
+++ b/plugins/LV2/src/Swell/manifest.ttl.in
@@ -0,0 +1,6 @@
+airwindows:swell
+ a lv2:Plugin ;
+ doap:name "Airwindows Swell" ;
+ doap:license <http://opensource.org/licenses/mit> ;
+ lv2:binary <Swell@CMAKE_SHARED_LIBRARY_SUFFIX@> ;
+ rdfs:seeAlso <Swell.ttl> .
diff --git a/plugins/LV2/src/TPDFDither/TPDFDither.cpp b/plugins/LV2/src/TPDFDither/TPDFDither.cpp
new file mode 100644
index 0000000..7309c61
--- /dev/null
+++ b/plugins/LV2/src/TPDFDither/TPDFDither.cpp
@@ -0,0 +1,29 @@
+#include "TPDFDither.h"
+#include <iostream>
+#include <lv2wrapper.h>
+
+TPDFDither::TPDFDither(double rate)
+ : LV2Plugin(rate)
+{
+}
+
+void TPDFDither::activate()
+{
+
+}
+
+void TPDFDither::run(uint32_t num_samples)
+{
+
+
+ processReplacing(const_cast<float **>(in), out, num_samples);
+}
+
+//
+// Include the processing code from the VST version.
+//
+#include <cmath>
+#include "../../../LinuxVST/src/TPDFDither/TPDFDitherProc.cpp"
+
+// Create the LV2Wrapper and register the plugin
+LV2Wrapper<TPDFDither> plugin;
diff --git a/plugins/LV2/src/TPDFDither/TPDFDither.h b/plugins/LV2/src/TPDFDither/TPDFDither.h
new file mode 100644
index 0000000..49f3439
--- /dev/null
+++ b/plugins/LV2/src/TPDFDither/TPDFDither.h
@@ -0,0 +1,29 @@
+#ifndef __TPDFDither_H
+#define __TPDFDither_H
+
+#include <lv2plugin.h>
+
+class TPDFDither : public LV2Plugin<0> {
+public:
+ TPDFDither(double rate);
+
+ void activate();
+ void run(uint32_t num_samples);
+
+ static constexpr const char * URI = "https://www.airwindows.com/tpdfdither";
+
+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.
+ */
+
+};
+
+#endif
diff --git a/plugins/LV2/src/TPDFDither/TPDFDither.ttl b/plugins/LV2/src/TPDFDither/TPDFDither.ttl
new file mode 100644
index 0000000..ce5baf0
--- /dev/null
+++ b/plugins/LV2/src/TPDFDither/TPDFDither.ttl
@@ -0,0 +1,38 @@
+# Airwindows TPDFDither 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/tpdfdither>
+ 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:AudioPort ;
+ lv2:index 0 ;
+ lv2:symbol "in_l" ;
+ lv2:name "In left" ;
+ ] , [
+ a lv2:InputPort , lv2:AudioPort ;
+ lv2:index 1 ;
+ lv2:symbol "in_r" ;
+ lv2:name "In right" ;
+ ] , [
+ a lv2:OutputPort , lv2:AudioPort ;
+ lv2:index 2 ;
+ lv2:symbol "out_l" ;
+ lv2:name "Out left" ;
+ ] , [
+ a lv2:OutputPort , lv2:AudioPort ;
+ lv2:index 3 ;
+ lv2:symbol "out_r" ;
+ lv2:name "Out right" ;
+ ] .
diff --git a/plugins/LV2/src/TPDFDither/manifest.ttl.in b/plugins/LV2/src/TPDFDither/manifest.ttl.in
new file mode 100644
index 0000000..36bc918
--- /dev/null
+++ b/plugins/LV2/src/TPDFDither/manifest.ttl.in
@@ -0,0 +1,6 @@
+airwindows:tpdfdither
+ a lv2:Plugin ;
+ doap:name "Airwindows TPDFDither" ;
+ doap:license <http://opensource.org/licenses/mit> ;
+ lv2:binary <TPDFDither@CMAKE_SHARED_LIBRARY_SUFFIX@> ;
+ rdfs:seeAlso <TPDFDither.ttl> .
diff --git a/plugins/LV2/src/Tape/Tape.cpp b/plugins/LV2/src/Tape/Tape.cpp
new file mode 100644
index 0000000..6f4eb99
--- /dev/null
+++ b/plugins/LV2/src/Tape/Tape.cpp
@@ -0,0 +1,49 @@
+#include "Tape.h"
+#include <iostream>
+#include <lv2wrapper.h>
+
+Tape::Tape(double rate)
+ : LV2Plugin(rate)
+{
+}
+
+void Tape::activate()
+{
+ A = 0.5;
+ B = 0.5;
+ iirMidRollerAL = 0.0;
+ iirMidRollerBL = 0.0;
+ iirHeadBumpAL = 0.0;
+ iirHeadBumpBL = 0.0;
+ iirMidRollerAR = 0.0;
+ iirMidRollerBR = 0.0;
+ iirHeadBumpAR = 0.0;
+ iirHeadBumpBR = 0.0;
+ for (int x = 0; x < 9; x++) {
+ biquadAL[x] = 0.0;biquadBL[x] = 0.0;biquadCL[x] = 0.0;biquadDL[x] = 0.0;
+ biquadAR[x] = 0.0;biquadBR[x] = 0.0;biquadCR[x] = 0.0;biquadDR[x] = 0.0;
+ }
+ flip = false;
+ lastSampleL = 0.0;
+ lastSampleR = 0.0;
+ fpd = 17;
+ //this is reset: values being initialized only once. Startup values, whatever they are.
+
+}
+
+void Tape::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/Tape/TapeProc.cpp"
+
+// Create the LV2Wrapper and register the plugin
+LV2Wrapper<Tape> plugin;
diff --git a/plugins/LV2/src/Tape/Tape.h b/plugins/LV2/src/Tape/Tape.h
new file mode 100644
index 0000000..b2c0a4b
--- /dev/null
+++ b/plugins/LV2/src/Tape/Tape.h
@@ -0,0 +1,58 @@
+#ifndef __Tape_H
+#define __Tape_H
+
+#include <lv2plugin.h>
+
+class Tape : public LV2Plugin<2> {
+public:
+ Tape(double rate);
+
+ void activate();
+ void run(uint32_t num_samples);
+
+ static constexpr const char * URI = "https://www.airwindows.com/tape";
+
+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 iirMidRollerAL;
+ double iirMidRollerBL;
+ double iirHeadBumpAL;
+ double iirHeadBumpBL;
+
+ double iirMidRollerAR;
+ double iirMidRollerBR;
+ double iirHeadBumpAR;
+ double iirHeadBumpBR;
+
+ long double biquadAL[9];
+ long double biquadBL[9];
+ long double biquadCL[9];
+ long double biquadDL[9];
+
+ long double biquadAR[9];
+ long double biquadBR[9];
+ long double biquadCR[9];
+ long double biquadDR[9];
+ bool flip;
+
+ long double lastSampleL;
+ long double lastSampleR;
+
+ uint32_t fpd;
+ //default stuff
+
+ float A;
+ float B;
+};
+
+#endif
diff --git a/plugins/LV2/src/Tape/Tape.ttl b/plugins/LV2/src/Tape/Tape.ttl
new file mode 100644
index 0000000..60f2cf2
--- /dev/null
+++ b/plugins/LV2/src/Tape/Tape.ttl
@@ -0,0 +1,52 @@
+# Airwindows Tape 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/tape>
+ 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 "Slam" ;
+ 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 "Bump" ;
+ 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/Tape/manifest.ttl.in b/plugins/LV2/src/Tape/manifest.ttl.in
new file mode 100644
index 0000000..ee042a6
--- /dev/null
+++ b/plugins/LV2/src/Tape/manifest.ttl.in
@@ -0,0 +1,6 @@
+airwindows:tape
+ a lv2:Plugin ;
+ doap:name "Airwindows Tape" ;
+ doap:license <http://opensource.org/licenses/mit> ;
+ lv2:binary <Tape@CMAKE_SHARED_LIBRARY_SUFFIX@> ;
+ rdfs:seeAlso <Tape.ttl> .
diff --git a/plugins/LV2/src/TapeDelay/TapeDelay.cpp b/plugins/LV2/src/TapeDelay/TapeDelay.cpp
new file mode 100644
index 0000000..798e42e
--- /dev/null
+++ b/plugins/LV2/src/TapeDelay/TapeDelay.cpp
@@ -0,0 +1,51 @@
+#include "TapeDelay.h"
+#include <iostream>
+#include <lv2wrapper.h>
+
+TapeDelay::TapeDelay(double rate)
+ : LV2Plugin(rate)
+{
+}
+
+void TapeDelay::activate()
+{
+ A = 1.0;
+ B = 0.0;
+ C = 0.5;
+ D = 0.0; //0 to 130%
+ E = 1.0; //-1.0 to 1.0
+ F = 0.0; //8 taps
+
+ for(int count = 0; count < 257; count++) {pL[count] = 0;pR[count] = 0;}
+ for(delay = 0; delay < 44100; delay++) {dL[delay] = 0.0;dR[delay] = 0.0;}
+ maxdelay = 0;
+ delay = 0;
+ gcount = 0;
+ chase = 0;
+
+ fpNShapeL = 0.0;
+ fpNShapeR = 0.0;
+ //this is reset: values being initialized only once. Startup values, whatever they are.
+
+}
+
+void TapeDelay::run(uint32_t num_samples)
+{
+ A = *params[0];
+ B = *params[1];
+ C = *params[2];
+ D = *params[3];
+ E = *params[4];
+ F = *params[5];
+
+ processReplacing(const_cast<float **>(in), out, num_samples);
+}
+
+//
+// Include the processing code from the VST version.
+//
+#include <cmath>
+#include "../../../LinuxVST/src/TapeDelay/TapeDelayProc.cpp"
+
+// Create the LV2Wrapper and register the plugin
+LV2Wrapper<TapeDelay> plugin;
diff --git a/plugins/LV2/src/TapeDelay/TapeDelay.h b/plugins/LV2/src/TapeDelay/TapeDelay.h
new file mode 100644
index 0000000..7d1a38c
--- /dev/null
+++ b/plugins/LV2/src/TapeDelay/TapeDelay.h
@@ -0,0 +1,48 @@
+#ifndef __TapeDelay_H
+#define __TapeDelay_H
+
+#include <lv2plugin.h>
+
+class TapeDelay : public LV2Plugin<6> {
+public:
+ TapeDelay(double rate);
+
+ void activate();
+ void run(uint32_t num_samples);
+
+ static constexpr const char * URI = "https://www.airwindows.com/tapedelay";
+
+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.
+ */
+
+ int pL[258];
+ int pR[258];
+ double dL[44100];
+ double dR[44100];
+ int gcount;
+ int delay;
+ int maxdelay;
+ int chase;
+
+ long double fpNShapeL;
+ long double fpNShapeR;
+ //default stuff
+
+ float A;
+ float B;
+ float C;
+ float D;
+ float E;
+ float F;
+};
+
+#endif
diff --git a/plugins/LV2/src/TapeDelay/TapeDelay.ttl b/plugins/LV2/src/TapeDelay/TapeDelay.ttl
new file mode 100644
index 0000000..a62ee2d
--- /dev/null
+++ b/plugins/LV2/src/TapeDelay/TapeDelay.ttl
@@ -0,0 +1,84 @@
+# Airwindows TapeDelay 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/tapedelay>
+ 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" ;
+ 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 "Wet" ;
+ 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 "Delay" ;
+ 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 "Feedbak" ;
+ 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 "Lean/Ft" ;
+ 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 "Depth" ;
+ lv2:default 0.5 ;
+ lv2:minimum 0.0 ;
+ lv2:maximum 1.0 ;
+ ] , [
+ a lv2:InputPort , lv2:AudioPort ;
+ lv2:index 6 ;
+ lv2:symbol "in_l" ;
+ lv2:name "In left" ;
+ ] , [
+ a lv2:InputPort , lv2:AudioPort ;
+ lv2:index 7 ;
+ lv2:symbol "in_r" ;
+ lv2:name "In right" ;
+ ] , [
+ a lv2:OutputPort , lv2:AudioPort ;
+ lv2:index 8 ;
+ lv2:symbol "out_l" ;
+ lv2:name "Out left" ;
+ ] , [
+ a lv2:OutputPort , lv2:AudioPort ;
+ lv2:index 9 ;
+ lv2:symbol "out_r" ;
+ lv2:name "Out right" ;
+ ] .
diff --git a/plugins/LV2/src/TapeDelay/manifest.ttl.in b/plugins/LV2/src/TapeDelay/manifest.ttl.in
new file mode 100644
index 0000000..b573eba
--- /dev/null
+++ b/plugins/LV2/src/TapeDelay/manifest.ttl.in
@@ -0,0 +1,6 @@
+airwindows:tapedelay
+ a lv2:Plugin ;
+ doap:name "Airwindows TapeDelay" ;
+ doap:license <http://opensource.org/licenses/mit> ;
+ lv2:binary <TapeDelay@CMAKE_SHARED_LIBRARY_SUFFIX@> ;
+ rdfs:seeAlso <TapeDelay.ttl> .
diff --git a/plugins/LV2/src/TapeDither/TapeDither.cpp b/plugins/LV2/src/TapeDither/TapeDither.cpp
new file mode 100644
index 0000000..24a8ca8
--- /dev/null
+++ b/plugins/LV2/src/TapeDither/TapeDither.cpp
@@ -0,0 +1,38 @@
+#include "TapeDither.h"
+#include <iostream>
+#include <lv2wrapper.h>
+
+TapeDither::TapeDither(double rate)
+ : LV2Plugin(rate)
+{
+}
+
+void TapeDither::activate()
+{
+ previousDither1L = 0.0;
+ previousDither2L = 0.0;
+ previousDither3L = 0.0;
+ previousDither4L = 0.0;
+ previousDither1R = 0.0;
+ previousDither2R = 0.0;
+ previousDither3R = 0.0;
+ previousDither4R = 0.0;
+ //this is reset: values being initialized only once. Startup values, whatever they are.
+
+}
+
+void TapeDither::run(uint32_t num_samples)
+{
+
+
+ processReplacing(const_cast<float **>(in), out, num_samples);
+}
+
+//
+// Include the processing code from the VST version.
+//
+#include <cmath>
+#include "../../../LinuxVST/src/TapeDither/TapeDitherProc.cpp"
+
+// Create the LV2Wrapper and register the plugin
+LV2Wrapper<TapeDither> plugin;
diff --git a/plugins/LV2/src/TapeDither/TapeDither.h b/plugins/LV2/src/TapeDither/TapeDither.h
new file mode 100644
index 0000000..ee3e616
--- /dev/null
+++ b/plugins/LV2/src/TapeDither/TapeDither.h
@@ -0,0 +1,38 @@
+#ifndef __TapeDither_H
+#define __TapeDither_H
+
+#include <lv2plugin.h>
+
+class TapeDither : public LV2Plugin<0> {
+public:
+ TapeDither(double rate);
+
+ void activate();
+ void run(uint32_t num_samples);
+
+ static constexpr const char * URI = "https://www.airwindows.com/tapedither";
+
+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 previousDither1L;
+ double previousDither2L;
+ double previousDither3L;
+ double previousDither4L;
+ double previousDither1R;
+ double previousDither2R;
+ double previousDither3R;
+ double previousDither4R;
+
+};
+
+#endif
diff --git a/plugins/LV2/src/TapeDither/TapeDither.ttl b/plugins/LV2/src/TapeDither/TapeDither.ttl
new file mode 100644
index 0000000..ce1c176
--- /dev/null
+++ b/plugins/LV2/src/TapeDither/TapeDither.ttl
@@ -0,0 +1,38 @@
+# Airwindows TapeDither 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/tapedither>
+ 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:AudioPort ;
+ lv2:index 0 ;
+ lv2:symbol "in_l" ;
+ lv2:name "In left" ;
+ ] , [
+ a lv2:InputPort , lv2:AudioPort ;
+ lv2:index 1 ;
+ lv2:symbol "in_r" ;
+ lv2:name "In right" ;
+ ] , [
+ a lv2:OutputPort , lv2:AudioPort ;
+ lv2:index 2 ;
+ lv2:symbol "out_l" ;
+ lv2:name "Out left" ;
+ ] , [
+ a lv2:OutputPort , lv2:AudioPort ;
+ lv2:index 3 ;
+ lv2:symbol "out_r" ;
+ lv2:name "Out right" ;
+ ] .
diff --git a/plugins/LV2/src/TapeDither/manifest.ttl.in b/plugins/LV2/src/TapeDither/manifest.ttl.in
new file mode 100644
index 0000000..fe1da42
--- /dev/null
+++ b/plugins/LV2/src/TapeDither/manifest.ttl.in
@@ -0,0 +1,6 @@
+airwindows:tapedither
+ a lv2:Plugin ;
+ doap:name "Airwindows TapeDither" ;
+ doap:license <http://opensource.org/licenses/mit> ;
+ lv2:binary <TapeDither@CMAKE_SHARED_LIBRARY_SUFFIX@> ;
+ rdfs:seeAlso <TapeDither.ttl> .
diff --git a/plugins/LV2/src/TapeDust/TapeDust.cpp b/plugins/LV2/src/TapeDust/TapeDust.cpp
new file mode 100644
index 0000000..9cdf9f2
--- /dev/null
+++ b/plugins/LV2/src/TapeDust/TapeDust.cpp
@@ -0,0 +1,44 @@
+#include "TapeDust.h"
+#include <iostream>
+#include <lv2wrapper.h>
+
+TapeDust::TapeDust(double rate)
+ : LV2Plugin(rate)
+{
+}
+
+void TapeDust::activate()
+{
+ A = 0.0;
+ B = 1.0;
+
+ for(int count = 0; count < 11; count++) {
+ bL[count] = 0.0;
+ fL[count] = 0.0;
+ bR[count] = 0.0;
+ fR[count] = 0.0;
+ }
+
+ fpNShapeL = 0.0;
+ fpNShapeR = 0.0;
+ fpFlip = true;
+ //this is reset: values being initialized only once. Startup values, whatever they are.
+
+}
+
+void TapeDust::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/TapeDust/TapeDustProc.cpp"
+
+// Create the LV2Wrapper and register the plugin
+LV2Wrapper<TapeDust> plugin;
diff --git a/plugins/LV2/src/TapeDust/TapeDust.h b/plugins/LV2/src/TapeDust/TapeDust.h
new file mode 100644
index 0000000..4041168
--- /dev/null
+++ b/plugins/LV2/src/TapeDust/TapeDust.h
@@ -0,0 +1,42 @@
+#ifndef __TapeDust_H
+#define __TapeDust_H
+
+#include <lv2plugin.h>
+
+class TapeDust : public LV2Plugin<2> {
+public:
+ TapeDust(double rate);
+
+ void activate();
+ void run(uint32_t num_samples);
+
+ static constexpr const char * URI = "https://www.airwindows.com/tapedust";
+
+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;
+ bool fpFlip;
+ //default stuff
+
+ double bL[11];
+ double fL[11];
+ double bR[11];
+ double fR[11];
+
+ float A;
+ float B;
+
+};
+
+#endif
diff --git a/plugins/LV2/src/TapeDust/TapeDust.ttl b/plugins/LV2/src/TapeDust/TapeDust.ttl
new file mode 100644
index 0000000..41c3d49
--- /dev/null
+++ b/plugins/LV2/src/TapeDust/TapeDust.ttl
@@ -0,0 +1,52 @@
+# Airwindows TapeDust 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/tapedust>
+ 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 "Dust" ;
+ 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/TapeDust/manifest.ttl.in b/plugins/LV2/src/TapeDust/manifest.ttl.in
new file mode 100644
index 0000000..617e675
--- /dev/null
+++ b/plugins/LV2/src/TapeDust/manifest.ttl.in
@@ -0,0 +1,6 @@
+airwindows:tapedust
+ a lv2:Plugin ;
+ doap:name "Airwindows TapeDust" ;
+ doap:license <http://opensource.org/licenses/mit> ;
+ lv2:binary <TapeDust@CMAKE_SHARED_LIBRARY_SUFFIX@> ;
+ rdfs:seeAlso <TapeDust.ttl> .
diff --git a/plugins/LV2/src/TapeFat/TapeFat.cpp b/plugins/LV2/src/TapeFat/TapeFat.cpp
new file mode 100644
index 0000000..63be923
--- /dev/null
+++ b/plugins/LV2/src/TapeFat/TapeFat.cpp
@@ -0,0 +1,39 @@
+#include "TapeFat.h"
+#include <iostream>
+#include <lv2wrapper.h>
+
+TapeFat::TapeFat(double rate)
+ : LV2Plugin(rate)
+{
+}
+
+void TapeFat::activate()
+{
+ A = 1.0;
+ B = 0.0;
+
+ for(int count = 0; count < 257; count++) {pL[count] = 0;pR[count] = 0;}
+ gcount = 0;
+
+ fpNShapeL = 0.0;
+ fpNShapeR = 0.0;
+ //this is reset: values being initialized only once. Startup values, whatever they are.
+
+}
+
+void TapeFat::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/TapeFat/TapeFatProc.cpp"
+
+// Create the LV2Wrapper and register the plugin
+LV2Wrapper<TapeFat> plugin;
diff --git a/plugins/LV2/src/TapeFat/TapeFat.h b/plugins/LV2/src/TapeFat/TapeFat.h
new file mode 100644
index 0000000..7ce01af
--- /dev/null
+++ b/plugins/LV2/src/TapeFat/TapeFat.h
@@ -0,0 +1,39 @@
+#ifndef __TapeFat_H
+#define __TapeFat_H
+
+#include <lv2plugin.h>
+
+class TapeFat : public LV2Plugin<2> {
+public:
+ TapeFat(double rate);
+
+ void activate();
+ void run(uint32_t num_samples);
+
+ static constexpr const char * URI = "https://www.airwindows.com/tapefat";
+
+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.
+ */
+
+ int pL[258];
+ int pR[258];
+ int gcount;
+
+ long double fpNShapeL;
+ long double fpNShapeR;
+ //default stuff
+
+ float A;
+ float B;
+};
+
+#endif
diff --git a/plugins/LV2/src/TapeFat/TapeFat.ttl b/plugins/LV2/src/TapeFat/TapeFat.ttl
new file mode 100644
index 0000000..bd97262
--- /dev/null
+++ b/plugins/LV2/src/TapeFat/TapeFat.ttl
@@ -0,0 +1,52 @@
+# Airwindows TapeFat 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/tapefat>
+ 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 "Lean/Ft" ;
+ 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 "Depth" ;
+ 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/TapeFat/manifest.ttl.in b/plugins/LV2/src/TapeFat/manifest.ttl.in
new file mode 100644
index 0000000..cfb4370
--- /dev/null
+++ b/plugins/LV2/src/TapeFat/manifest.ttl.in
@@ -0,0 +1,6 @@
+airwindows:tapefat
+ a lv2:Plugin ;
+ doap:name "Airwindows TapeFat" ;
+ doap:license <http://opensource.org/licenses/mit> ;
+ lv2:binary <TapeFat@CMAKE_SHARED_LIBRARY_SUFFIX@> ;
+ rdfs:seeAlso <TapeFat.ttl> .
diff --git a/plugins/LV2/src/Thunder/Thunder.cpp b/plugins/LV2/src/Thunder/Thunder.cpp
new file mode 100644
index 0000000..ca210ef
--- /dev/null
+++ b/plugins/LV2/src/Thunder/Thunder.cpp
@@ -0,0 +1,51 @@
+#include "Thunder.h"
+#include <iostream>
+#include <lv2wrapper.h>
+
+Thunder::Thunder(double rate)
+ : LV2Plugin(rate)
+{
+}
+
+void Thunder::activate()
+{
+ A = 0.0;
+ B = 1.0;
+
+ fpNShapeL = 0.0;
+ fpNShapeR = 0.0;
+ muSpeedA = 10000;
+ muSpeedB = 10000;
+ muCoefficientA = 1;
+ muCoefficientB = 1;
+ muVary = 1;
+ gateL = 0.0;
+ gateR = 0.0;
+ iirSampleAL = 0.0;
+ iirSampleBL = 0.0;
+ iirSampleAR = 0.0;
+ iirSampleBR = 0.0;
+ iirSampleAM = 0.0;
+ iirSampleBM = 0.0;
+ iirSampleCM = 0.0;
+ flip = false;
+ //this is reset: values being initialized only once. Startup values, whatever they are.
+
+}
+
+void Thunder::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/Thunder/ThunderProc.cpp"
+
+// Create the LV2Wrapper and register the plugin
+LV2Wrapper<Thunder> plugin;
diff --git a/plugins/LV2/src/Thunder/Thunder.h b/plugins/LV2/src/Thunder/Thunder.h
new file mode 100644
index 0000000..6260839
--- /dev/null
+++ b/plugins/LV2/src/Thunder/Thunder.h
@@ -0,0 +1,52 @@
+#ifndef __Thunder_H
+#define __Thunder_H
+
+#include <lv2plugin.h>
+
+class Thunder : public LV2Plugin<2> {
+public:
+ Thunder(double rate);
+
+ void activate();
+ void run(uint32_t num_samples);
+
+ static constexpr const char * URI = "https://www.airwindows.com/thunder";
+
+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 muVary;
+ double muAttack;
+ double muNewSpeed;
+ double muSpeedA;
+ double muSpeedB;
+ double muCoefficientA;
+ double muCoefficientB;
+ double gateL;
+ double gateR;
+ double iirSampleAL;
+ double iirSampleBL;
+ double iirSampleAR;
+ double iirSampleBR;
+ double iirSampleAM;
+ double iirSampleBM;
+ double iirSampleCM;
+ long double fpNShapeL;
+ long double fpNShapeR;
+ bool flip;
+
+ float A;
+ float B;
+
+};
+
+#endif
diff --git a/plugins/LV2/src/Thunder/Thunder.ttl b/plugins/LV2/src/Thunder/Thunder.ttl
new file mode 100644
index 0000000..39e4eea
--- /dev/null
+++ b/plugins/LV2/src/Thunder/Thunder.ttl
@@ -0,0 +1,52 @@
+# Airwindows Thunder 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/thunder>
+ 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 "Thunder" ;
+ 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 Trim" ;
+ 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/Thunder/manifest.ttl.in b/plugins/LV2/src/Thunder/manifest.ttl.in
new file mode 100644
index 0000000..e2318ab
--- /dev/null
+++ b/plugins/LV2/src/Thunder/manifest.ttl.in
@@ -0,0 +1,6 @@
+airwindows:thunder
+ a lv2:Plugin ;
+ doap:name "Airwindows Thunder" ;
+ doap:license <http://opensource.org/licenses/mit> ;
+ lv2:binary <Thunder@CMAKE_SHARED_LIBRARY_SUFFIX@> ;
+ rdfs:seeAlso <Thunder.ttl> .
diff --git a/plugins/LV2/src/ToTape5/ToTape5.cpp b/plugins/LV2/src/ToTape5/ToTape5.cpp
new file mode 100644
index 0000000..7807a61
--- /dev/null
+++ b/plugins/LV2/src/ToTape5/ToTape5.cpp
@@ -0,0 +1,123 @@
+#include "ToTape5.h"
+#include <iostream>
+#include <lv2wrapper.h>
+
+ToTape5::ToTape5(double rate)
+ : LV2Plugin(rate)
+{
+}
+
+void ToTape5::activate()
+{
+ A = 0.25;
+ B = 0.0;
+ C = 0.0;
+ D = 0.0;
+ E = 1.0;
+ F = 1.0;
+
+ iirMidRollerAL = 0.0;
+ iirMidRollerBL = 0.0;
+ iirMidRollerCL = 0.0;
+ iirHeadBumpAL = 0.0;
+ iirHeadBumpBL = 0.0;
+ iirHeadBumpCL = 0.0;
+ iirMinHeadBumpL = 0.0;
+
+ iirMidRollerAR = 0.0;
+ iirMidRollerBR = 0.0;
+ iirMidRollerCR = 0.0;
+ iirHeadBumpAR = 0.0;
+ iirHeadBumpBR = 0.0;
+ iirHeadBumpCR = 0.0;
+ iirMinHeadBumpR = 0.0;
+
+ iirSampleAL = 0.0;
+ iirSampleBL = 0.0;
+ iirSampleCL = 0.0;
+ iirSampleDL = 0.0;
+ iirSampleEL = 0.0;
+ iirSampleFL = 0.0;
+ iirSampleGL = 0.0;
+ iirSampleHL = 0.0;
+ iirSampleIL = 0.0;
+ iirSampleJL = 0.0;
+ iirSampleKL = 0.0;
+ iirSampleLL = 0.0;
+ iirSampleML = 0.0;
+ iirSampleNL = 0.0;
+ iirSampleOL = 0.0;
+ iirSamplePL = 0.0;
+ iirSampleQL = 0.0;
+ iirSampleRL = 0.0;
+ iirSampleSL = 0.0;
+ iirSampleTL = 0.0;
+ iirSampleUL = 0.0;
+ iirSampleVL = 0.0;
+ iirSampleWL = 0.0;
+ iirSampleXL = 0.0;
+ iirSampleYL = 0.0;
+ iirSampleZL = 0.0;
+
+ iirSampleAR = 0.0;
+ iirSampleBR = 0.0;
+ iirSampleCR = 0.0;
+ iirSampleDR = 0.0;
+ iirSampleER = 0.0;
+ iirSampleFR = 0.0;
+ iirSampleGR = 0.0;
+ iirSampleHR = 0.0;
+ iirSampleIR = 0.0;
+ iirSampleJR = 0.0;
+ iirSampleKR = 0.0;
+ iirSampleLR = 0.0;
+ iirSampleMR = 0.0;
+ iirSampleNR = 0.0;
+ iirSampleOR = 0.0;
+ iirSamplePR = 0.0;
+ iirSampleQR = 0.0;
+ iirSampleRR = 0.0;
+ iirSampleSR = 0.0;
+ iirSampleTR = 0.0;
+ iirSampleUR = 0.0;
+ iirSampleVR = 0.0;
+ iirSampleWR = 0.0;
+ iirSampleXR = 0.0;
+ iirSampleYR = 0.0;
+ iirSampleZR = 0.0;
+
+ for (int temp = 0; temp < 999; temp++) {dL[temp] = 0.0; eL[temp] = 0.0; dR[temp] = 0.0; eR[temp] = 0.0;}
+
+ gcount = 0;
+ rateof = 0.5;
+ sweep = 0.0;
+ nextmax = 0.5;
+ hcount = 0;
+ flip = 0;
+
+ fpNShapeL = 0.0;
+ fpNShapeR = 0.0;
+ //this is reset: values being initialized only once. Startup values, whatever they are.
+
+}
+
+void ToTape5::run(uint32_t num_samples)
+{
+ A = *params[0];
+ B = *params[1];
+ C = *params[2];
+ D = *params[3];
+ E = *params[4];
+ F = *params[5];
+
+ processReplacing(const_cast<float **>(in), out, num_samples);
+}
+
+//
+// Include the processing code from the VST version.
+//
+#include <cmath>
+#include "../../../LinuxVST/src/ToTape5/ToTape5Proc.cpp"
+
+// Create the LV2Wrapper and register the plugin
+LV2Wrapper<ToTape5> plugin;
diff --git a/plugins/LV2/src/ToTape5/ToTape5.h b/plugins/LV2/src/ToTape5/ToTape5.h
new file mode 100644
index 0000000..f1661f8
--- /dev/null
+++ b/plugins/LV2/src/ToTape5/ToTape5.h
@@ -0,0 +1,122 @@
+#ifndef __ToTape5_H
+#define __ToTape5_H
+
+#include <lv2plugin.h>
+
+class ToTape5 : public LV2Plugin<6> {
+public:
+ ToTape5(double rate);
+
+ void activate();
+ void run(uint32_t num_samples);
+
+ static constexpr const char * URI = "https://www.airwindows.com/totape5";
+
+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.
+ */
+
+ int gcount;
+ double rateof;
+ double sweep;
+ double nextmax;
+ int hcount;
+ int flip;
+
+ double dL[1000];
+ double eL[1000];
+ double dR[1000];
+ double eR[1000];
+
+ double iirMidRollerAL;
+ double iirMidRollerBL;
+ double iirMidRollerCL;
+ double iirHeadBumpAL;
+ double iirHeadBumpBL;
+ double iirHeadBumpCL;
+ double iirMinHeadBumpL;
+
+ double iirMidRollerAR;
+ double iirMidRollerBR;
+ double iirMidRollerCR;
+ double iirHeadBumpAR;
+ double iirHeadBumpBR;
+ double iirHeadBumpCR;
+ double iirMinHeadBumpR;
+
+ double iirSampleAL;
+ double iirSampleBL;
+ double iirSampleCL;
+ double iirSampleDL;
+ double iirSampleEL;
+ double iirSampleFL;
+ double iirSampleGL;
+ double iirSampleHL;
+ double iirSampleIL;
+ double iirSampleJL;
+ double iirSampleKL;
+ double iirSampleLL;
+ double iirSampleML;
+ double iirSampleNL;
+ double iirSampleOL;
+ double iirSamplePL;
+ double iirSampleQL;
+ double iirSampleRL;
+ double iirSampleSL;
+ double iirSampleTL;
+ double iirSampleUL;
+ double iirSampleVL;
+ double iirSampleWL;
+ double iirSampleXL;
+ double iirSampleYL;
+ double iirSampleZL;
+
+ double iirSampleAR;
+ double iirSampleBR;
+ double iirSampleCR;
+ double iirSampleDR;
+ double iirSampleER;
+ double iirSampleFR;
+ double iirSampleGR;
+ double iirSampleHR;
+ double iirSampleIR;
+ double iirSampleJR;
+ double iirSampleKR;
+ double iirSampleLR;
+ double iirSampleMR;
+ double iirSampleNR;
+ double iirSampleOR;
+ double iirSamplePR;
+ double iirSampleQR;
+ double iirSampleRR;
+ double iirSampleSR;
+ double iirSampleTR;
+ double iirSampleUR;
+ double iirSampleVR;
+ double iirSampleWR;
+ double iirSampleXR;
+ double iirSampleYR;
+ double iirSampleZR;
+
+
+ long double fpNShapeL;
+ long double fpNShapeR;
+ //default stuff
+
+ float A;
+ float B;
+ float C;
+ float D;
+ float E;
+ float F;
+};
+
+#endif
diff --git a/plugins/LV2/src/ToTape5/ToTape5.ttl b/plugins/LV2/src/ToTape5/ToTape5.ttl
new file mode 100644
index 0000000..7e87c4b
--- /dev/null
+++ b/plugins/LV2/src/ToTape5/ToTape5.ttl
@@ -0,0 +1,84 @@
+# Airwindows ToTape5 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/totape5>
+ 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 "Louder" ;
+ 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 "Softer" ;
+ 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 "Fatter" ;
+ 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 "Flutter" ;
+ 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 "Output" ;
+ 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 "Dry/Wet" ;
+ lv2:default 0.5 ;
+ lv2:minimum 0.0 ;
+ lv2:maximum 1.0 ;
+ ] , [
+ a lv2:InputPort , lv2:AudioPort ;
+ lv2:index 6 ;
+ lv2:symbol "in_l" ;
+ lv2:name "In left" ;
+ ] , [
+ a lv2:InputPort , lv2:AudioPort ;
+ lv2:index 7 ;
+ lv2:symbol "in_r" ;
+ lv2:name "In right" ;
+ ] , [
+ a lv2:OutputPort , lv2:AudioPort ;
+ lv2:index 8 ;
+ lv2:symbol "out_l" ;
+ lv2:name "Out left" ;
+ ] , [
+ a lv2:OutputPort , lv2:AudioPort ;
+ lv2:index 9 ;
+ lv2:symbol "out_r" ;
+ lv2:name "Out right" ;
+ ] .
diff --git a/plugins/LV2/src/ToTape5/manifest.ttl.in b/plugins/LV2/src/ToTape5/manifest.ttl.in
new file mode 100644
index 0000000..bb02750
--- /dev/null
+++ b/plugins/LV2/src/ToTape5/manifest.ttl.in
@@ -0,0 +1,6 @@
+airwindows:totape5
+ a lv2:Plugin ;
+ doap:name "Airwindows ToTape5" ;
+ doap:license <http://opensource.org/licenses/mit> ;
+ lv2:binary <ToTape5@CMAKE_SHARED_LIBRARY_SUFFIX@> ;
+ rdfs:seeAlso <ToTape5.ttl> .
diff --git a/plugins/LV2/src/ToTape6/ToTape6.cpp b/plugins/LV2/src/ToTape6/ToTape6.cpp
new file mode 100644
index 0000000..df29825
--- /dev/null
+++ b/plugins/LV2/src/ToTape6/ToTape6.cpp
@@ -0,0 +1,68 @@
+#include "ToTape6.h"
+#include <iostream>
+#include <lv2wrapper.h>
+
+//
+// Include the processing code from the VST version.
+//
+#include <cmath>
+#include "../../../LinuxVST/src/ToTape6/ToTape6Proc.cpp"
+
+ToTape6::ToTape6(double rate)
+ : LV2Plugin(rate)
+{
+}
+
+void ToTape6::activate()
+{
+ A = 0.5;
+ B = 0.5;
+ C = 0.5;
+ D = 0.5;
+ E = 0.5;
+ F = 1.0;
+ iirMidRollerAL = 0.0;
+ iirMidRollerBL = 0.0;
+ iirHeadBumpAL = 0.0;
+ iirHeadBumpBL = 0.0;
+
+ iirMidRollerAR = 0.0;
+ iirMidRollerBR = 0.0;
+ iirHeadBumpAR = 0.0;
+ iirHeadBumpBR = 0.0;
+
+ for (int x = 0; x < 9; x++) {
+ biquadAL[x] = 0.0;biquadBL[x] = 0.0;biquadCL[x] = 0.0;biquadDL[x] = 0.0;
+ biquadAR[x] = 0.0;biquadBR[x] = 0.0;biquadCR[x] = 0.0;biquadDR[x] = 0.0;
+ }
+ flip = false;
+ for (int temp = 0; temp < 501; temp++) {dL[temp] = 0.0;dR[temp] = 0.0;}
+
+ gcount = 0;
+ rateof = 0.5;
+ sweep = M_PI;
+ nextmax = 0.5;
+ lastSampleL = 0.0;
+ lastSampleR = 0.0;
+ flip = 0;
+
+ fpd = 17;
+ //this is reset: values being initialized only once. Startup values, whatever they are.
+
+}
+
+void ToTape6::run(uint32_t num_samples)
+{
+ A = *params[0];
+ B = *params[1];
+ C = *params[2];
+ D = *params[3];
+ E = *params[4];
+ F = *params[5];
+
+ processReplacing(const_cast<float **>(in), out, num_samples);
+}
+
+
+// Create the LV2Wrapper and register the plugin
+LV2Wrapper<ToTape6> plugin;
diff --git a/plugins/LV2/src/ToTape6/ToTape6.h b/plugins/LV2/src/ToTape6/ToTape6.h
new file mode 100644
index 0000000..4e945fd
--- /dev/null
+++ b/plugins/LV2/src/ToTape6/ToTape6.h
@@ -0,0 +1,68 @@
+#ifndef __ToTape6_H
+#define __ToTape6_H
+
+#include <lv2plugin.h>
+
+class ToTape6 : public LV2Plugin<6> {
+public:
+ ToTape6(double rate);
+
+ void activate();
+ void run(uint32_t num_samples);
+
+ static constexpr const char * URI = "https://www.airwindows.com/totape6";
+
+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 dL[502];
+ double dR[502];
+ int gcount;
+ double rateof;
+ double sweep;
+ double nextmax;
+
+ double iirMidRollerAL;
+ double iirMidRollerBL;
+ double iirHeadBumpAL;
+ double iirHeadBumpBL;
+
+ double iirMidRollerAR;
+ double iirMidRollerBR;
+ double iirHeadBumpAR;
+ double iirHeadBumpBR;
+ long double biquadAL[9];
+ long double biquadBL[9];
+ long double biquadCL[9];
+ long double biquadDL[9];
+
+ long double biquadAR[9];
+ long double biquadBR[9];
+ long double biquadCR[9];
+ long double biquadDR[9];
+ bool flip;
+
+ long double lastSampleL;
+ long double lastSampleR;
+
+ uint32_t fpd;
+ //default stuff
+
+ float A;
+ float B;
+ float C;
+ float D;
+ float E;
+ float F;
+};
+
+#endif
diff --git a/plugins/LV2/src/ToTape6/ToTape6.ttl b/plugins/LV2/src/ToTape6/ToTape6.ttl
new file mode 100644
index 0000000..ff464fc
--- /dev/null
+++ b/plugins/LV2/src/ToTape6/ToTape6.ttl
@@ -0,0 +1,84 @@
+# Airwindows ToTape6 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/totape6>
+ 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 "Soften" ;
+ 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 "Head B" ;
+ 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 "Flutter" ;
+ 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 "Output" ;
+ 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 "Dry/Wet" ;
+ lv2:default 0.5 ;
+ lv2:minimum 0.0 ;
+ lv2:maximum 1.0 ;
+ ] , [
+ a lv2:InputPort , lv2:AudioPort ;
+ lv2:index 6 ;
+ lv2:symbol "in_l" ;
+ lv2:name "In left" ;
+ ] , [
+ a lv2:InputPort , lv2:AudioPort ;
+ lv2:index 7 ;
+ lv2:symbol "in_r" ;
+ lv2:name "In right" ;
+ ] , [
+ a lv2:OutputPort , lv2:AudioPort ;
+ lv2:index 8 ;
+ lv2:symbol "out_l" ;
+ lv2:name "Out left" ;
+ ] , [
+ a lv2:OutputPort , lv2:AudioPort ;
+ lv2:index 9 ;
+ lv2:symbol "out_r" ;
+ lv2:name "Out right" ;
+ ] .
diff --git a/plugins/LV2/src/ToTape6/manifest.ttl.in b/plugins/LV2/src/ToTape6/manifest.ttl.in
new file mode 100644
index 0000000..d1a5733
--- /dev/null
+++ b/plugins/LV2/src/ToTape6/manifest.ttl.in
@@ -0,0 +1,6 @@
+airwindows:totape6
+ a lv2:Plugin ;
+ doap:name "Airwindows ToTape6" ;
+ doap:license <http://opensource.org/licenses/mit> ;
+ lv2:binary <ToTape6@CMAKE_SHARED_LIBRARY_SUFFIX@> ;
+ rdfs:seeAlso <ToTape6.ttl> .
diff --git a/plugins/LV2/src/ToVinyl4/ToVinyl4.cpp b/plugins/LV2/src/ToVinyl4/ToVinyl4.cpp
new file mode 100644
index 0000000..a2e3e06
--- /dev/null
+++ b/plugins/LV2/src/ToVinyl4/ToVinyl4.cpp
@@ -0,0 +1,110 @@
+#include "ToVinyl4.h"
+#include <iostream>
+#include <lv2wrapper.h>
+
+ToVinyl4::ToVinyl4(double rate)
+ : LV2Plugin(rate)
+{
+}
+
+void ToVinyl4::activate()
+{
+ for(int count = 0; count < 11; count++) {
+ aMid[count] = 0.0;
+ bMid[count] = 0.0;
+ fMid[count] = 0.0;
+ aSide[count] = 0.0;
+ bSide[count] = 0.0;
+ fSide[count] = 0.0;
+ }
+ aMidPrev = 0.0; aSidePrev = 0.0;
+ bMidPrev = 0.0; bSidePrev = 0.0;
+ ataLastOutL = ataLastOutR = 0.0;
+ midSampleA = 0.0;
+ midSampleB = 0.0;
+ midSampleC = 0.0;
+ midSampleD = 0.0;
+ midSampleE = 0.0;
+ midSampleF = 0.0;
+ midSampleG = 0.0;
+ midSampleH = 0.0;
+ midSampleI = 0.0;
+ midSampleJ = 0.0;
+ midSampleK = 0.0;
+ midSampleL = 0.0;
+ midSampleM = 0.0;
+ midSampleN = 0.0;
+ midSampleO = 0.0;
+ midSampleP = 0.0;
+ midSampleQ = 0.0;
+ midSampleR = 0.0;
+ midSampleS = 0.0;
+ midSampleT = 0.0;
+ midSampleU = 0.0;
+ midSampleV = 0.0;
+ midSampleW = 0.0;
+ midSampleX = 0.0;
+ midSampleY = 0.0;
+ midSampleZ = 0.0;
+
+ sideSampleA = 0.0;
+ sideSampleB = 0.0;
+ sideSampleC = 0.0;
+ sideSampleD = 0.0;
+ sideSampleE = 0.0;
+ sideSampleF = 0.0;
+ sideSampleG = 0.0;
+ sideSampleH = 0.0;
+ sideSampleI = 0.0;
+ sideSampleJ = 0.0;
+ sideSampleK = 0.0;
+ sideSampleL = 0.0;
+ sideSampleM = 0.0;
+ sideSampleN = 0.0;
+ sideSampleO = 0.0;
+ sideSampleP = 0.0;
+ sideSampleQ = 0.0;
+ sideSampleR = 0.0;
+ sideSampleS = 0.0;
+ sideSampleT = 0.0;
+ sideSampleU = 0.0;
+ sideSampleV = 0.0;
+ sideSampleW = 0.0;
+ sideSampleX = 0.0;
+ sideSampleY = 0.0;
+ sideSampleZ = 0.0;
+ s1L = s2L = s3L = 0.0;
+ o1L = o2L = o3L = 0.0;
+ m1L = m2L = desL = 0.0;
+ s1R = s2R = s3R = 0.0;
+ o1R = o2R = o3R = 0.0;
+ m1R = m2R = desR = 0.0;
+
+ A = 0.203419; //22.0 hz = ((A*A)*290)+10 (A*A)*290 = 12 (A*A) = 0.0413793 sqrt() = 0.203419
+ B = 0.3424051; //44.0 hz = ((B*B)*290)+10 (B*B)*290 = 34 (B*B) = 0.1172413 sqrt() = 0.3424051
+ C = 0.32;
+ D = 0.064;
+ fpNShapeL = 0.0;
+ fpNShapeR = 0.0;
+ //this is reset: values being initialized only once. Startup values, whatever they are.
+
+}
+
+void ToVinyl4::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/ToVinyl4/ToVinyl4Proc.cpp"
+
+// Create the LV2Wrapper and register the plugin
+LV2Wrapper<ToVinyl4> plugin;
diff --git a/plugins/LV2/src/ToVinyl4/ToVinyl4.h b/plugins/LV2/src/ToVinyl4/ToVinyl4.h
new file mode 100644
index 0000000..e2fca15
--- /dev/null
+++ b/plugins/LV2/src/ToVinyl4/ToVinyl4.h
@@ -0,0 +1,124 @@
+#ifndef __ToVinyl4_H
+#define __ToVinyl4_H
+
+#include <lv2plugin.h>
+
+class ToVinyl4 : public LV2Plugin<4> {
+public:
+ ToVinyl4(double rate);
+
+ void activate();
+ void run(uint32_t num_samples);
+
+ static constexpr const char * URI = "https://www.airwindows.com/tovinyl4";
+
+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 ataLastOutL;
+ double ataLastOutR;
+
+ double s1L;
+ double s2L;
+ double s3L;
+ double o1L;
+ double o2L;
+ double o3L;
+ double m1L;
+ double m2L;
+ double s1R;
+ double s2R;
+ double s3R;
+ double o1R;
+ double o2R;
+ double o3R;
+ double m1R;
+ double m2R;
+ double desL;
+ double desR;
+
+ double midSampleA;
+ double midSampleB;
+ double midSampleC;
+ double midSampleD;
+ double midSampleE;
+ double midSampleF;
+ double midSampleG;
+ double midSampleH;
+ double midSampleI;
+ double midSampleJ;
+ double midSampleK;
+ double midSampleL;
+ double midSampleM;
+ double midSampleN;
+ double midSampleO;
+ double midSampleP;
+ double midSampleQ;
+ double midSampleR;
+ double midSampleS;
+ double midSampleT;
+ double midSampleU;
+ double midSampleV;
+ double midSampleW;
+ double midSampleX;
+ double midSampleY;
+ double midSampleZ;
+
+ double sideSampleA;
+ double sideSampleB;
+ double sideSampleC;
+ double sideSampleD;
+ double sideSampleE;
+ double sideSampleF;
+ double sideSampleG;
+ double sideSampleH;
+ double sideSampleI;
+ double sideSampleJ;
+ double sideSampleK;
+ double sideSampleL;
+ double sideSampleM;
+ double sideSampleN;
+ double sideSampleO;
+ double sideSampleP;
+ double sideSampleQ;
+ double sideSampleR;
+ double sideSampleS;
+ double sideSampleT;
+ double sideSampleU;
+ double sideSampleV;
+ double sideSampleW;
+ double sideSampleX;
+ double sideSampleY;
+ double sideSampleZ;
+
+ double aMid[11];
+ double bMid[11];
+ double fMid[11];
+ double aSide[11];
+ double bSide[11];
+ double fSide[11];
+ double aMidPrev;
+ double aSidePrev;
+ double bMidPrev;
+ double bSidePrev;
+
+ long double fpNShapeL;
+ long double fpNShapeR;
+ //default stuff
+
+ float A;
+ float B;
+ float C;
+ float D;
+};
+
+#endif
diff --git a/plugins/LV2/src/ToVinyl4/ToVinyl4.ttl b/plugins/LV2/src/ToVinyl4/ToVinyl4.ttl
new file mode 100644
index 0000000..03e5820
--- /dev/null
+++ b/plugins/LV2/src/ToVinyl4/ToVinyl4.ttl
@@ -0,0 +1,68 @@
+# Airwindows ToVinyl4 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/tovinyl4>
+ 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 "Mid HiP" ;
+ 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 "SideHiP" ;
+ 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 "H Limit" ;
+ 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 "Gv Wear" ;
+ 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/ToVinyl4/manifest.ttl.in b/plugins/LV2/src/ToVinyl4/manifest.ttl.in
new file mode 100644
index 0000000..545da84
--- /dev/null
+++ b/plugins/LV2/src/ToVinyl4/manifest.ttl.in
@@ -0,0 +1,6 @@
+airwindows:tovinyl4
+ a lv2:Plugin ;
+ doap:name "Airwindows ToVinyl4" ;
+ doap:license <http://opensource.org/licenses/mit> ;
+ lv2:binary <ToVinyl4@CMAKE_SHARED_LIBRARY_SUFFIX@> ;
+ rdfs:seeAlso <ToVinyl4.ttl> .
diff --git a/plugins/LV2/src/ToneSlant/ToneSlant.cpp b/plugins/LV2/src/ToneSlant/ToneSlant.cpp
new file mode 100644
index 0000000..811bf19
--- /dev/null
+++ b/plugins/LV2/src/ToneSlant/ToneSlant.cpp
@@ -0,0 +1,36 @@
+#include "ToneSlant.h"
+#include <iostream>
+#include <lv2wrapper.h>
+
+ToneSlant::ToneSlant(double rate)
+ : LV2Plugin(rate)
+{
+}
+
+void ToneSlant::activate()
+{
+ A = 0.0;
+ B = 0.0;
+ for(int count = 0; count < 102; count++) {bL[count] = 0.0; bR[count] = 0.0; f[count] = 0.0;}
+ fpNShapeL = 0.0;
+ fpNShapeR = 0.0;
+ //this is reset: values being initialized only once. Startup values, whatever they are.
+
+}
+
+void ToneSlant::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/ToneSlant/ToneSlantProc.cpp"
+
+// Create the LV2Wrapper and register the plugin
+LV2Wrapper<ToneSlant> plugin;
diff --git a/plugins/LV2/src/ToneSlant/ToneSlant.h b/plugins/LV2/src/ToneSlant/ToneSlant.h
new file mode 100644
index 0000000..23d6806
--- /dev/null
+++ b/plugins/LV2/src/ToneSlant/ToneSlant.h
@@ -0,0 +1,39 @@
+#ifndef __ToneSlant_H
+#define __ToneSlant_H
+
+#include <lv2plugin.h>
+
+class ToneSlant : public LV2Plugin<2> {
+public:
+ ToneSlant(double rate);
+
+ void activate();
+ void run(uint32_t num_samples);
+
+ static constexpr const char * URI = "https://www.airwindows.com/toneslant";
+
+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
+
+ float A;
+ float B;
+ double bL[102];
+ double bR[102];
+ double f[102];
+
+};
+
+#endif
diff --git a/plugins/LV2/src/ToneSlant/ToneSlant.ttl b/plugins/LV2/src/ToneSlant/ToneSlant.ttl
new file mode 100644
index 0000000..b50ff62
--- /dev/null
+++ b/plugins/LV2/src/ToneSlant/ToneSlant.ttl
@@ -0,0 +1,52 @@
+# Airwindows ToneSlant 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/toneslant>
+ 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 "Voicing" ;
+ 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 "Highs" ;
+ 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/ToneSlant/manifest.ttl.in b/plugins/LV2/src/ToneSlant/manifest.ttl.in
new file mode 100644
index 0000000..85c5af5
--- /dev/null
+++ b/plugins/LV2/src/ToneSlant/manifest.ttl.in
@@ -0,0 +1,6 @@
+airwindows:toneslant
+ a lv2:Plugin ;
+ doap:name "Airwindows ToneSlant" ;
+ doap:license <http://opensource.org/licenses/mit> ;
+ lv2:binary <ToneSlant@CMAKE_SHARED_LIBRARY_SUFFIX@> ;
+ rdfs:seeAlso <ToneSlant.ttl> .
diff --git a/plugins/LV2/src/TransDesk/TransDesk.cpp b/plugins/LV2/src/TransDesk/TransDesk.cpp
new file mode 100644
index 0000000..48edab5
--- /dev/null
+++ b/plugins/LV2/src/TransDesk/TransDesk.cpp
@@ -0,0 +1,45 @@
+#include "TransDesk.h"
+#include <iostream>
+#include <lv2wrapper.h>
+
+TransDesk::TransDesk(double rate)
+ : LV2Plugin(rate)
+{
+}
+
+void TransDesk::activate()
+{
+ for(int count = 0; count < 19; count++) {dL[count] = 0; dR[count] = 0;}
+ gcount = 0;
+
+ controlL = 0;
+ lastSampleL = 0.0;
+ lastOutSampleL = 0.0;
+ lastSlewL = 0.0;
+
+ controlR = 0;
+ lastSampleR = 0.0;
+ lastOutSampleR = 0.0;
+ lastSlewR = 0.0;
+
+ fpNShapeL = 0.0;
+ fpNShapeR = 0.0;
+ //this is reset: values being initialized only once. Startup values, whatever they are.
+
+}
+
+void TransDesk::run(uint32_t num_samples)
+{
+
+
+ processReplacing(const_cast<float **>(in), out, num_samples);
+}
+
+//
+// Include the processing code from the VST version.
+//
+#include <cmath>
+#include "../../../LinuxVST/src/TransDesk/TransDeskProc.cpp"
+
+// Create the LV2Wrapper and register the plugin
+LV2Wrapper<TransDesk> plugin;
diff --git a/plugins/LV2/src/TransDesk/TransDesk.h b/plugins/LV2/src/TransDesk/TransDesk.h
new file mode 100644
index 0000000..13664c9
--- /dev/null
+++ b/plugins/LV2/src/TransDesk/TransDesk.h
@@ -0,0 +1,46 @@
+#ifndef __TransDesk_H
+#define __TransDesk_H
+
+#include <lv2plugin.h>
+
+class TransDesk : public LV2Plugin<0> {
+public:
+ TransDesk(double rate);
+
+ void activate();
+ void run(uint32_t num_samples);
+
+ static constexpr const char * URI = "https://www.airwindows.com/transdesk";
+
+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
+ int gcount;
+
+ double dL[20];
+ double controlL;
+ long double lastSampleL;
+ long double lastOutSampleL;
+ double lastSlewL;
+
+ double dR[20];
+ double controlR;
+ long double lastSampleR;
+ long double lastOutSampleR;
+ double lastSlewR;
+
+};
+
+#endif
diff --git a/plugins/LV2/src/TransDesk/TransDesk.ttl b/plugins/LV2/src/TransDesk/TransDesk.ttl
new file mode 100644
index 0000000..d3fcdda
--- /dev/null
+++ b/plugins/LV2/src/TransDesk/TransDesk.ttl
@@ -0,0 +1,38 @@
+# Airwindows TransDesk 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/transdesk>
+ 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:AudioPort ;
+ lv2:index 0 ;
+ lv2:symbol "in_l" ;
+ lv2:name "In left" ;
+ ] , [
+ a lv2:InputPort , lv2:AudioPort ;
+ lv2:index 1 ;
+ lv2:symbol "in_r" ;
+ lv2:name "In right" ;
+ ] , [
+ a lv2:OutputPort , lv2:AudioPort ;
+ lv2:index 2 ;
+ lv2:symbol "out_l" ;
+ lv2:name "Out left" ;
+ ] , [
+ a lv2:OutputPort , lv2:AudioPort ;
+ lv2:index 3 ;
+ lv2:symbol "out_r" ;
+ lv2:name "Out right" ;
+ ] .
diff --git a/plugins/LV2/src/TransDesk/manifest.ttl.in b/plugins/LV2/src/TransDesk/manifest.ttl.in
new file mode 100644
index 0000000..72ee98e
--- /dev/null
+++ b/plugins/LV2/src/TransDesk/manifest.ttl.in
@@ -0,0 +1,6 @@
+airwindows:transdesk
+ a lv2:Plugin ;
+ doap:name "Airwindows TransDesk" ;
+ doap:license <http://opensource.org/licenses/mit> ;
+ lv2:binary <TransDesk@CMAKE_SHARED_LIBRARY_SUFFIX@> ;
+ rdfs:seeAlso <TransDesk.ttl> .
diff --git a/plugins/LV2/src/Tremolo/Tremolo.cpp b/plugins/LV2/src/Tremolo/Tremolo.cpp
new file mode 100644
index 0000000..3770310
--- /dev/null
+++ b/plugins/LV2/src/Tremolo/Tremolo.cpp
@@ -0,0 +1,42 @@
+#include "Tremolo.h"
+#include <iostream>
+#include <lv2wrapper.h>
+
+Tremolo::Tremolo(double rate)
+ : LV2Plugin(rate)
+{
+}
+
+void Tremolo::activate()
+{
+ A = 0.5;
+ B = 1.0;
+ sweep = 3.141592653589793238 / 2.0;
+ speedChase = 0.0;
+ depthChase = 0.0;
+ speedAmount = 1.0;
+ depthAmount = 0.0;
+ lastSpeed = 1000.0;
+ lastDepth = 1000.0;
+ fpNShapeL = 0.0;
+ fpNShapeR = 0.0;
+ //this is reset: values being initialized only once. Startup values, whatever they are.
+
+}
+
+void Tremolo::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/Tremolo/TremoloProc.cpp"
+
+// Create the LV2Wrapper and register the plugin
+LV2Wrapper<Tremolo> plugin;
diff --git a/plugins/LV2/src/Tremolo/Tremolo.h b/plugins/LV2/src/Tremolo/Tremolo.h
new file mode 100644
index 0000000..dcdc799
--- /dev/null
+++ b/plugins/LV2/src/Tremolo/Tremolo.h
@@ -0,0 +1,43 @@
+#ifndef __Tremolo_H
+#define __Tremolo_H
+
+#include <lv2plugin.h>
+
+class Tremolo : public LV2Plugin<2> {
+public:
+ Tremolo(double rate);
+
+ void activate();
+ void run(uint32_t num_samples);
+
+ static constexpr const char * URI = "https://www.airwindows.com/tremolo";
+
+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 sweep;
+ double speedChase;
+ double depthChase;
+ double speedAmount;
+ double depthAmount;
+ double lastSpeed;
+ double lastDepth;
+
+ float A;
+ float B;
+};
+
+#endif
diff --git a/plugins/LV2/src/Tremolo/Tremolo.ttl b/plugins/LV2/src/Tremolo/Tremolo.ttl
new file mode 100644
index 0000000..14b61b1
--- /dev/null
+++ b/plugins/LV2/src/Tremolo/Tremolo.ttl
@@ -0,0 +1,52 @@
+# Airwindows Tremolo 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/tremolo>
+ a lv2:Plugin ,
+ lv2:ModulationPlugin ;
+ 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 "Speed" ;
+ 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 "Depth" ;
+ 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/Tremolo/manifest.ttl.in b/plugins/LV2/src/Tremolo/manifest.ttl.in
new file mode 100644
index 0000000..02b0d39
--- /dev/null
+++ b/plugins/LV2/src/Tremolo/manifest.ttl.in
@@ -0,0 +1,6 @@
+airwindows:tremolo
+ a lv2:Plugin ;
+ doap:name "Airwindows Tremolo" ;
+ doap:license <http://opensource.org/licenses/mit> ;
+ lv2:binary <Tremolo@CMAKE_SHARED_LIBRARY_SUFFIX@> ;
+ rdfs:seeAlso <Tremolo.ttl> .
diff --git a/plugins/LV2/src/TubeDesk/TubeDesk.cpp b/plugins/LV2/src/TubeDesk/TubeDesk.cpp
new file mode 100644
index 0000000..46e6664
--- /dev/null
+++ b/plugins/LV2/src/TubeDesk/TubeDesk.cpp
@@ -0,0 +1,45 @@
+#include "TubeDesk.h"
+#include <iostream>
+#include <lv2wrapper.h>
+
+TubeDesk::TubeDesk(double rate)
+ : LV2Plugin(rate)
+{
+}
+
+void TubeDesk::activate()
+{
+ for(int count = 0; count < 4999; count++) {dL[count] = 0; dR[count] = 0;}
+ gcount = 0;
+
+ controlL = 0;
+ lastSampleL = 0.0;
+ lastOutSampleL = 0.0;
+ lastSlewL = 0.0;
+
+ controlR = 0;
+ lastSampleR = 0.0;
+ lastOutSampleR = 0.0;
+ lastSlewR = 0.0;
+
+ fpNShapeL = 0.0;
+ fpNShapeR = 0.0;
+ //this is reset: values being initialized only once. Startup values, whatever they are.
+
+}
+
+void TubeDesk::run(uint32_t num_samples)
+{
+
+
+ processReplacing(const_cast<float **>(in), out, num_samples);
+}
+
+//
+// Include the processing code from the VST version.
+//
+#include <cmath>
+#include "../../../LinuxVST/src/TubeDesk/TubeDeskProc.cpp"
+
+// Create the LV2Wrapper and register the plugin
+LV2Wrapper<TubeDesk> plugin;
diff --git a/plugins/LV2/src/TubeDesk/TubeDesk.h b/plugins/LV2/src/TubeDesk/TubeDesk.h
new file mode 100644
index 0000000..f4624be
--- /dev/null
+++ b/plugins/LV2/src/TubeDesk/TubeDesk.h
@@ -0,0 +1,46 @@
+#ifndef __TubeDesk_H
+#define __TubeDesk_H
+
+#include <lv2plugin.h>
+
+class TubeDesk : public LV2Plugin<0> {
+public:
+ TubeDesk(double rate);
+
+ void activate();
+ void run(uint32_t num_samples);
+
+ static constexpr const char * URI = "https://www.airwindows.com/tubedesk";
+
+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
+ int gcount;
+
+ double dL[5000];
+ double controlL;
+ long double lastSampleL;
+ long double lastOutSampleL;
+ double lastSlewL;
+
+ double dR[5000];
+ double controlR;
+ long double lastSampleR;
+ long double lastOutSampleR;
+ double lastSlewR;
+
+};
+
+#endif
diff --git a/plugins/LV2/src/TubeDesk/TubeDesk.ttl b/plugins/LV2/src/TubeDesk/TubeDesk.ttl
new file mode 100644
index 0000000..2b291db
--- /dev/null
+++ b/plugins/LV2/src/TubeDesk/TubeDesk.ttl
@@ -0,0 +1,38 @@
+# Airwindows TubeDesk 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/tubedesk>
+ 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:AudioPort ;
+ lv2:index 0 ;
+ lv2:symbol "in_l" ;
+ lv2:name "In left" ;
+ ] , [
+ a lv2:InputPort , lv2:AudioPort ;
+ lv2:index 1 ;
+ lv2:symbol "in_r" ;
+ lv2:name "In right" ;
+ ] , [
+ a lv2:OutputPort , lv2:AudioPort ;
+ lv2:index 2 ;
+ lv2:symbol "out_l" ;
+ lv2:name "Out left" ;
+ ] , [
+ a lv2:OutputPort , lv2:AudioPort ;
+ lv2:index 3 ;
+ lv2:symbol "out_r" ;
+ lv2:name "Out right" ;
+ ] .
diff --git a/plugins/LV2/src/TubeDesk/manifest.ttl.in b/plugins/LV2/src/TubeDesk/manifest.ttl.in
new file mode 100644
index 0000000..43976df
--- /dev/null
+++ b/plugins/LV2/src/TubeDesk/manifest.ttl.in
@@ -0,0 +1,6 @@
+airwindows:tubedesk
+ a lv2:Plugin ;
+ doap:name "Airwindows TubeDesk" ;
+ doap:license <http://opensource.org/licenses/mit> ;
+ lv2:binary <TubeDesk@CMAKE_SHARED_LIBRARY_SUFFIX@> ;
+ rdfs:seeAlso <TubeDesk.ttl> .
diff --git a/plugins/LV2/src/UnBox/UnBox.cpp b/plugins/LV2/src/UnBox/UnBox.cpp
new file mode 100644
index 0000000..3b62e84
--- /dev/null
+++ b/plugins/LV2/src/UnBox/UnBox.cpp
@@ -0,0 +1,45 @@
+#include "UnBox.h"
+#include <iostream>
+#include <lv2wrapper.h>
+
+UnBox::UnBox(double rate)
+ : LV2Plugin(rate)
+{
+}
+
+void UnBox::activate()
+{
+ A = 0.5;
+ B = 0.0;
+ C = 0.5;
+
+ for(int count = 0; count < 5; count++) {aL[count] = 0.0; bL[count] = 0.0; aR[count] = 0.0; bR[count] = 0.0; e[count] = 0.0;}
+ for(int count = 0; count < 11; count++) {cL[count] = 0.0; cR[count] = 0.0; f[count] = 0.0;}
+ iirSampleAL = 0.0;
+ iirSampleBL = 0.0;
+ iirSampleAR = 0.0;
+ iirSampleBR = 0.0;
+
+ fpNShapeL = 0.0;
+ fpNShapeR = 0.0;
+ //this is reset: values being initialized only once. Startup values, whatever they are.
+
+}
+
+void UnBox::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/UnBox/UnBoxProc.cpp"
+
+// Create the LV2Wrapper and register the plugin
+LV2Wrapper<UnBox> plugin;
diff --git a/plugins/LV2/src/UnBox/UnBox.h b/plugins/LV2/src/UnBox/UnBox.h
new file mode 100644
index 0000000..dc59ede
--- /dev/null
+++ b/plugins/LV2/src/UnBox/UnBox.h
@@ -0,0 +1,49 @@
+#ifndef __UnBox_H
+#define __UnBox_H
+
+#include <lv2plugin.h>
+
+class UnBox : public LV2Plugin<3> {
+public:
+ UnBox(double rate);
+
+ void activate();
+ void run(uint32_t num_samples);
+
+ static constexpr const char * URI = "https://www.airwindows.com/unbox";
+
+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
+ long double aL[5];
+ long double bL[5];
+ long double cL[11];
+ long double aR[5];
+ long double bR[5];
+ long double cR[11];
+ long double e[5];
+ long double f[11];
+ long double iirSampleAL;
+ long double iirSampleBL;
+ long double iirSampleAR;
+ long double iirSampleBR;
+
+
+ float A;
+ float B;
+ float C;
+};
+
+#endif
diff --git a/plugins/LV2/src/UnBox/UnBox.ttl b/plugins/LV2/src/UnBox/UnBox.ttl
new file mode 100644
index 0000000..04a3b95
--- /dev/null
+++ b/plugins/LV2/src/UnBox/UnBox.ttl
@@ -0,0 +1,60 @@
+# Airwindows UnBox 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/unbox>
+ 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 "UnBox" ;
+ 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: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/UnBox/manifest.ttl.in b/plugins/LV2/src/UnBox/manifest.ttl.in
new file mode 100644
index 0000000..8173b19
--- /dev/null
+++ b/plugins/LV2/src/UnBox/manifest.ttl.in
@@ -0,0 +1,6 @@
+airwindows:unbox
+ a lv2:Plugin ;
+ doap:name "Airwindows UnBox" ;
+ doap:license <http://opensource.org/licenses/mit> ;
+ lv2:binary <UnBox@CMAKE_SHARED_LIBRARY_SUFFIX@> ;
+ rdfs:seeAlso <UnBox.ttl> .
diff --git a/plugins/LV2/src/VariMu/VariMu.cpp b/plugins/LV2/src/VariMu/VariMu.cpp
new file mode 100644
index 0000000..e8ac181
--- /dev/null
+++ b/plugins/LV2/src/VariMu/VariMu.cpp
@@ -0,0 +1,55 @@
+#include "VariMu.h"
+#include <iostream>
+#include <lv2wrapper.h>
+
+VariMu::VariMu(double rate)
+ : LV2Plugin(rate)
+{
+}
+
+void VariMu::activate()
+{
+
+ muSpeedAL = 10000;
+ muSpeedBL = 10000;
+ muCoefficientAL = 1;
+ muCoefficientBL = 1;
+ muVaryL = 1;
+ previousL = 0.0;
+
+ muSpeedAR = 10000;
+ muSpeedBR = 10000;
+ muCoefficientAR = 1;
+ muCoefficientBR = 1;
+ muVaryR = 1;
+ previousR = 0.0;
+ flip = false;
+
+ A = 0.0;
+ B = 0.5;
+ C = 1.0;
+ D = 1.0;
+ fpNShapeL = 0.0;
+ fpNShapeR = 0.0;
+ //this is reset: values being initialized only once. Startup values, whatever they are.
+
+}
+
+void VariMu::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/VariMu/VariMuProc.cpp"
+
+// Create the LV2Wrapper and register the plugin
+LV2Wrapper<VariMu> plugin;
diff --git a/plugins/LV2/src/VariMu/VariMu.h b/plugins/LV2/src/VariMu/VariMu.h
new file mode 100644
index 0000000..2cc5d3a
--- /dev/null
+++ b/plugins/LV2/src/VariMu/VariMu.h
@@ -0,0 +1,56 @@
+#ifndef __VariMu_H
+#define __VariMu_H
+
+#include <lv2plugin.h>
+
+class VariMu : public LV2Plugin<4> {
+public:
+ VariMu(double rate);
+
+ void activate();
+ void run(uint32_t num_samples);
+
+ static constexpr const char * URI = "https://www.airwindows.com/varimu";
+
+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 muVaryL;
+ double muAttackL;
+ double muNewSpeedL;
+ double muSpeedAL;
+ double muSpeedBL;
+ double muCoefficientAL;
+ double muCoefficientBL;
+ double previousL;
+
+ double muVaryR;
+ double muAttackR;
+ double muNewSpeedR;
+ double muSpeedAR;
+ double muSpeedBR;
+ double muCoefficientAR;
+ double muCoefficientBR;
+ double previousR;
+ bool flip;
+
+ long double fpNShapeL;
+ long double fpNShapeR;
+ //default stuff
+
+ float A;
+ float B;
+ float C;
+ float D;
+};
+
+#endif
diff --git a/plugins/LV2/src/VariMu/VariMu.ttl b/plugins/LV2/src/VariMu/VariMu.ttl
new file mode 100644
index 0000000..0f15518
--- /dev/null
+++ b/plugins/LV2/src/VariMu/VariMu.ttl
@@ -0,0 +1,68 @@
+# Airwindows VariMu 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/varimu>
+ 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 "Intensty" ;
+ 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 "Speed" ;
+ 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/VariMu/manifest.ttl.in b/plugins/LV2/src/VariMu/manifest.ttl.in
new file mode 100644
index 0000000..2e63b47
--- /dev/null
+++ b/plugins/LV2/src/VariMu/manifest.ttl.in
@@ -0,0 +1,6 @@
+airwindows:varimu
+ a lv2:Plugin ;
+ doap:name "Airwindows VariMu" ;
+ doap:license <http://opensource.org/licenses/mit> ;
+ lv2:binary <VariMu@CMAKE_SHARED_LIBRARY_SUFFIX@> ;
+ rdfs:seeAlso <VariMu.ttl> .
diff --git a/plugins/LV2/src/Vibrato/Vibrato.cpp b/plugins/LV2/src/Vibrato/Vibrato.cpp
new file mode 100644
index 0000000..82f448b
--- /dev/null
+++ b/plugins/LV2/src/Vibrato/Vibrato.cpp
@@ -0,0 +1,57 @@
+#include "Vibrato.h"
+#include <iostream>
+#include <lv2wrapper.h>
+
+Vibrato::Vibrato(double rate)
+ : LV2Plugin(rate)
+{
+}
+
+void Vibrato::activate()
+{
+ A = 0.3;
+ B = 0.0;
+ C = 0.4;
+ D = 0.0;
+ E = 1.0;
+
+ for(int count = 0; count < 16385; count++) {pL[count] = 0.0; pR[count] = 0.0;}
+ sweep = 3.141592653589793238 / 2.0;
+ sweepB = 3.141592653589793238 / 2.0;
+ gcount = 0;
+
+ airPrevL = 0.0;
+ airEvenL = 0.0;
+ airOddL = 0.0;
+ airFactorL = 0.0;
+ airPrevR = 0.0;
+ airEvenR = 0.0;
+ airOddR = 0.0;
+ airFactorR = 0.0;
+
+ flip = false;
+
+ fpd = 17;
+ //this is reset: values being initialized only once. Startup values, whatever they are.
+
+}
+
+void Vibrato::run(uint32_t num_samples)
+{
+ A = *params[0];
+ B = *params[1];
+ C = *params[2];
+ D = *params[3];
+ E = *params[4];
+
+ processReplacing(const_cast<float **>(in), out, num_samples);
+}
+
+//
+// Include the processing code from the VST version.
+//
+#include <cmath>
+#include "../../../LinuxVST/src/Vibrato/VibratoProc.cpp"
+
+// Create the LV2Wrapper and register the plugin
+LV2Wrapper<Vibrato> plugin;
diff --git a/plugins/LV2/src/Vibrato/Vibrato.h b/plugins/LV2/src/Vibrato/Vibrato.h
new file mode 100644
index 0000000..13da664
--- /dev/null
+++ b/plugins/LV2/src/Vibrato/Vibrato.h
@@ -0,0 +1,54 @@
+#ifndef __Vibrato_H
+#define __Vibrato_H
+
+#include <lv2plugin.h>
+
+class Vibrato : public LV2Plugin<5> {
+public:
+ Vibrato(double rate);
+
+ void activate();
+ void run(uint32_t num_samples);
+
+ static constexpr const char * URI = "https://www.airwindows.com/vibrato";
+
+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 pL[16386]; //this is processed, not raw incoming samples
+ double pR[16386]; //this is processed, not raw incoming samples
+ double sweep;
+ double sweepB;
+ int gcount;
+
+ double airPrevL;
+ double airEvenL;
+ double airOddL;
+ double airFactorL;
+ double airPrevR;
+ double airEvenR;
+ double airOddR;
+ double airFactorR;
+
+ bool flip;
+ uint32_t fpd;
+ //default stuff
+
+ float A;
+ float B;
+ float C;
+ float D;
+ float E; //parameters. Always 0-1, and we scale/alter them elsewhere.
+
+};
+
+#endif
diff --git a/plugins/LV2/src/Vibrato/Vibrato.ttl b/plugins/LV2/src/Vibrato/Vibrato.ttl
new file mode 100644
index 0000000..2bd4ce5
--- /dev/null
+++ b/plugins/LV2/src/Vibrato/Vibrato.ttl
@@ -0,0 +1,76 @@
+# Airwindows Vibrato 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/vibrato>
+ a lv2:Plugin ,
+ lv2:ModulationPlugin ;
+ 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 "Speed" ;
+ 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 "Depth" ;
+ 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 "FMSpeed" ;
+ 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 "FMDepth" ;
+ 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 "Inv/Wet" ;
+ lv2:default 0.5 ;
+ lv2:minimum 0.0 ;
+ lv2:maximum 1.0 ;
+ ] , [
+ a lv2:InputPort , lv2:AudioPort ;
+ lv2:index 5 ;
+ lv2:symbol "in_l" ;
+ lv2:name "In left" ;
+ ] , [
+ a lv2:InputPort , lv2:AudioPort ;
+ lv2:index 6 ;
+ lv2:symbol "in_r" ;
+ lv2:name "In right" ;
+ ] , [
+ a lv2:OutputPort , lv2:AudioPort ;
+ lv2:index 7 ;
+ lv2:symbol "out_l" ;
+ lv2:name "Out left" ;
+ ] , [
+ a lv2:OutputPort , lv2:AudioPort ;
+ lv2:index 8 ;
+ lv2:symbol "out_r" ;
+ lv2:name "Out right" ;
+ ] .
diff --git a/plugins/LV2/src/Vibrato/manifest.ttl.in b/plugins/LV2/src/Vibrato/manifest.ttl.in
new file mode 100644
index 0000000..0fa0d04
--- /dev/null
+++ b/plugins/LV2/src/Vibrato/manifest.ttl.in
@@ -0,0 +1,6 @@
+airwindows:vibrato
+ a lv2:Plugin ;
+ doap:name "Airwindows Vibrato" ;
+ doap:license <http://opensource.org/licenses/mit> ;
+ lv2:binary <Vibrato@CMAKE_SHARED_LIBRARY_SUFFIX@> ;
+ rdfs:seeAlso <Vibrato.ttl> .
diff --git a/plugins/LV2/src/VinylDither/VinylDither.cpp b/plugins/LV2/src/VinylDither/VinylDither.cpp
new file mode 100644
index 0000000..5d92f97
--- /dev/null
+++ b/plugins/LV2/src/VinylDither/VinylDither.cpp
@@ -0,0 +1,66 @@
+#include "VinylDither.h"
+#include <iostream>
+#include <lv2wrapper.h>
+
+VinylDither::VinylDither(double rate)
+ : LV2Plugin(rate)
+{
+}
+
+void VinylDither::activate()
+{
+ NSOddL = 0.0;
+ prevL = 0.0;
+ nsL[0] = 0;
+ nsL[1] = 0;
+ nsL[2] = 0;
+ nsL[3] = 0;
+ nsL[4] = 0;
+ nsL[5] = 0;
+ nsL[6] = 0;
+ nsL[7] = 0;
+ nsL[8] = 0;
+ nsL[9] = 0;
+ nsL[10] = 0;
+ nsL[11] = 0;
+ nsL[12] = 0;
+ nsL[13] = 0;
+ nsL[14] = 0;
+ nsL[15] = 0;
+ NSOddR = 0.0;
+ prevR = 0.0;
+ nsR[0] = 0;
+ nsR[1] = 0;
+ nsR[2] = 0;
+ nsR[3] = 0;
+ nsR[4] = 0;
+ nsR[5] = 0;
+ nsR[6] = 0;
+ nsR[7] = 0;
+ nsR[8] = 0;
+ nsR[9] = 0;
+ nsR[10] = 0;
+ nsR[11] = 0;
+ nsR[12] = 0;
+ nsR[13] = 0;
+ nsR[14] = 0;
+ nsR[15] = 0;
+ //this is reset: values being initialized only once. Startup values, whatever they are.
+
+}
+
+void VinylDither::run(uint32_t num_samples)
+{
+
+
+ processReplacing(const_cast<float **>(in), out, num_samples);
+}
+
+//
+// Include the processing code from the VST version.
+//
+#include <cmath>
+#include "../../../LinuxVST/src/VinylDither/VinylDitherProc.cpp"
+
+// Create the LV2Wrapper and register the plugin
+LV2Wrapper<VinylDither> plugin;
diff --git a/plugins/LV2/src/VinylDither/VinylDither.h b/plugins/LV2/src/VinylDither/VinylDither.h
new file mode 100644
index 0000000..3c1ed26
--- /dev/null
+++ b/plugins/LV2/src/VinylDither/VinylDither.h
@@ -0,0 +1,36 @@
+#ifndef __VinylDither_H
+#define __VinylDither_H
+
+#include <lv2plugin.h>
+
+class VinylDither : public LV2Plugin<0> {
+public:
+ VinylDither(double rate);
+
+ void activate();
+ void run(uint32_t num_samples);
+
+ static constexpr const char * URI = "https://www.airwindows.com/vinyldither";
+
+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 NSOddL;
+ double prevL;
+ double nsL[16];
+ double NSOddR;
+ double prevR;
+ double nsR[16];
+
+};
+
+#endif
diff --git a/plugins/LV2/src/VinylDither/VinylDither.ttl b/plugins/LV2/src/VinylDither/VinylDither.ttl
new file mode 100644
index 0000000..8e9096f
--- /dev/null
+++ b/plugins/LV2/src/VinylDither/VinylDither.ttl
@@ -0,0 +1,38 @@
+# Airwindows VinylDither 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/vinyldither>
+ 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:AudioPort ;
+ lv2:index 0 ;
+ lv2:symbol "in_l" ;
+ lv2:name "In left" ;
+ ] , [
+ a lv2:InputPort , lv2:AudioPort ;
+ lv2:index 1 ;
+ lv2:symbol "in_r" ;
+ lv2:name "In right" ;
+ ] , [
+ a lv2:OutputPort , lv2:AudioPort ;
+ lv2:index 2 ;
+ lv2:symbol "out_l" ;
+ lv2:name "Out left" ;
+ ] , [
+ a lv2:OutputPort , lv2:AudioPort ;
+ lv2:index 3 ;
+ lv2:symbol "out_r" ;
+ lv2:name "Out right" ;
+ ] .
diff --git a/plugins/LV2/src/VinylDither/manifest.ttl.in b/plugins/LV2/src/VinylDither/manifest.ttl.in
new file mode 100644
index 0000000..8abe285
--- /dev/null
+++ b/plugins/LV2/src/VinylDither/manifest.ttl.in
@@ -0,0 +1,6 @@
+airwindows:vinyldither
+ a lv2:Plugin ;
+ doap:name "Airwindows VinylDither" ;
+ doap:license <http://opensource.org/licenses/mit> ;
+ lv2:binary <VinylDither@CMAKE_SHARED_LIBRARY_SUFFIX@> ;
+ rdfs:seeAlso <VinylDither.ttl> .
diff --git a/plugins/LV2/src/VoiceOfTheStarship/VoiceOfTheStarship.cpp b/plugins/LV2/src/VoiceOfTheStarship/VoiceOfTheStarship.cpp
new file mode 100644
index 0000000..36b3266
--- /dev/null
+++ b/plugins/LV2/src/VoiceOfTheStarship/VoiceOfTheStarship.cpp
@@ -0,0 +1,49 @@
+#include "VoiceOfTheStarship.h"
+#include <iostream>
+#include <lv2wrapper.h>
+
+VoiceOfTheStarship::VoiceOfTheStarship(double rate)
+ : LV2Plugin(rate)
+{
+}
+
+void VoiceOfTheStarship::activate()
+{
+ A = 0.5;
+ B = 0.0;
+ position = 99999999;
+ quadratic = 0;
+ noiseAL = 0.0;
+ noiseBL = 0.0;
+ noiseCL = 0.0;
+ flipL = false;
+ noiseAR = 0.0;
+ noiseBR = 0.0;
+ noiseCR = 0.0;
+ flipR = false;
+ filterflip = false;
+ for(int count = 0; count < 11; count++) {bL[count] = 0.0; bR[count] = 0.0; f[count] = 0.0;}
+ lastAlgorithm = 0;
+
+ fpNShapeL = 0.0;
+ fpNShapeR = 0.0;
+ //this is reset: values being initialized only once. Startup values, whatever they are.
+
+}
+
+void VoiceOfTheStarship::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/VoiceOfTheStarship/VoiceOfTheStarshipProc.cpp"
+
+// Create the LV2Wrapper and register the plugin
+LV2Wrapper<VoiceOfTheStarship> plugin;
diff --git a/plugins/LV2/src/VoiceOfTheStarship/VoiceOfTheStarship.h b/plugins/LV2/src/VoiceOfTheStarship/VoiceOfTheStarship.h
new file mode 100644
index 0000000..b1c8008
--- /dev/null
+++ b/plugins/LV2/src/VoiceOfTheStarship/VoiceOfTheStarship.h
@@ -0,0 +1,55 @@
+#ifndef __VoiceOfTheStarship_H
+#define __VoiceOfTheStarship_H
+
+#include <lv2plugin.h>
+
+class VoiceOfTheStarship : public LV2Plugin<2> {
+public:
+ VoiceOfTheStarship(double rate);
+
+ void activate();
+ void run(uint32_t num_samples);
+
+ static constexpr const char * URI = "https://www.airwindows.com/voiceofthestarship";
+
+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 noiseAL;
+ double noiseBL;
+ double noiseCL;
+ double noiseAR;
+ double noiseBR;
+ double noiseCR;
+
+ int position;
+ int quadratic;
+ bool flipL;
+ bool flipR;
+ bool filterflip;
+
+ double bL[11];
+ double bR[11];
+
+ double f[11];
+
+ int lastAlgorithm;
+
+ long double fpNShapeL;
+ long double fpNShapeR;
+ //default stuff
+
+ float A;
+ float B;
+};
+
+#endif
diff --git a/plugins/LV2/src/VoiceOfTheStarship/VoiceOfTheStarship.ttl b/plugins/LV2/src/VoiceOfTheStarship/VoiceOfTheStarship.ttl
new file mode 100644
index 0000000..b2a990b
--- /dev/null
+++ b/plugins/LV2/src/VoiceOfTheStarship/VoiceOfTheStarship.ttl
@@ -0,0 +1,52 @@
+# Airwindows VoiceOfTheStarship 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/voiceofthestarship>
+ 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 "Filter" ;
+ 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 "Algrthm" ;
+ 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/VoiceOfTheStarship/manifest.ttl.in b/plugins/LV2/src/VoiceOfTheStarship/manifest.ttl.in
new file mode 100644
index 0000000..d11695b
--- /dev/null
+++ b/plugins/LV2/src/VoiceOfTheStarship/manifest.ttl.in
@@ -0,0 +1,6 @@
+airwindows:voiceofthestarship
+ a lv2:Plugin ;
+ doap:name "Airwindows VoiceOfTheStarship" ;
+ doap:license <http://opensource.org/licenses/mit> ;
+ lv2:binary <VoiceOfTheStarship@CMAKE_SHARED_LIBRARY_SUFFIX@> ;
+ rdfs:seeAlso <VoiceOfTheStarship.ttl> .
diff --git a/plugins/LV2/src/VoiceTrick/VoiceTrick.cpp b/plugins/LV2/src/VoiceTrick/VoiceTrick.cpp
new file mode 100644
index 0000000..4ad9dc9
--- /dev/null
+++ b/plugins/LV2/src/VoiceTrick/VoiceTrick.cpp
@@ -0,0 +1,42 @@
+#include "VoiceTrick.h"
+#include <iostream>
+#include <lv2wrapper.h>
+
+VoiceTrick::VoiceTrick(double rate)
+ : LV2Plugin(rate)
+{
+}
+
+void VoiceTrick::activate()
+{
+ A = 1.0;
+ iirLowpassA = 0.0;
+ iirLowpassB = 0.0;
+ iirLowpassC = 0.0;
+ iirLowpassD = 0.0;
+ iirLowpassE = 0.0;
+ iirLowpassF = 0.0;
+ count = 0;
+ lowpassChase = 0.0;
+ lowpassAmount = 1.0;
+ lastLowpass = 1000.0;
+ fpd = 17;
+ //this is reset: values being initialized only once. Startup values, whatever they are.
+
+}
+
+void VoiceTrick::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/VoiceTrick/VoiceTrickProc.cpp"
+
+// Create the LV2Wrapper and register the plugin
+LV2Wrapper<VoiceTrick> plugin;
diff --git a/plugins/LV2/src/VoiceTrick/VoiceTrick.h b/plugins/LV2/src/VoiceTrick/VoiceTrick.h
new file mode 100644
index 0000000..0ad1979
--- /dev/null
+++ b/plugins/LV2/src/VoiceTrick/VoiceTrick.h
@@ -0,0 +1,42 @@
+#ifndef __VoiceTrick_H
+#define __VoiceTrick_H
+
+#include <lv2plugin.h>
+
+class VoiceTrick : public LV2Plugin<1> {
+public:
+ VoiceTrick(double rate);
+
+ void activate();
+ void run(uint32_t num_samples);
+
+ static constexpr const char * URI = "https://www.airwindows.com/voicetrick";
+
+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
+ double iirLowpassA;
+ double iirLowpassB;
+ double iirLowpassC;
+ double iirLowpassD;
+ double iirLowpassE;
+ double iirLowpassF;
+ int count;
+ double lowpassChase;
+ double lowpassAmount;
+ double lastLowpass;
+ float A;
+};
+
+#endif
diff --git a/plugins/LV2/src/VoiceTrick/VoiceTrick.ttl b/plugins/LV2/src/VoiceTrick/VoiceTrick.ttl
new file mode 100644
index 0000000..d0ddae8
--- /dev/null
+++ b/plugins/LV2/src/VoiceTrick/VoiceTrick.ttl
@@ -0,0 +1,44 @@
+# Airwindows VoiceTrick 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/voicetrick>
+ 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 "Tone" ;
+ 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/VoiceTrick/manifest.ttl.in b/plugins/LV2/src/VoiceTrick/manifest.ttl.in
new file mode 100644
index 0000000..0e13f8b
--- /dev/null
+++ b/plugins/LV2/src/VoiceTrick/manifest.ttl.in
@@ -0,0 +1,6 @@
+airwindows:voicetrick
+ a lv2:Plugin ;
+ doap:name "Airwindows VoiceTrick" ;
+ doap:license <http://opensource.org/licenses/mit> ;
+ lv2:binary <VoiceTrick@CMAKE_SHARED_LIBRARY_SUFFIX@> ;
+ rdfs:seeAlso <VoiceTrick.ttl> .
diff --git a/plugins/LV2/src/Wider/Wider.cpp b/plugins/LV2/src/Wider/Wider.cpp
new file mode 100644
index 0000000..86c761c
--- /dev/null
+++ b/plugins/LV2/src/Wider/Wider.cpp
@@ -0,0 +1,39 @@
+#include "Wider.h"
+#include <iostream>
+#include <lv2wrapper.h>
+
+Wider::Wider(double rate)
+ : LV2Plugin(rate)
+{
+}
+
+void Wider::activate()
+{
+ A = 0.5;
+ B = 0.5;
+ C = 1.0;
+ for(int fcount = 0; fcount < 4098; fcount++) {p[fcount] = 0.0;}
+ count = 0;
+ fpNShapeL = 0.0;
+ fpNShapeR = 0.0;
+ //this is reset: values being initialized only once. Startup values, whatever they are.
+
+}
+
+void Wider::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/Wider/WiderProc.cpp"
+
+// Create the LV2Wrapper and register the plugin
+LV2Wrapper<Wider> plugin;
diff --git a/plugins/LV2/src/Wider/Wider.h b/plugins/LV2/src/Wider/Wider.h
new file mode 100644
index 0000000..4869c7d
--- /dev/null
+++ b/plugins/LV2/src/Wider/Wider.h
@@ -0,0 +1,39 @@
+#ifndef __Wider_H
+#define __Wider_H
+
+#include <lv2plugin.h>
+
+class Wider : public LV2Plugin<3> {
+public:
+ Wider(double rate);
+
+ void activate();
+ void run(uint32_t num_samples);
+
+ static constexpr const char * URI = "https://www.airwindows.com/wider";
+
+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 p[4099];
+ int count;
+
+ float A;
+ float B;
+ float C;
+};
+
+#endif
diff --git a/plugins/LV2/src/Wider/Wider.ttl b/plugins/LV2/src/Wider/Wider.ttl
new file mode 100644
index 0000000..cc0e0fc
--- /dev/null
+++ b/plugins/LV2/src/Wider/Wider.ttl
@@ -0,0 +1,60 @@
+# Airwindows Wider 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/wider>
+ 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 "Width" ;
+ 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 "Center" ;
+ 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/Wider/manifest.ttl.in b/plugins/LV2/src/Wider/manifest.ttl.in
new file mode 100644
index 0000000..393d5e8
--- /dev/null
+++ b/plugins/LV2/src/Wider/manifest.ttl.in
@@ -0,0 +1,6 @@
+airwindows:wider
+ a lv2:Plugin ;
+ doap:name "Airwindows Wider" ;
+ doap:license <http://opensource.org/licenses/mit> ;
+ lv2:binary <Wider@CMAKE_SHARED_LIBRARY_SUFFIX@> ;
+ rdfs:seeAlso <Wider.ttl> .
diff --git a/plugins/LV2/src/uLawDecode/manifest.ttl.in b/plugins/LV2/src/uLawDecode/manifest.ttl.in
new file mode 100644
index 0000000..f122d73
--- /dev/null
+++ b/plugins/LV2/src/uLawDecode/manifest.ttl.in
@@ -0,0 +1,6 @@
+airwindows:ulawdecode
+ a lv2:Plugin ;
+ doap:name "Airwindows uLawDecode" ;
+ doap:license <http://opensource.org/licenses/mit> ;
+ lv2:binary <uLawDecode@CMAKE_SHARED_LIBRARY_SUFFIX@> ;
+ rdfs:seeAlso <uLawDecode.ttl> .
diff --git a/plugins/LV2/src/uLawDecode/uLawDecode.cpp b/plugins/LV2/src/uLawDecode/uLawDecode.cpp
new file mode 100644
index 0000000..13629b8
--- /dev/null
+++ b/plugins/LV2/src/uLawDecode/uLawDecode.cpp
@@ -0,0 +1,35 @@
+#include "uLawDecode.h"
+#include <iostream>
+#include <lv2wrapper.h>
+
+uLawDecode::uLawDecode(double rate)
+ : LV2Plugin(rate)
+{
+}
+
+void uLawDecode::activate()
+{
+ A = 1.0;
+ B = 1.0;
+ fpNShapeL = 0.0;
+ fpNShapeR = 0.0;
+ //this is reset: values being initialized only once. Startup values, whatever they are.
+
+}
+
+void uLawDecode::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/uLawDecode/uLawDecodeProc.cpp"
+
+// Create the LV2Wrapper and register the plugin
+LV2Wrapper<uLawDecode> plugin;
diff --git a/plugins/LV2/src/uLawDecode/uLawDecode.h b/plugins/LV2/src/uLawDecode/uLawDecode.h
new file mode 100644
index 0000000..dc6ff5d
--- /dev/null
+++ b/plugins/LV2/src/uLawDecode/uLawDecode.h
@@ -0,0 +1,35 @@
+#ifndef __uLawDecode_H
+#define __uLawDecode_H
+
+#include <lv2plugin.h>
+
+class uLawDecode : public LV2Plugin<2> {
+public:
+ uLawDecode(double rate);
+
+ void activate();
+ void run(uint32_t num_samples);
+
+ static constexpr const char * URI = "https://www.airwindows.com/ulawdecode";
+
+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
+
+ float A;
+ float B;
+};
+
+#endif
diff --git a/plugins/LV2/src/uLawDecode/uLawDecode.ttl b/plugins/LV2/src/uLawDecode/uLawDecode.ttl
new file mode 100644
index 0000000..5eddebf
--- /dev/null
+++ b/plugins/LV2/src/uLawDecode/uLawDecode.ttl
@@ -0,0 +1,52 @@
+# Airwindows uLawDecode 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/ulawdecode>
+ 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 "Gain" ;
+ 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/uLawEncode/manifest.ttl.in b/plugins/LV2/src/uLawEncode/manifest.ttl.in
new file mode 100644
index 0000000..8a2b180
--- /dev/null
+++ b/plugins/LV2/src/uLawEncode/manifest.ttl.in
@@ -0,0 +1,6 @@
+airwindows:ulawencode
+ a lv2:Plugin ;
+ doap:name "Airwindows uLawEncode" ;
+ doap:license <http://opensource.org/licenses/mit> ;
+ lv2:binary <uLawEncode@CMAKE_SHARED_LIBRARY_SUFFIX@> ;
+ rdfs:seeAlso <uLawEncode.ttl> .
diff --git a/plugins/LV2/src/uLawEncode/uLawEncode.cpp b/plugins/LV2/src/uLawEncode/uLawEncode.cpp
new file mode 100644
index 0000000..2f07880
--- /dev/null
+++ b/plugins/LV2/src/uLawEncode/uLawEncode.cpp
@@ -0,0 +1,35 @@
+#include "uLawEncode.h"
+#include <iostream>
+#include <lv2wrapper.h>
+
+uLawEncode::uLawEncode(double rate)
+ : LV2Plugin(rate)
+{
+}
+
+void uLawEncode::activate()
+{
+ A = 1.0;
+ B = 1.0;
+ fpNShapeL = 0.0;
+ fpNShapeR = 0.0;
+ //this is reset: values being initialized only once. Startup values, whatever they are.
+
+}
+
+void uLawEncode::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/uLawEncode/uLawEncodeProc.cpp"
+
+// Create the LV2Wrapper and register the plugin
+LV2Wrapper<uLawEncode> plugin;
diff --git a/plugins/LV2/src/uLawEncode/uLawEncode.h b/plugins/LV2/src/uLawEncode/uLawEncode.h
new file mode 100644
index 0000000..fa8d430
--- /dev/null
+++ b/plugins/LV2/src/uLawEncode/uLawEncode.h
@@ -0,0 +1,35 @@
+#ifndef __uLawEncode_H
+#define __uLawEncode_H
+
+#include <lv2plugin.h>
+
+class uLawEncode : public LV2Plugin<2> {
+public:
+ uLawEncode(double rate);
+
+ void activate();
+ void run(uint32_t num_samples);
+
+ static constexpr const char * URI = "https://www.airwindows.com/ulawencode";
+
+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
+
+ float A;
+ float B;
+};
+
+#endif
diff --git a/plugins/LV2/src/uLawEncode/uLawEncode.ttl b/plugins/LV2/src/uLawEncode/uLawEncode.ttl
new file mode 100644
index 0000000..5623ac9
--- /dev/null
+++ b/plugins/LV2/src/uLawEncode/uLawEncode.ttl
@@ -0,0 +1,52 @@
+# Airwindows uLawEncode 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/ulawencode>
+ 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 "Gain" ;
+ 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" ;
+ ] .