Skip to content

Instantly share code, notes, and snippets.

@pedrolcl
Last active April 2, 2022 03:42
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save pedrolcl/7cacab9c9b2be2182a95f226f6863c46 to your computer and use it in GitHub Desktop.
Save pedrolcl/7cacab9c9b2be2182a95f226f6863c46 to your computer and use it in GitHub Desktop.
List instrument names from any SF2 soundfont file, using the FluidSynth 1 API. (doesn't compile with FluidSynth 2.x)
/* FluidSynth Instruments - An example of using fluidsynth
*
* This code is in the public domain.
*
* To compile:
* gcc -o fluidsynth_instr fluidsynth_instr.c -lfluidsynth
*
* To run
* fluidsynth_instr soundfont
*
* [Pedro López-Cabanillas]
*
*/
#include <stdio.h>
#include <fluidsynth.h>
int main(int argc, char** argv)
{
fluid_settings_t* settings = NULL;
fluid_synth_t* synth = NULL;
fluid_sfont_t* sfont = NULL;
int err = 0, sfid = -1;
if (argc != 2) {
fprintf(stderr, "Usage: fluidsynth_instr [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;
}
/* 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 */
sfid = fluid_synth_sfload(synth, argv[1], 1);
if (sfid == -1) {
fprintf(stderr, "Failed to load the SoundFont\n");
err = 4;
goto cleanup;
}
/* Iterate soundfont's presets */
sfont = fluid_synth_get_sfont_by_id(synth, sfid);
if (sfont) {
fluid_preset_t preset;
sfont->iteration_start(sfont);
while (sfont->iteration_next(sfont, &preset)) {
int bank = preset.get_banknum(&preset);
int prog = preset.get_num(&preset);
char* name = preset.get_name(&preset);
printf("bank: %d prog: %d name: %s\n", bank, prog, name);
}
}
printf("done\n");
cleanup:
if (synth) {
delete_fluid_synth(synth);
}
if (settings) {
delete_fluid_settings(settings);
}
return err;
}
@pedrolcl
Copy link
Author

pedrolcl commented Oct 3, 2018

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment