mirror of
https://github.com/ZDoom/fluidsynth.git
synced 2025-04-22 07:30:50 +00:00
Guard the sequencer API
This commit is contained in:
parent
cd199cfdc8
commit
13c6e98936
2 changed files with 49 additions and 22 deletions
|
@ -176,6 +176,8 @@ delete_fluid_sequencer(fluid_sequencer_t *seq)
|
|||
int
|
||||
fluid_sequencer_get_use_system_timer(fluid_sequencer_t *seq)
|
||||
{
|
||||
fluid_return_val_if_fail(seq != NULL, FALSE);
|
||||
|
||||
return seq->useSystemTimer;
|
||||
}
|
||||
|
||||
|
@ -203,6 +205,8 @@ fluid_sequencer_register_client(fluid_sequencer_t *seq, const char *name,
|
|||
fluid_sequencer_client_t *client;
|
||||
char *nameCopy;
|
||||
|
||||
fluid_return_val_if_fail(seq != NULL, FLUID_FAILED);
|
||||
|
||||
client = FLUID_NEW(fluid_sequencer_client_t);
|
||||
|
||||
if(client == NULL)
|
||||
|
@ -242,10 +246,7 @@ fluid_sequencer_unregister_client(fluid_sequencer_t *seq, fluid_seq_id_t id)
|
|||
{
|
||||
fluid_list_t *tmp;
|
||||
|
||||
if(seq->clients == NULL)
|
||||
{
|
||||
return;
|
||||
}
|
||||
fluid_return_if_fail(seq != NULL);
|
||||
|
||||
tmp = seq->clients;
|
||||
|
||||
|
@ -280,7 +281,7 @@ fluid_sequencer_unregister_client(fluid_sequencer_t *seq, fluid_seq_id_t id)
|
|||
int
|
||||
fluid_sequencer_count_clients(fluid_sequencer_t *seq)
|
||||
{
|
||||
if(seq->clients == NULL)
|
||||
if(seq == NULL || seq->clients == NULL)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
@ -296,7 +297,12 @@ fluid_sequencer_count_clients(fluid_sequencer_t *seq)
|
|||
*/
|
||||
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);
|
||||
fluid_list_t *tmp;
|
||||
|
||||
fluid_return_val_if_fail(seq != NULL, FLUID_FAILED);
|
||||
fluid_return_val_if_fail(index >= 0, FLUID_FAILED);
|
||||
|
||||
tmp = fluid_list_nth(seq->clients, index);
|
||||
|
||||
if(tmp == NULL)
|
||||
{
|
||||
|
@ -321,10 +327,7 @@ fluid_sequencer_get_client_name(fluid_sequencer_t *seq, fluid_seq_id_t id)
|
|||
{
|
||||
fluid_list_t *tmp;
|
||||
|
||||
if(seq->clients == NULL)
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
fluid_return_val_if_fail(seq != NULL, NULL);
|
||||
|
||||
tmp = seq->clients;
|
||||
|
||||
|
@ -354,10 +357,7 @@ fluid_sequencer_client_is_dest(fluid_sequencer_t *seq, fluid_seq_id_t id)
|
|||
{
|
||||
fluid_list_t *tmp;
|
||||
|
||||
if(seq->clients == NULL)
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
fluid_return_val_if_fail(seq != NULL, FALSE);
|
||||
|
||||
tmp = seq->clients;
|
||||
|
||||
|
@ -384,10 +384,16 @@ fluid_sequencer_client_is_dest(fluid_sequencer_t *seq, fluid_seq_id_t id)
|
|||
void
|
||||
fluid_sequencer_send_now(fluid_sequencer_t *seq, fluid_event_t *evt)
|
||||
{
|
||||
fluid_seq_id_t destID = fluid_event_get_dest(evt);
|
||||
fluid_seq_id_t destID;
|
||||
fluid_list_t *tmp;
|
||||
|
||||
fluid_return_if_fail(seq != NULL);
|
||||
fluid_return_if_fail(evt != NULL);
|
||||
|
||||
destID = fluid_event_get_dest(evt);
|
||||
|
||||
/* find callback */
|
||||
fluid_list_t *tmp = seq->clients;
|
||||
tmp = seq->clients;
|
||||
|
||||
while(tmp)
|
||||
{
|
||||
|
@ -422,6 +428,9 @@ fluid_sequencer_send_at(fluid_sequencer_t *seq, fluid_event_t *evt,
|
|||
{
|
||||
unsigned int now = fluid_sequencer_get_tick(seq);
|
||||
|
||||
fluid_return_val_if_fail(seq != NULL, FLUID_FAILED);
|
||||
fluid_return_val_if_fail(evt != NULL, FLUID_FAILED);
|
||||
|
||||
/* set absolute */
|
||||
if(!absolute)
|
||||
{
|
||||
|
@ -446,6 +455,8 @@ void
|
|||
fluid_sequencer_remove_events(fluid_sequencer_t *seq, fluid_seq_id_t source,
|
||||
fluid_seq_id_t dest, int type)
|
||||
{
|
||||
fluid_return_if_fail(seq != NULL);
|
||||
|
||||
_fluid_seq_queue_pre_remove(seq, source, dest, type);
|
||||
}
|
||||
|
||||
|
@ -462,9 +473,13 @@ fluid_sequencer_remove_events(fluid_sequencer_t *seq, fluid_seq_id_t source,
|
|||
unsigned int
|
||||
fluid_sequencer_get_tick(fluid_sequencer_t *seq)
|
||||
{
|
||||
unsigned int absMs = seq->useSystemTimer ? (int) fluid_curtime() : fluid_atomic_int_get(&seq->currentMs);
|
||||
unsigned int absMs;
|
||||
double nowFloat;
|
||||
unsigned int now;
|
||||
|
||||
fluid_return_val_if_fail(seq != NULL, 0u);
|
||||
|
||||
absMs = seq->useSystemTimer ? (int) fluid_curtime() : fluid_atomic_int_get(&seq->currentMs);
|
||||
nowFloat = ((double)(absMs - seq->startMs)) * seq->scale / 1000.0f;
|
||||
now = nowFloat;
|
||||
return now;
|
||||
|
@ -482,6 +497,8 @@ fluid_sequencer_get_tick(fluid_sequencer_t *seq)
|
|||
void
|
||||
fluid_sequencer_set_time_scale(fluid_sequencer_t *seq, double scale)
|
||||
{
|
||||
fluid_return_if_fail(seq != NULL);
|
||||
|
||||
if(scale <= 0)
|
||||
{
|
||||
FLUID_LOG(FLUID_WARN, "sequencer: scale <= 0 : %f\n", scale);
|
||||
|
@ -542,6 +559,7 @@ fluid_sequencer_set_time_scale(fluid_sequencer_t *seq, double scale)
|
|||
double
|
||||
fluid_sequencer_get_time_scale(fluid_sequencer_t *seq)
|
||||
{
|
||||
fluid_return_val_if_fail(seq != NULL, 0);
|
||||
return seq->scale;
|
||||
}
|
||||
|
||||
|
|
|
@ -104,6 +104,9 @@ fluid_sequencer_register_fluidsynth(fluid_sequencer_t *seq, fluid_synth_t *synth
|
|||
{
|
||||
fluid_seqbind_t *seqbind;
|
||||
|
||||
fluid_return_val_if_fail(seq != NULL, FLUID_FAILED);
|
||||
fluid_return_val_if_fail(synth != NULL, FLUID_FAILED);
|
||||
|
||||
seqbind = FLUID_NEW(fluid_seqbind_t);
|
||||
|
||||
if(seqbind == NULL)
|
||||
|
@ -112,10 +115,10 @@ fluid_sequencer_register_fluidsynth(fluid_sequencer_t *seq, fluid_synth_t *synth
|
|||
return FLUID_FAILED;
|
||||
}
|
||||
|
||||
FLUID_MEMSET(seqbind, 0, sizeof(*seqbind));
|
||||
|
||||
seqbind->synth = synth;
|
||||
seqbind->seq = seq;
|
||||
seqbind->sample_timer = NULL;
|
||||
seqbind->client_id = -1;
|
||||
|
||||
/* set up the sample timer */
|
||||
if(!fluid_sequencer_get_use_system_timer(seq))
|
||||
|
@ -135,7 +138,7 @@ fluid_sequencer_register_fluidsynth(fluid_sequencer_t *seq, fluid_synth_t *synth
|
|||
seqbind->client_id =
|
||||
fluid_sequencer_register_client(seq, "fluidsynth", fluid_seq_fluidsynth_callback, (void *)seqbind);
|
||||
|
||||
if(seqbind->client_id == -1)
|
||||
if(seqbind->client_id == FLUID_FAILED)
|
||||
{
|
||||
delete_fluid_seqbind(seqbind);
|
||||
return FLUID_FAILED;
|
||||
|
@ -307,8 +310,14 @@ int
|
|||
fluid_sequencer_add_midi_event_to_buffer(void *data, fluid_midi_event_t *event)
|
||||
{
|
||||
fluid_event_t evt;
|
||||
fluid_sequencer_t *seq = (fluid_sequencer_t *) data;
|
||||
int chan = fluid_midi_event_get_channel(event);
|
||||
fluid_sequencer_t *seq;
|
||||
int chan;
|
||||
|
||||
fluid_return_val_if_fail(data != NULL, FLUID_FAILED);
|
||||
fluid_return_val_if_fail(event != NULL, FLUID_FAILED);
|
||||
|
||||
seq = (fluid_sequencer_t *) data;
|
||||
chan = fluid_midi_event_get_channel(event);
|
||||
|
||||
fluid_event_clear(&evt);
|
||||
fluid_event_set_time(&evt, fluid_sequencer_get_tick(seq));
|
||||
|
|
Loading…
Reference in a new issue