From c19599e7009afc1d6e859a0129ae9fc22427fb98 Mon Sep 17 00:00:00 2001 From: Harald Eilertsen Date: Sun, 2 Aug 2020 22:27:04 +0200 Subject: LV2: Port BassKit plugin. There's an issue, where it seems the plugin will only produce noise if it's active when starting playback. Enabling it after playback has started seems to work fine. This is puzzling and will have to be investigated further at some time. --- plugins/LV2/CMakeLists.txt | 2 +- plugins/LV2/src/BassKit/BassKit.cpp | 28 +++++++++++ plugins/LV2/src/BassKit/BassKit.h | 85 +++++++++++++++++++++++++++++++++ plugins/LV2/src/BassKit/BassKit.ttl | 68 ++++++++++++++++++++++++++ plugins/LV2/src/BassKit/manifest.ttl.in | 12 +++++ 5 files changed, 194 insertions(+), 1 deletion(-) create mode 100644 plugins/LV2/src/BassKit/BassKit.cpp create mode 100644 plugins/LV2/src/BassKit/BassKit.h create mode 100644 plugins/LV2/src/BassKit/BassKit.ttl create mode 100644 plugins/LV2/src/BassKit/manifest.ttl.in diff --git a/plugins/LV2/CMakeLists.txt b/plugins/LV2/CMakeLists.txt index 3993e3b..cfc15da 100755 --- a/plugins/LV2/CMakeLists.txt +++ b/plugins/LV2/CMakeLists.txt @@ -22,7 +22,7 @@ add_airwindows_plugin(Aura) add_airwindows_plugin(Average) add_airwindows_plugin(AverMatrix) add_airwindows_plugin(BassDrive) -# add_airwindows_plugin(BassKit) +add_airwindows_plugin(BassKit) # add_airwindows_plugin(Baxandall) # add_airwindows_plugin(Beam) # add_airwindows_plugin(Biquad) diff --git a/plugins/LV2/src/BassKit/BassKit.cpp b/plugins/LV2/src/BassKit/BassKit.cpp new file mode 100644 index 0000000..d3a2896 --- /dev/null +++ b/plugins/LV2/src/BassKit/BassKit.cpp @@ -0,0 +1,28 @@ +#include "BassKit.h" +#include +#include + +BassKit::BassKit(double rate) + : LV2Plugin(rate) + , oscGate(1.0) +{ +} + +void BassKit::run(uint32_t num_samples) +{ + A = *params[0]; + B = *params[1]; + C = *params[2]; + D = *params[3]; + + processReplacing(const_cast(in), out, num_samples); +} + +// +// Include the processing code from the VST version. +// +#include +#include "../../../LinuxVST/src/BassKit/BassKitProc.cpp" + +// Create the LV2Wrapper and register the plugin +LV2Wrapper plugin; diff --git a/plugins/LV2/src/BassKit/BassKit.h b/plugins/LV2/src/BassKit/BassKit.h new file mode 100644 index 0000000..a5d5d12 --- /dev/null +++ b/plugins/LV2/src/BassKit/BassKit.h @@ -0,0 +1,85 @@ +#ifndef __BassKit_H +#define __BassKit_H + +#include + +class BassKit : public LV2Plugin<4> { +public: + BassKit(double rate); + + void run(uint32_t num_samples); + + static constexpr const char * URI = "https://www.airwindows.com/basskit"; + +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 iirDriveSampleA; + double iirDriveSampleB; + double iirDriveSampleC; + double iirDriveSampleD; + double iirDriveSampleE; + double iirDriveSampleF; + bool flip; //drive things + + int bflip; + bool WasNegative; + bool SubOctave; + double iirHeadBumpA; + double iirHeadBumpB; + double iirHeadBumpC; + + double iirSubBumpA; + double iirSubBumpB; + double iirSubBumpC; + + double lastHeadBump; + double lastSubBump; + + double iirSampleA; + double iirSampleB; + double iirSampleC; + double iirSampleD; + double iirSampleE; + double iirSampleF; + double iirSampleG; + double iirSampleH; + double iirSampleI; + double iirSampleJ; + double iirSampleK; + double iirSampleL; + double iirSampleM; + double iirSampleN; + double iirSampleO; + double iirSampleP; + double iirSampleQ; + double iirSampleR; + double iirSampleS; + double iirSampleT; + double iirSampleU; + double iirSampleV; + double iirSampleW; + double iirSampleX; + double iirSampleY; + double iirSampleZ; + double oscGate; + + long double fpNShapeL; + long double fpNShapeR; + //default stuff + + float A; + float B; + float C; + float D; +}; + +#endif diff --git a/plugins/LV2/src/BassKit/BassKit.ttl b/plugins/LV2/src/BassKit/BassKit.ttl new file mode 100644 index 0000000..3a0c62f --- /dev/null +++ b/plugins/LV2/src/BassKit/BassKit.ttl @@ -0,0 +1,68 @@ +# Airwindows BassKit plugin description + +@prefix lv2: . +@prefix rdf: . +@prefix rdfs: . +@prefix units: . + + + a lv2:Plugin , + lv2:EffectsPlugin ; + lv2:project ; + + 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 "Drive" ; + 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 "Voicing" ; + lv2:default 0.5 ; + lv2:minimum 0.0 ; + lv2:maximum 1.0 ; + ] , [ + a lv2:InputPort , lv2:ControlPort ; + lv2:index 2 ; + lv2:symbol "C" ; + lv2:name "Bass Inv/Out" ; + 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 "Sub Inv/Out" ; + 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/BassKit/manifest.ttl.in b/plugins/LV2/src/BassKit/manifest.ttl.in new file mode 100644 index 0000000..752eef7 --- /dev/null +++ b/plugins/LV2/src/BassKit/manifest.ttl.in @@ -0,0 +1,12 @@ +# LV2 Plugin manifest for Airwindows BassKit plugin + +@prefix doap: . +@prefix lv2: . +@prefix rdfs: . + + + a lv2:Plugin ; + doap:name "Airwindows BassKit" ; + doap:license ; + lv2:binary ; + rdfs:seeAlso . -- cgit v1.2.3