mirror of
https://github.com/ZDoom/fluidsynth.git
synced 2024-12-03 17:42:21 +00:00
Merge pull request #190 from FluidSynth/fluid_player
Add get tempo/bpm and get length/currentBeat to fluid_player
This commit is contained in:
commit
1344059be4
2 changed files with 62 additions and 3 deletions
|
@ -131,9 +131,16 @@ FLUIDSYNTH_API int fluid_player_join(fluid_player_t* player);
|
||||||
FLUIDSYNTH_API int fluid_player_set_loop(fluid_player_t* player, int loop);
|
FLUIDSYNTH_API int fluid_player_set_loop(fluid_player_t* player, int loop);
|
||||||
FLUIDSYNTH_API int fluid_player_set_midi_tempo(fluid_player_t* player, int tempo);
|
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_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);
|
FLUIDSYNTH_API int fluid_player_set_playback_callback(fluid_player_t* player, handle_midi_event_func_t handler, void* handler_data);
|
||||||
|
|
||||||
|
FLUIDSYNTH_API int fluid_player_get_status(fluid_player_t* player);
|
||||||
|
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
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -1757,8 +1757,7 @@ int fluid_player_set_midi_tempo(fluid_player_t *player, int tempo)
|
||||||
* @param bpm Tempo in beats per minute
|
* @param bpm Tempo in beats per minute
|
||||||
* @return Always returns #FLUID_OK
|
* @return Always returns #FLUID_OK
|
||||||
*/
|
*/
|
||||||
int
|
int fluid_player_set_bpm(fluid_player_t *player, int bpm)
|
||||||
fluid_player_set_bpm(fluid_player_t *player, int bpm)
|
|
||||||
{
|
{
|
||||||
return fluid_player_set_midi_tempo(player, (int) ((double) 60 * 1e6 / bpm));
|
return fluid_player_set_midi_tempo(player, (int) ((double) 60 * 1e6 / bpm));
|
||||||
}
|
}
|
||||||
|
@ -1786,6 +1785,59 @@ fluid_player_join(fluid_player_t *player)
|
||||||
return FLUID_OK;
|
return FLUID_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the number of tempo ticks passed.
|
||||||
|
* @param player MIDI player instance
|
||||||
|
* @return The number of tempo ticks passed
|
||||||
|
* @since 1.1.7
|
||||||
|
*/
|
||||||
|
int fluid_player_get_current_tick(fluid_player_t * player)
|
||||||
|
{
|
||||||
|
return player->cur_ticks;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Looks through all available MIDI tracks and gets the absolute tick of the very last event to play.
|
||||||
|
* @param player MIDI player instance
|
||||||
|
* @return Total tick count of the sequence
|
||||||
|
* @since 1.1.7
|
||||||
|
*/
|
||||||
|
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;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the tempo of a MIDI player in beats per minute.
|
||||||
|
* @param player MIDI player instance
|
||||||
|
* @return MIDI player tempo in BPM
|
||||||
|
* @since 1.1.7
|
||||||
|
*/
|
||||||
|
int fluid_player_get_bpm(fluid_player_t * player)
|
||||||
|
{
|
||||||
|
return (int)(60e6 / player->miditempo);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the tempo of a MIDI player.
|
||||||
|
* @param player MIDI player instance
|
||||||
|
* @return Tempo of the MIDI player (in microseconds per quarter note, as per MIDI file spec)
|
||||||
|
* @since 1.1.7
|
||||||
|
*/
|
||||||
|
int fluid_player_get_midi_tempo(fluid_player_t * player)
|
||||||
|
{
|
||||||
|
return player->miditempo;
|
||||||
|
}
|
||||||
|
|
||||||
/************************************************************************
|
/************************************************************************
|
||||||
* MIDI PARSER
|
* MIDI PARSER
|
||||||
*
|
*
|
||||||
|
|
Loading…
Reference in a new issue