diff options
| -rw-r--r-- | src/midi/fluid_midi.c | 3 | ||||
| -rw-r--r-- | src/midi/midi_loader.c | 18 |
2 files changed, 21 insertions, 0 deletions
diff --git a/src/midi/fluid_midi.c b/src/midi/fluid_midi.c index 14bed8a..9b30cb0 100644 --- a/src/midi/fluid_midi.c +++ b/src/midi/fluid_midi.c @@ -1195,6 +1195,9 @@ fluid_track_send_events(fluid_track_t *track, } else if (event->type == MIDI_SET_TEMPO) { fluid_player_set_midi_tempo(player, event->param1); + // send set tempo too + if (player->playback_callback) + player->playback_callback(player->playback_userdata, event); } else { if (player->playback_callback) diff --git a/src/midi/midi_loader.c b/src/midi/midi_loader.c index 835e7aa..ff626a0 100644 --- a/src/midi/midi_loader.c +++ b/src/midi/midi_loader.c @@ -41,6 +41,21 @@ void delete_note_off_events(event_table_t *event_table){ } } } +// TODO cleanup code +void delete_other_events(event_table_t *event_table){ + size_t i; + for (i=0; i< event_table->length; i++){ + if(! (event_table->events[i].type == SND_SEQ_EVENT_NOTEOFF || event_table->events[i].type == SND_SEQ_EVENT_NOTEON )){ + if(DEBUG){ + printf("removed_note_off_event\n"); + } + memcpy(&event_table->events[i], &event_table->events[i+1], sizeof(snd_seq_event_t)*(event_table->length - i -1)); + event_table->events = realloc(event_table->events, event_table->length * sizeof(snd_seq_event_t)); + event_table->length--; + i--; + } + } +} int compare_events(snd_seq_event_t *event1, snd_seq_event_t *event2){ return ( @@ -206,6 +221,7 @@ int get_events(void *data, fluid_midi_event_t *event){ //} } delete_note_off_events(event_table); + delete_other_events(event_table); switch(event->type){ case NOTE_ON: @@ -215,6 +231,8 @@ int get_events(void *data, fluid_midi_event_t *event){ replace_events(event_table, &seq_event); break; default: + // send other events too + insert_event(event_table, &seq_event); break; } |
