Thanks again for your help Tom. It's all working now! For the benefit of anyone else wanting to set a percussion channel other than 9, and have 9 as melodic, the following seems to be the minimum number of steps. (For clarity I'm omitting the checks on the success of the various calls.)
=== // I want 65 channels: settings = new_fluid_settings(); fluid_settings_setint( settings, "synth.midi-channels", 65 ); // create the synthesizer // with percussion channel = 64 // and set the traditional MIDI percussion channel (9) to melodic: synth = new_fluid_synth( settings ); fluid_synth_set_channel_type( synth, 64, CHANNEL_TYPE_DRUM ); fluid_synth_set_channel_type( synth, 9, CHANNEL_TYPE_MELODIC ); // create the audio driver adriver = new_fluid_audio_driver( settings, synth ); // Load the sound font: int nSfId = fluid_synth_sfload( synth, pszSoundFontPath, TRUE ); // Set voice 0 on channel 9, which should now be melodic fluid_synth_program_select( synth, 9, nSfId, 0, 0); === The last step, after loading the sound font, turns out to be the crucial one I was missing from the start. Before any NoteOn's are sent to channel 9 it will receive a program change with fluid_synth_program_change( ... ); to set the voice which is actually wanted. Nevertheless the initial fluid_synth_program_select() seems to be crucial. Thanks again for the excellent support! Dave David Webber Mozart Music Software https://www.mozart.co.uk _______________________________________________ fluid-dev mailing list fluid-dev@nongnu.org https://lists.nongnu.org/mailman/listinfo/fluid-dev