#include "lv2/core/lv2.h" #include namespace { const char * ACCELERATION_URI = "https://www.airwindows.com/acceleration"; enum PortIndex { ACCELERATION_LIMIT = 0, ACCELERATION_DRYWET = 1, ACCELERATION_IN = 2, ACCELERATION_OUT = 3 }; struct acceleration { const float * limit; const float * drywet; const float * in; float * out; }; LV2_Handle instantiate( const LV2_Descriptor * d, double rate, const char * path, const LV2_Feature * const * features) { return calloc(1, sizeof(acceleration)); } void connect_port( LV2_Handle instance, uint32_t port, void * data) { auto accel = (acceleration *) instance; switch (port) { case ACCELERATION_LIMIT: accel->limit = (const float *) data; break; case ACCELERATION_DRYWET: accel->limit = (const float *) data; break; case ACCELERATION_IN: accel->in = (const float *) data; break; case ACCELERATION_OUT: accel->out = (float *) data; break; default: std::cerr << "Invalid port " << port << ": ignoring." << std::endl; } } void activate(LV2_Handle instance) { } void run(LV2_Handle instance, uint32_t num_samples) { auto accel = (acceleration *) instance; for (auto i = 0u; i < num_samples; i++) { *accel->out++ = *accel->in++; } } void deactivate(LV2_Handle) { } void destroy(LV2_Handle instance) { free(instance); } const void * extension_data(const char * uri) { return nullptr; } const LV2_Descriptor descriptor = { ACCELERATION_URI, instantiate, connect_port, activate, run, deactivate, destroy, extension_data }; } // anon namespace LV2_SYMBOL_EXPORT const LV2_Descriptor * lv2_descriptor(uint32_t idx) { if (idx == 0) return &descriptor; return nullptr; }