From af673afaba73abc4450ae752bd7bfe4218504b0a Mon Sep 17 00:00:00 2001 From: Pedro Lopez-Cabanillas Date: Sat, 28 Feb 2009 23:16:36 +0000 Subject: [PATCH] Fix for ticket #22 - Wrong tempo changes --- fluidsynth/src/fluid_midi.c | 10 ++++++---- fluidsynth/src/fluid_midi.h | 1 + 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/fluidsynth/src/fluid_midi.c b/fluidsynth/src/fluid_midi.c index 5579b99f..31105a5d 100644 --- a/fluidsynth/src/fluid_midi.c +++ b/fluidsynth/src/fluid_midi.c @@ -272,6 +272,7 @@ int fluid_midi_file_read_track(fluid_midi_file* mf, fluid_player_t* player, int return FLUID_FAILED; } id[4]='\0'; + mf->dtime = 0; while (!found_track){ @@ -354,7 +355,6 @@ int fluid_midi_file_read_varlen(fluid_midi_file* mf) */ int fluid_midi_file_read_event(fluid_midi_file* mf, fluid_track_t* track) { - int dtime; int status; int type; int tempo; @@ -371,7 +371,7 @@ int fluid_midi_file_read_event(fluid_midi_file* mf, fluid_track_t* track) if (fluid_midi_file_read_varlen(mf) != FLUID_OK) { return FLUID_FAILED; } - dtime = mf->varlen; + mf->dtime += mf->varlen; /* read the status byte */ status = fluid_midi_file_getc(mf); @@ -519,12 +519,13 @@ int fluid_midi_file_read_event(fluid_midi_file* mf, fluid_track_t* track) result = FLUID_FAILED; break; } - evt->dtime = dtime; + evt->dtime = mf->dtime; evt->type = MIDI_SET_TEMPO; evt->channel = 0; evt->param1 = tempo; evt->param2 = 0; fluid_track_add_event(track, evt); + mf->dtime = 0; break; case MIDI_SMPTE_OFFSET: @@ -642,12 +643,13 @@ int fluid_midi_file_read_event(fluid_midi_file* mf, fluid_track_t* track) FLUID_LOG(FLUID_ERR, "Out of memory"); return FLUID_FAILED; } - evt->dtime = dtime; + evt->dtime = mf->dtime; evt->type = type; evt->channel = channel; evt->param1 = param1; evt->param2 = param2; fluid_track_add_event(track, evt); + mf->dtime = 0; } } return FLUID_OK; diff --git a/fluidsynth/src/fluid_midi.h b/fluidsynth/src/fluid_midi.h index cf0865bc..8f0dd248 100644 --- a/fluidsynth/src/fluid_midi.h +++ b/fluidsynth/src/fluid_midi.h @@ -290,6 +290,7 @@ typedef struct { int trackpos; int eot; int varlen; + int dtime; } fluid_midi_file; fluid_midi_file* new_fluid_midi_file(char* filename);