drummer/lv2_plugin.h
Arnaud G. GIBERT 6be9e0f582 - Fix memory leaks with valgrind!
- Move data structure management  in datastruct.c and datastruct.h files,
- Prepare LV2 plugin in new lv2_plugin.c and lv2_plugin.h files.
2022-03-27 11:33:37 +02:00

326 lines
8.3 KiB
C

/*---------------------------------------------------------------------------------*/
/* Includes */
/*---------------------------------------------------------------------------------*/
#ifndef _LV2_PLUGIN_H_
#define _LV2_PLUGIN_H_
#include <pthread.h>
#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_