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

Reply via email to