diff options
Diffstat (limited to 'plugins/LV2/src/ADT/ADT.cpp')
-rw-r--r-- | plugins/LV2/src/ADT/ADT.cpp | 94 |
1 files changed, 94 insertions, 0 deletions
diff --git a/plugins/LV2/src/ADT/ADT.cpp b/plugins/LV2/src/ADT/ADT.cpp new file mode 100644 index 0000000..66423b2 --- /dev/null +++ b/plugins/LV2/src/ADT/ADT.cpp @@ -0,0 +1,94 @@ +#include "ADT.h" +#include <iostream> +#include <lv2wrapper.h> + +namespace { + +enum class PortIndex : uint32_t { + HEADRM, + A_DELAY, + A_LEVEL, + B_DELAY, + B_LEVEL, + OUTPUT, + IN_L, + IN_R, + OUT_L, + OUT_R, +}; + +} // anon namespace + +ADT::ADT(double rate) + : LV2Plugin(rate) +{ +} + +void ADT::connect_port(uint32_t port, void * data) +{ + switch (static_cast<PortIndex>(port)) { + case PortIndex::HEADRM: + headroom = static_cast<const float *>(data); + break; + + case PortIndex::A_DELAY: + a_delay = static_cast<const float *>(data); + break; + + case PortIndex::A_LEVEL: + a_level = static_cast<const float *>(data); + break; + + case PortIndex::B_DELAY: + b_delay = static_cast<const float *>(data); + break; + + case PortIndex::B_LEVEL: + b_level = static_cast<const float *>(data); + break; + + case PortIndex::OUTPUT: + out_level = static_cast<const float *>(data); + break; + + case PortIndex::IN_L: + in[0] = static_cast<const float *>(data); + break; + + case PortIndex::IN_R: + in[1] = static_cast<const float *>(data); + break; + + case PortIndex::OUT_L: + out[0] = static_cast<float *>(data); + break; + + case PortIndex::OUT_R: + out[1] = static_cast<float *>(data); + break; + + default: + std::cerr << "Invalid port " << port << ": ignoring." << std::endl; + } +} + +void ADT::run(uint32_t num_samples) +{ + A = *headroom; + B = *a_delay; + C = *a_level; + D = *b_delay; + E = *b_level; + F = *out_level; + + processReplacing(const_cast<float **>(in), out, num_samples); +} + +// +// Include the processing code from the VST version. +// +#include <cmath> +#include "../../../LinuxVST/src/ADT/ADTProc.cpp" + +// Create the LV2Wrapper and register the plugin +LV2Wrapper<ADT> accel; |