Ok, I made the changes but it not working for me. Here is a program which is supposed to synthesize the midi input and print note on and note off events:
#include <string.h> #include <stdio.h> #include <fluidsynth.h> #include "fluid_midi.h" #include "fluid_sfont.h" int intercept(void* data, fluid_midi_event_t* event); int main(int argc, char** argv) { fluid_settings_t* settings; fluid_synth_t* synth = NULL; fluid_audio_driver_t* adriver = NULL; int err = 0; if (argc != 2) { fprintf(stderr, "Usage: fluidsynth_keyboard [soundfont]\n"); return 1; } /* Create the settings object. This example uses the default * values for the settings. */ settings = new_fluid_settings(); if (settings == NULL) { fprintf(stderr, "Failed to create the settings\n"); err = 2; goto cleanup; } /* set driver settings */ fluid_settings_setstr(settings, "audio.driver", "alsa"); fluid_settings_setstr(settings, "midi.driver", "alsa_raw"); fluid_settings_setstr(settings, "midi.alsa.device", "hw:1,0"); /* Create the synthesizer */ synth = new_fluid_synth(settings); if (synth == NULL) { fprintf(stderr, "Failed to create the synthesizer\n"); err = 3; goto cleanup; } /* load the soundfont */ if (fluid_synth_sfload(synth, argv[1], 1) == FLUID_FAILED) { fprintf(stderr, "Failed to load the SoundFont\n"); err = 5; goto cleanup; } /* Create the audio driver. As soon as the audio driver is * created, the synthesizer can be played. */ adriver = new_fluid_audio_driver(settings, synth); if (adriver == NULL) { fprintf(stderr, "Failed to create the audio driver\n"); err = 6; goto cleanup; } /* create midi driver */ fluid_midi_driver_t* midiDriver; midiDriver = new_fluid_midi_driver(settings, intercept, NULL); printf("Press \"Enter\" to stop: "); fgetc(stdin); fgetc(stdin); printf("done\n"); cleanup: if (adriver) { delete_fluid_audio_driver(adriver); } if (synth) { delete_fluid_synth(synth); } if (settings) { delete_fluid_settings(settings); } if (midiDriver){ delete_fluid_midi_driver(midiDriver); } return err; } /* My processing function for midi events */ int intercept(void* data, fluid_midi_event_t* event) { switch (event->type) { case NOTE_ON: fprintf(stdout, "event_post_noteon %i %i %i\n", event->channel, event->param1, event->param2); break; case NOTE_OFF: fprintf(stdout, "event_post_noteoff %i %i %i\n", event->channel, event->param1, event->param2); break; default: break; } return fluid_synth_handle_midi_event((fluid_synth_t*) data, event); } On Sun, Jun 3, 2018 at 10:53 PM, Tom M. <tom.m...@googlemail.com> wrote: > Without any code it's hard to tell. However the order looks wrong to me, > as the synth is not setup when creating the midi driver. You should instead: > > 1. create settings > 2. set midi driver settings > 3. set audio driver settings > 4. create synth > 5. load soundfont > 6. create audio driver > 7. create midi driver > > Tom > >
_______________________________________________ fluid-dev mailing list fluid-dev@nongnu.org https://lists.nongnu.org/mailman/listinfo/fluid-dev