diff --git a/fluidsynth/include/fluidsynth/midi.h b/fluidsynth/include/fluidsynth/midi.h index 90e50927..15a51f70 100644 --- a/fluidsynth/include/fluidsynth/midi.h +++ b/fluidsynth/include/fluidsynth/midi.h @@ -133,7 +133,15 @@ FLUIDSYNTH_API int fluid_player_set_midi_tempo(fluid_player_t* player, int tempo FLUIDSYNTH_API int fluid_player_set_bpm(fluid_player_t* player, int bpm); FLUIDSYNTH_API int fluid_player_get_status(fluid_player_t* player); FLUIDSYNTH_API int fluid_player_set_playback_callback(fluid_player_t* player, handle_midi_event_func_t handler, void* handler_data); - + +//additional fluid_player functions +FLUIDSYNTH_API int fluid_player_get_current_tick( fluid_player_t * player ); +FLUIDSYNTH_API int fluid_player_get_total_ticks( fluid_player_t * player ); +FLUIDSYNTH_API int fluid_player_get_bpm( fluid_player_t * player ); +FLUIDSYNTH_API int fluid_player_get_midi_tempo( fluid_player_t * player ); + +/// + #ifdef __cplusplus } #endif diff --git a/fluidsynth/src/midi/fluid_midi.c b/fluidsynth/src/midi/fluid_midi.c index 236b889b..dd0ffb51 100644 --- a/fluidsynth/src/midi/fluid_midi.c +++ b/fluidsynth/src/midi/fluid_midi.c @@ -1757,8 +1757,7 @@ int fluid_player_set_midi_tempo(fluid_player_t *player, int tempo) * @param bpm Tempo in beats per minute * @return Always returns #FLUID_OK */ -int -fluid_player_set_bpm(fluid_player_t *player, int bpm) +int fluid_player_set_bpm(fluid_player_t *player, int bpm) { return fluid_player_set_midi_tempo(player, (int) ((double) 60 * 1e6 / bpm)); } @@ -1786,6 +1785,37 @@ fluid_player_join(fluid_player_t *player) return FLUID_OK; } + +int fluid_player_get_current_tick( fluid_player_t * player ) +{ + return player->cur_ticks; +} + +int fluid_player_get_total_ticks( fluid_player_t * player ) +{ + int i; + int maxTicks = 0; + for (i = 0; i < player->ntracks; i++) { + if (player->track[i] != NULL) { + int ticks = fluid_track_get_duration( player->track[i] ); + if( ticks > maxTicks ) + maxTicks = ticks; + } + } + return maxTicks; + +} + +int fluid_player_get_bpm( fluid_player_t * player ) +{ + return (int)( 60e6 / player->miditempo ); +} + +int fluid_player_get_midi_tempo( fluid_player_t * player ) +{ + return player->miditempo; +} + /************************************************************************ * MIDI PARSER *