From ed1c33f8a60b2e34c78473c2c1392fb3b809e524 Mon Sep 17 00:00:00 2001 From: Harald Eilertsen Date: Thu, 16 Jul 2020 23:08:11 +0200 Subject: LV2: Move actual processing into Acceleration class. --- plugins/LV2/src/Acceleration/Acceleration.cpp | 84 ++++++++++++++++----------- 1 file changed, 50 insertions(+), 34 deletions(-) diff --git a/plugins/LV2/src/Acceleration/Acceleration.cpp b/plugins/LV2/src/Acceleration/Acceleration.cpp index 669df75..9be24cd 100644 --- a/plugins/LV2/src/Acceleration/Acceleration.cpp +++ b/plugins/LV2/src/Acceleration/Acceleration.cpp @@ -17,6 +17,53 @@ enum PortIndex { class Acceleration { public: + Acceleration(double rate) + : rate(rate) + { + } + + void connect_port(uint32_t port, void * data) + { + switch (port) { + case ACCELERATION_LIMIT: + limit = (const float *) data; + break; + + case ACCELERATION_DRYWET: + drywet = (const float *) data; + break; + + case ACCELERATION_IN_L: + in[0] = (const float *) data; + break; + + case ACCELERATION_IN_R: + in[1] = (const float *) data; + break; + + case ACCELERATION_OUT_L: + out[0] = (float *) data; + break; + + case ACCELERATION_OUT_R: + out[1] = (float *) data; + break; + + default: + std::cerr << "Invalid port " << port << ": ignoring." << std::endl; + } + } + + void run(uint32_t num_samples) + { + for (auto i = 0u; i < num_samples; i++) { + *out[0]++ = *in[0]++ * *limit; + *out[1]++ = *in[1]++ * *limit; + } + } + +private: + double rate; const float * limit; const float * drywet; const float * in[2]; @@ -29,7 +76,7 @@ LV2_Handle instantiate( const char * path, const LV2_Feature * const * features) { - return new Acceleration{}; + return new Acceleration{rate}; } void connect_port( @@ -38,35 +85,7 @@ void connect_port( void * data) { auto accel = static_cast(instance); - - switch (port) { - case ACCELERATION_LIMIT: - accel->limit = (const float *) data; - break; - - case ACCELERATION_DRYWET: - accel->limit = (const float *) data; - break; - - case ACCELERATION_IN_L: - accel->in[0] = (const float *) data; - break; - - case ACCELERATION_IN_R: - accel->in[1] = (const float *) data; - break; - - case ACCELERATION_OUT_L: - accel->out[0] = (float *) data; - break; - - case ACCELERATION_OUT_R: - accel->out[1] = (float *) data; - break; - - default: - std::cerr << "Invalid port " << port << ": ignoring." << std::endl; - } + accel->connect_port(port, data); } void activate(LV2_Handle instance) @@ -76,10 +95,7 @@ void activate(LV2_Handle instance) void run(LV2_Handle instance, uint32_t num_samples) { auto accel = static_cast(instance); - for (auto i = 0u; i < num_samples; i++) { - *accel->out[0]++ = *accel->in[0]++; - *accel->out[1]++ = *accel->in[1]++; - } + accel->run(num_samples); } void deactivate(LV2_Handle) -- cgit v1.2.3