/** * This is called whenever new data is loaded, such as a new file. * Here we extract the TEXT and LYRIC events and just print them * to stdout. They could e.g. be saved and displayed in a GUI * as the events are received by the event callback. */ int onload_callback(void *data, fluid_player_t *player) { printf("Load callback, tracks %d \n", player->ntracks); int n; for (n = 0; n < player->ntracks; n++) { fluid_track_t *track = player->track[n]; printf("Track %d\n", n); fluid_midi_event_t *event = fluid_track_first_event(track); while (event != NULL) { switch (event->type) { case MIDI_TEXT: case MIDI_LYRIC: printf("Loaded event %s\n", event->paramptr); } event = fluid_track_next_event(track); } } return FLUID_OK; }
/* * fluid_track_send_events */ int fluid_track_send_events(fluid_track_t *track, fluid_synth_t *synth, fluid_player_t *player, unsigned int ticks) { int status = FLUID_OK; fluid_midi_event_t *event; while (1) { event = track->cur; if (event == NULL) { return status; } /* printf("track=%02d\tticks=%05u\ttrack=%05u\tdtime=%05u\tnext=%05u\n", */ /* track->num, */ /* ticks, */ /* track->ticks, */ /* event->dtime, */ /* track->ticks + event->dtime); */ if (track->ticks + event->dtime > ticks) { return status; } track->ticks += event->dtime; if (!player || event->type == MIDI_EOT) { } else if (event->type == MIDI_SET_TEMPO) { fluid_player_set_midi_tempo(player, event->param1); } else { if (player->playback_callback) player->playback_callback(player->playback_userdata, event); } fluid_track_next_event(track); } return status; }