/*---------------------------------------------------------------------------------*/ /* Includes */ /*---------------------------------------------------------------------------------*/ #ifndef _LV2_PLUGIN_H_ #define _LV2_PLUGIN_H_ #include #include "lv2/lv2plug.in/ns/ext/atom/forge.h" // util includes atom.h #include "lv2/lv2plug.in/ns/ext/atom/util.h" #include "lv2/lv2plug.in/ns/lv2core/lv2.h" #include "lv2/lv2plug.in/ns/ext/urid/urid.h" #include "lv2/lv2plug.in/ns/ext/state/state.h" /*----------------------------------------------------------------------------*/ /* Global definitions */ /*----------------------------------------------------------------------------*/ // lv2 stuff #define DRD_DRUMMER_URI "http://rx3.net/AlkorZ3/drummer" #define DRD_GAIN_MIN -60.0f #define DRD_GAIN_MAX 6.0f typedef enum { DRD_LV2_CONTROL = 0, DRD_LV2_MASTER_LEFT, DRD_LV2_MASTER_RIGHT, DRD_LV2_LEFT_00, DRD_LV2_RIGHT_00, DRD_LV2_LEFT_01, DRD_LV2_RIGHT_01, DRD_LV2_LEFT_02, DRD_LV2_RIGHT_02, DRD_LV2_LEFT_03, DRD_LV2_RIGHT_03, DRD_LV2_LEFT_04, DRD_LV2_RIGHT_04, DRD_LV2_LEFT_05, DRD_LV2_RIGHT_05, DRD_LV2_LEFT_06, DRD_LV2_RIGHT_06, DRD_LV2_LEFT_07, DRD_LV2_RIGHT_07, DRD_LV2_LEFT_08, DRD_LV2_RIGHT_08, DRD_LV2_LEFT_09, DRD_LV2_RIGHT_09, DRD_LV2_LEFT_10, DRD_LV2_RIGHT_10, DRD_LV2_LEFT_11, DRD_LV2_RIGHT_11, DRD_LV2_LEFT_12, DRD_LV2_RIGHT_12, DRD_LV2_LEFT_13, DRD_LV2_RIGHT_13, DRD_LV2_LEFT_14, DRD_LV2_RIGHT_14, DRD_LV2_LEFT_15, DRD_LV2_RIGHT_15, DRD_LV2_LEFT_16, DRD_LV2_RIGHT_16, DRD_LV2_LEFT_17, DRD_LV2_RIGHT_17, DRD_LV2_LEFT_18, DRD_LV2_RIGHT_18, DRD_LV2_LEFT_19, DRD_LV2_RIGHT_19, DRD_LV2_LEFT_20, DRD_LV2_RIGHT_20, DRD_LV2_LEFT_21, DRD_LV2_RIGHT_21, DRD_LV2_LEFT_22, DRD_LV2_RIGHT_22, DRD_LV2_LEFT_23, DRD_LV2_RIGHT_23, DRD_LV2_LEFT_24, DRD_LV2_RIGHT_24, DRD_LV2_LEFT_25, DRD_LV2_RIGHT_25, DRD_LV2_LEFT_26, DRD_LV2_RIGHT_26, DRD_LV2_LEFT_27, DRD_LV2_RIGHT_27, DRD_LV2_LEFT_28, DRD_LV2_RIGHT_28, DRD_LV2_LEFT_29, DRD_LV2_RIGHT_29, DRD_LV2_LEFT_30, DRD_LV2_RIGHT_30, DRD_LV2_LEFT_31, DRD_LV2_RIGHT_31, DRD_LV2_BASENOTE, DRD_LV2_GAIN_ONE, DRD_LV2_GAIN_TWO, DRD_LV2_GAIN_THREE, DRD_LV2_GAIN_FOUR, DRD_LV2_GAIN_FIVE, DRD_LV2_GAIN_SIX, DRD_LV2_GAIN_SEVEN, DRD_LV2_GAIN_EIGHT, DRD_LV2_GAIN_NINE, DRD_LV2_GAIN_TEN, DRD_LV2_GAIN_ELEVEN, DRD_LV2_GAIN_TWELVE, DRD_LV2_GAIN_THIRTEEN, DRD_LV2_GAIN_FOURTEEN, DRD_LV2_GAIN_FIFTEEN, DRD_LV2_GAIN_SIXTEEN, DRD_LV2_GAIN_SEVENTEEN, DRD_LV2_GAIN_EIGHTEEN, DRD_LV2_GAIN_NINETEEN, DRD_LV2_GAIN_TWENTY, DRD_LV2_GAIN_TWENTYONE, DRD_LV2_GAIN_TWENTYTWO, DRD_LV2_GAIN_TWENTYTHREE, DRD_LV2_GAIN_TWENTYFOUR, DRD_LV2_GAIN_TWENTYFIVE, DRD_LV2_GAIN_TWENTYSIX, DRD_LV2_GAIN_TWENTYSEVEN, DRD_LV2_GAIN_TWENTYEIGHT, DRD_LV2_GAIN_TWENTYNINE, DRD_LV2_GAIN_THIRTY, DRD_LV2_GAIN_THIRTYONE, DRD_LV2_GAIN_THIRTYTWO, DRD_LV2_PAN_ONE, DRD_LV2_PAN_TWO, DRD_LV2_PAN_THREE, DRD_LV2_PAN_FOUR, DRD_LV2_PAN_FIVE, DRD_LV2_PAN_SIX, DRD_LV2_PAN_SEVEN, DRD_LV2_PAN_EIGHT, DRD_LV2_PAN_NINE, DRD_LV2_PAN_TEN, DRD_LV2_PAN_ELEVEN, DRD_LV2_PAN_TWELVE, DRD_LV2_PAN_THIRTEEN, DRD_LV2_PAN_FOURTEEN, DRD_LV2_PAN_FIFTEEN, DRD_LV2_PAN_SIXTEEN, DRD_LV2_PAN_SEVENTEEN, DRD_LV2_PAN_EIGHTEEN, DRD_LV2_PAN_NINETEEN, DRD_LV2_PAN_TWENTY, DRD_LV2_PAN_TWENTYONE, DRD_LV2_PAN_TWENTYTWO, DRD_LV2_PAN_TWENTYTHREE, DRD_LV2_PAN_TWENTYFOUR, DRD_LV2_PAN_TWENTYFIVE, DRD_LV2_PAN_TWENTYSIX, DRD_LV2_PAN_TWENTYSEVEN, DRD_LV2_PAN_TWENTYEIGHT, DRD_LV2_PAN_TWENTYNINE, DRD_LV2_PAN_THIRTY, DRD_LV2_PAN_THIRTYONE, DRD_LV2_PAN_THIRTYTWO, DRD_LV2_CORE_EVENT, DRD_LV2_NUM_PORTS } DRT_Port_Index; typedef struct { LV2_URID midi_event; LV2_URID ui_msg; LV2_URID kit_path; LV2_URID atom_eventTransfer; LV2_URID atom_object; LV2_URID string_urid; LV2_URID bool_urid; LV2_URID int_urid; LV2_URID get_state; LV2_URID midi_info; LV2_URID sample_trigger; LV2_URID velocity_toggle; LV2_URID note_off_toggle; LV2_URID channel_nb; LV2_URID zero_position; LV2_URID sample_add; LV2_URID sample_remove; } DRT_Drummer_URIS; typedef struct { // Ports float *Master_Left; float *Master_Right; float **Left; float **Right; LV2_Atom_Sequence *Control_Port; LV2_Atom_Sequence *Core_Event_Port; LV2_Atom_Forge Forge; } DRT_LV2_Base; typedef struct { // Ports float *master_left; float *master_right; float **left; float **right; LV2_Atom_Sequence *control_port; LV2_Atom_Sequence *core_event_port; LV2_Atom_Forge forge; // params int channel; bool ignore_velocity; bool ignore_note_off; int channel_nb; int zero_position; float **gains; float **pans; float *baseNote; double rate; // URIs LV2_URID_Map *map; drmr_uris uris; // Kit info char *current_path; char **request_buf; int curReq; // Samples drmr_sample *samples; uint8_t num_samples; // loading thread stuff pthread_mutex_t load_mutex; pthread_cond_t load_cond; pthread_t load_thread; } DrMr; static inline void map_drmr_uris( LV2_URID_Map *map, drmr_uris *uris) { uris->midi_event = map->map(map->handle, "http://lv2plug.in/ns/ext/midi#MidiEvent"); uris->string_urid = map->map(map->handle, LV2_ATOM__String); uris->bool_urid = map->map(map->handle, LV2_ATOM__Bool); uris->int_urid = map->map(map->handle, LV2_ATOM__Int); uris->ui_msg = map->map(map->handle, DRD_LV2_URI "#uimsg"); uris->kit_path = map->map(map->handle, DRD_LV2_URI "#kitpath"); uris->get_state = map->map(map->handle, DRD_LV2_URI "#getstate"); uris->midi_info = map->map(map->handle, DRD_LV2_URI "#midiinfo"); uris->sample_trigger = map->map(map->handle, DRD_LV2_URI "#sampletrigger"); uris->velocity_toggle = map->map(map->handle, DRD_LV2_URI "#velocitytoggle"); uris->note_off_toggle = map->map(map->handle, DRD_LV2_URI "#noteofftoggle"); uris->channel_nb = map->map(map->handle, DRD_LV2_URI "#channelnb"); uris->zero_position = map->map(map->handle, DRD_LV2_URI "#zeroposition"); uris->sample_add = map->map(map->handle, DRD_LV2_URI "#sampleadd"); uris->sample_remove = map->map(map->handle, DRD_LV2_URI "#sampleremove"); uris->atom_eventTransfer = map->map(map->handle, LV2_ATOM__eventTransfer); uris->atom_object = map->map(map->handle, LV2_ATOM__Object); } # ifdef _LV2_PLUGIN_C_ /*----------------------------------------------------------------------------*/ /* Private Definitions */ /*----------------------------------------------------------------------------*/ # endif // ifdef _LV2_PLUGIN_C_ # ifndef _LV2_PLUGIN_C_ /*----------------------------------------------------------------------------*/ /* Public Prototypes */ /*----------------------------------------------------------------------------*/ # else // ifndef _LV2_PLUGIN_C_ /*----------------------------------------------------------------------------*/ /* Private Prototypes */ /*----------------------------------------------------------------------------*/ # endif // ifndef _LV2_PLUGIN_C_ /*----------------------------------------------------------------------------*/ #endif // ifndef _LV2_PLUGIN_H_