diff options
Diffstat (limited to 'plugins/LV2/src/Air/Air.cpp')
-rw-r--r-- | plugins/LV2/src/Air/Air.cpp | 94 |
1 files changed, 94 insertions, 0 deletions
diff --git a/plugins/LV2/src/Air/Air.cpp b/plugins/LV2/src/Air/Air.cpp new file mode 100644 index 0000000..0783317 --- /dev/null +++ b/plugins/LV2/src/Air/Air.cpp @@ -0,0 +1,94 @@ +#include "Air.h" +#include <iostream> +#include <lv2wrapper.h> + +namespace { + +enum class PortIndex : uint32_t { + TAP22, + TAP15, + TAP11, + FILTERS_Q, + OUTPUT, + DRY_WET, + IN_L, + IN_R, + OUT_L, + OUT_R, +}; + +} // anon namespace + +Air::Air(double rate) + : LV2Plugin(rate) +{ +} + +void Air::connect_port(uint32_t port, void * data) +{ + switch (static_cast<PortIndex>(port)) { + case PortIndex::TAP22: + tap22 = static_cast<const float *>(data); + break; + + case PortIndex::TAP15: + tap15 = static_cast<const float *>(data); + break; + + case PortIndex::TAP11: + tap11 = static_cast<const float *>(data); + break; + + case PortIndex::FILTERS_Q: + filters_q = static_cast<const float *>(data); + break; + + case PortIndex::OUTPUT: + out_level = static_cast<const float *>(data); + break; + + case PortIndex::DRY_WET: + dry_wet = 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 Air::run(uint32_t num_samples) +{ + A = *tap22; + B = *tap15; + C = *tap11; + D = *filters_q; + E = *out_level; + F = *dry_wet; + + processReplacing(const_cast<float **>(in), out, num_samples); +} + +// +// Include the processing code from the VST version. +// +#include <cmath> +#include "../../../LinuxVST/src/Air/AirProc.cpp" + +// Create the LV2Wrapper and register the plugin +LV2Wrapper<Air> air; |