/* * Copyright (c) 2015-2016 Hanspeter Portner (dev@open-music-kontrollers.ch) * * This is free software: you can redistribute it and/or modify * it under the terms of the Artistic License 2.0 as published by * The Perl Foundation. * * This source is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * Artistic License 2.0 for more details. * * You should have received a copy of the Artistic License 2.0 * along the source as a COPYING file. If not, obtain it from * http://www.perlfoundation.org/artistic_license_2_0. */ #include #include #include #include #include #include #include #include #include typedef struct _plughandle_t plughandle_t; #define MAX_PORTS 8 struct _plughandle_t { const float *input [MAX_PORTS]; float *cv_out [MAX_PORTS]; }; static LV2_Handle instantiate(const LV2_Descriptor* descriptor, double rate, const char *bundle_path, const LV2_Feature *const *features) { plughandle_t *handle = calloc(1, sizeof(plughandle_t)); if(!handle) return NULL; mlock(handle, sizeof(plughandle_t)); return handle; } static void connect_port(LV2_Handle instance, uint32_t port, void *data) { plughandle_t *handle = instance; switch(port) { case 0: case 1: case 2: case 3: case 4: case 5: case 6: case 7: handle->input[port] = (const float *)data; break; case 8: case 9: case 10: case 11: case 12: case 13: case 14: case 15: handle->cv_out[port-8] = (float *)data; break; default: break; } } static void activate(LV2_Handle instance) { //plughandle_t *handle = instance; // nothing } __realtime static void run(LV2_Handle instance, uint32_t nsamples) { plughandle_t *handle = instance; for(int i=0; icv_out[i][f] = *handle->input[i]; } } static void deactivate(LV2_Handle instance) { //plughandle_t *handle = instance; // nothing } static void cleanup(LV2_Handle instance) { plughandle_t *handle = instance; munlock(handle, sizeof(plughandle_t)); free(handle); } static const void* extension_data(const char* uri) { return NULL; } const LV2_Descriptor synthpod_control2cv = { .URI = SYNTHPOD_CONTROL2CV_URI, .instantiate = instantiate, .connect_port = connect_port, .activate = activate, .run = run, .deactivate = deactivate, .cleanup = cleanup, .extension_data = extension_data };