/**
 * 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;
}
Exemple #2
0
/*
 * 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;
}