introduce separate type for client IDs

This commit is contained in:
derselbst 2017-11-11 12:14:13 +01:00
parent c7a02bd812
commit 696c736b2f
8 changed files with 41 additions and 39 deletions

View file

@ -67,8 +67,8 @@ FLUIDSYNTH_API fluid_event_t* new_fluid_event(void);
FLUIDSYNTH_API void delete_fluid_event(fluid_event_t* evt);
/* Initializing events */
FLUIDSYNTH_API void fluid_event_set_source(fluid_event_t* evt, short src);
FLUIDSYNTH_API void fluid_event_set_dest(fluid_event_t* evt, short dest);
FLUIDSYNTH_API void fluid_event_set_source(fluid_event_t* evt, fluid_seq_id_t src);
FLUIDSYNTH_API void fluid_event_set_dest(fluid_event_t* evt, fluid_seq_id_t dest);
/* Timer events */
FLUIDSYNTH_API void fluid_event_timer(fluid_event_t* evt, void* data);
@ -115,8 +115,8 @@ FLUIDSYNTH_API void fluid_event_unregistering(fluid_event_t* evt);
/* Accessing event data */
FLUIDSYNTH_API int fluid_event_get_type(fluid_event_t* evt);
FLUIDSYNTH_API short fluid_event_get_source(fluid_event_t* evt);
FLUIDSYNTH_API short fluid_event_get_dest(fluid_event_t* evt);
FLUIDSYNTH_API fluid_seq_id_t fluid_event_get_source(fluid_event_t* evt);
FLUIDSYNTH_API fluid_seq_id_t fluid_event_get_dest(fluid_event_t* evt);
FLUIDSYNTH_API int fluid_event_get_channel(fluid_event_t* evt);
FLUIDSYNTH_API short fluid_event_get_key(fluid_event_t* evt);
FLUIDSYNTH_API short fluid_event_get_velocity(fluid_event_t* evt);

View file

@ -46,11 +46,11 @@ FLUIDSYNTH_API fluid_sequencer_t* new_fluid_sequencer2(int use_system_timer);
FLUIDSYNTH_API void delete_fluid_sequencer(fluid_sequencer_t* seq);
FLUIDSYNTH_API int fluid_sequencer_get_use_system_timer(fluid_sequencer_t* seq);
FLUIDSYNTH_API
short fluid_sequencer_register_client(fluid_sequencer_t* seq, const char *name,
fluid_seq_id_t fluid_sequencer_register_client(fluid_sequencer_t* seq, const char *name,
fluid_event_callback_t callback, void* data);
FLUIDSYNTH_API void fluid_sequencer_unregister_client(fluid_sequencer_t* seq, short id);
FLUIDSYNTH_API void fluid_sequencer_unregister_client(fluid_sequencer_t* seq, fluid_seq_id_t id);
FLUIDSYNTH_API int fluid_sequencer_count_clients(fluid_sequencer_t* seq);
FLUIDSYNTH_API short fluid_sequencer_get_client_id(fluid_sequencer_t* seq, int index);
FLUIDSYNTH_API fluid_seq_id_t fluid_sequencer_get_client_id(fluid_sequencer_t* seq, int index);
FLUIDSYNTH_API char* fluid_sequencer_get_client_name(fluid_sequencer_t* seq, int id);
FLUIDSYNTH_API int fluid_sequencer_client_is_dest(fluid_sequencer_t* seq, int id);
FLUIDSYNTH_API void fluid_sequencer_process(fluid_sequencer_t* seq, unsigned int msec);
@ -59,7 +59,7 @@ FLUIDSYNTH_API
int fluid_sequencer_send_at(fluid_sequencer_t* seq, fluid_event_t* evt,
unsigned int time, int absolute);
FLUIDSYNTH_API
void fluid_sequencer_remove_events(fluid_sequencer_t* seq, short source, short dest, int type);
void fluid_sequencer_remove_events(fluid_sequencer_t* seq, fluid_seq_id_t source, fluid_seq_id_t dest, int type);
FLUIDSYNTH_API unsigned int fluid_sequencer_get_tick(fluid_sequencer_t* seq);
FLUIDSYNTH_API void fluid_sequencer_set_time_scale(fluid_sequencer_t* seq, double scale);
FLUIDSYNTH_API double fluid_sequencer_get_time_scale(fluid_sequencer_t* seq);

View file

@ -33,7 +33,7 @@ extern "C" {
*/
FLUIDSYNTH_API
short fluid_sequencer_register_fluidsynth(fluid_sequencer_t* seq, fluid_synth_t* synth);
fluid_seq_id_t fluid_sequencer_register_fluidsynth(fluid_sequencer_t* seq, fluid_synth_t* synth);
FLUIDSYNTH_API int
fluid_sequencer_add_midi_event_to_buffer(void* data, fluid_midi_event_t* event);

View file

@ -61,6 +61,7 @@ typedef struct _fluid_cmd_handler_t fluid_cmd_handler_t; /**< Shell Comma
typedef int fluid_istream_t; /**< Input stream descriptor */
typedef int fluid_ostream_t; /**< Output stream descriptor */
typedef short fluid_seq_id_t; /**< Type used for unique client IDs by the sequencer and #fluid_event_t */
#ifdef __cplusplus
}

View file

@ -46,7 +46,7 @@ struct _fluid_sequencer_t {
int useSystemTimer;
double scale; // ticks per second
fluid_list_t* clients;
short clientsID;
fluid_seq_id_t clientsID;
/* for queue + heap */
fluid_evt_entry* preQueue;
fluid_evt_entry* preQueueLast;
@ -67,7 +67,7 @@ struct _fluid_sequencer_t {
/* Private data for clients */
typedef struct _fluid_sequencer_client_t {
short id;
fluid_seq_id_t id;
char* name;
fluid_event_callback_t callback;
void* data;
@ -77,7 +77,7 @@ typedef struct _fluid_sequencer_client_t {
static short _fluid_seq_queue_init(fluid_sequencer_t* seq, int nbEvents);
static void _fluid_seq_queue_end(fluid_sequencer_t* seq);
static short _fluid_seq_queue_pre_insert(fluid_sequencer_t* seq, fluid_event_t * evt);
static void _fluid_seq_queue_pre_remove(fluid_sequencer_t* seq, short src, short dest, int type);
static void _fluid_seq_queue_pre_remove(fluid_sequencer_t* seq, fluid_seq_id_t src, fluid_seq_id_t dest, int type);
static int _fluid_seq_queue_process(void* data, unsigned int msec); // callback from timer
static void _fluid_seq_queue_insert_entry(fluid_sequencer_t* seq, fluid_evt_entry * evtentry);
static void _fluid_seq_queue_remove_entries_matching(fluid_sequencer_t* seq, fluid_evt_entry* temp);
@ -262,7 +262,7 @@ void fluid_seq_dotrace(fluid_sequencer_t* seq, char *fmt, ...) {}
* Clients can be sources or destinations of events. Sources don't need to
* register a callback.
*/
short
fluid_seq_id_t
fluid_sequencer_register_client (fluid_sequencer_t* seq, const char *name,
fluid_event_callback_t callback, void* data)
{
@ -300,7 +300,7 @@ fluid_sequencer_register_client (fluid_sequencer_t* seq, const char *name,
* @param id Client ID as returned by fluid_sequencer_register_client().
*/
void
fluid_sequencer_unregister_client (fluid_sequencer_t* seq, short id)
fluid_sequencer_unregister_client (fluid_sequencer_t* seq, fluid_seq_id_t id)
{
fluid_list_t *tmp;
fluid_event_t* evt;
@ -355,7 +355,7 @@ fluid_sequencer_count_clients(fluid_sequencer_t* seq)
* @param index Index of register client
* @return Client ID or #FLUID_FAILED if not found
*/
short fluid_sequencer_get_client_id (fluid_sequencer_t* seq, int index)
fluid_seq_id_t fluid_sequencer_get_client_id (fluid_sequencer_t* seq, int index)
{
fluid_list_t *tmp = fluid_list_nth(seq->clients, index);
if (tmp == NULL) {
@ -427,7 +427,7 @@ fluid_sequencer_client_is_dest(fluid_sequencer_t* seq, int id)
void
fluid_sequencer_send_now(fluid_sequencer_t* seq, fluid_event_t* evt)
{
short destID = fluid_event_get_dest(evt);
fluid_seq_id_t destID = fluid_event_get_dest(evt);
/* find callback */
fluid_list_t *tmp = seq->clients;
@ -478,8 +478,8 @@ fluid_sequencer_send_at (fluid_sequencer_t* seq, fluid_event_t* evt,
* @param type Event type to match or -1 for wildcard (#fluid_seq_event_type)
*/
void
fluid_sequencer_remove_events (fluid_sequencer_t* seq, short source,
short dest, int type)
fluid_sequencer_remove_events (fluid_sequencer_t* seq, fluid_seq_id_t source,
fluid_seq_id_t dest, int type)
{
_fluid_seq_queue_pre_remove(seq, source, dest, type);
}
@ -747,7 +747,7 @@ _fluid_seq_queue_pre_insert(fluid_sequencer_t* seq, fluid_event_t * evt)
* May be called from the main thread (usually) but also recursively
* from the queue thread, when a callback itself does an insert... */
static void
_fluid_seq_queue_pre_remove(fluid_sequencer_t* seq, short src, short dest, int type)
_fluid_seq_queue_pre_remove(fluid_sequencer_t* seq, fluid_seq_id_t src, fluid_seq_id_t dest, int type)
{
fluid_evt_entry * evtentry = _fluid_seq_heap_get_free(seq->heap);
if (evtentry == NULL) {
@ -979,7 +979,7 @@ _fluid_seq_queue_insert_entry(fluid_sequencer_t* seq, fluid_evt_entry * evtentry
}
static int
_fluid_seq_queue_matchevent(fluid_event_t* evt, int templType, short templSrc, short templDest)
_fluid_seq_queue_matchevent(fluid_event_t* evt, int templType, fluid_seq_id_t templSrc, fluid_seq_id_t templDest)
{
int eventType;
@ -1016,7 +1016,7 @@ _fluid_seq_queue_remove_entries_matching(fluid_sequencer_t* seq, fluid_evt_entry
{
/* we walk everything : this is slow, but that is life */
int i, type;
short src, dest;
fluid_seq_id_t src, dest;
src = templ->evt.src;
dest = templ->evt.dest;

View file

@ -41,7 +41,7 @@ struct _fluid_seqbind_t {
fluid_synth_t* synth;
fluid_sequencer_t* seq;
fluid_sample_timer_t* sample_timer;
short client_id;
fluid_seq_id_t client_id;
};
typedef struct _fluid_seqbind_t fluid_seqbind_t;
@ -75,7 +75,7 @@ delete_fluid_seqbind(fluid_seqbind_t* seqbind)
* @param synth Synthesizer instance
* @returns Sequencer client ID, or #FLUID_FAILED on error.
*/
short
fluid_seq_id_t
fluid_sequencer_register_fluidsynth (fluid_sequencer_t* seq, fluid_synth_t* synth)
{
fluid_seqbind_t* seqbind;
@ -243,9 +243,10 @@ fluid_seq_fluidsynth_callback(unsigned int time, fluid_event_t* evt, fluid_seque
}
}
static int get_fluidsynth_dest(fluid_sequencer_t* seq)
static fluid_seq_id_t get_fluidsynth_dest(fluid_sequencer_t* seq)
{
int i, id;
int i;
fluid_seq_id_t id;
char* name;
int j = fluid_sequencer_count_clients(seq);
for (i = 0; i < j; i++) {

View file

@ -93,23 +93,23 @@ fluid_event_set_time(fluid_event_t* evt, unsigned int time)
}
/**
* Set source of a sequencer event (DOCME).
* Set source of a sequencer event. \c src must be a unique sequencer ID or -1 if not set.
* @param evt Sequencer event structure
* @param src DOCME
* @param src Unique sequencer ID
*/
void
fluid_event_set_source(fluid_event_t* evt, short src)
fluid_event_set_source(fluid_event_t* evt, fluid_seq_id_t src)
{
evt->src = src;
}
/**
* Set destination of a sequencer event (DOCME).
* Set destination of this sequencer event, i.e. the sequencer client this event will be sent to. \c dest must be a unique sequencer ID.
* @param evt Sequencer event structure
* @param dest DOCME
* @param dest The destination unique sequencer ID
*/
void
fluid_event_set_dest(fluid_event_t* evt, short dest)
fluid_event_set_dest(fluid_event_t* evt, fluid_seq_id_t dest)
{
evt->dest = dest;
}
@ -488,21 +488,21 @@ unsigned int fluid_event_get_time(fluid_event_t* evt)
}
/**
* Get the source field from a sequencer event structure.
* Get the source sequencer client from a sequencer event structure.
* @param evt Sequencer event structure
* @return DOCME
* @return source field of the sequencer event
*/
short fluid_event_get_source(fluid_event_t* evt)
fluid_seq_id_t fluid_event_get_source(fluid_event_t* evt)
{
return evt->src;
}
/**
* Get the dest field from a sequencer event structure.
* Get the dest sequencer client from a sequencer event structure.
* @param evt Sequencer event structure
* @return DOCME
* @return dest field of the sequencer event
*/
short fluid_event_get_dest(fluid_event_t* evt)
fluid_seq_id_t fluid_event_get_dest(fluid_event_t* evt)
{
return evt->dest;
}

View file

@ -30,8 +30,8 @@
struct _fluid_event_t {
unsigned int time;
int type;
short src;
short dest;
fluid_seq_id_t src;
fluid_seq_id_t dest;
int channel;
short key;
short vel;