> but there is no corresponding public API to > release a voice, which is needed for implementing note_off
There is fluid_synth_stop() which forces the voice into release stage, unless it is sustained or sostenutoed. Instead of passing in the fluid_voice_t*, you have to use fluid_voice_get_id(voice) . This may be important, because the pointer points to a pool of voices. Voices may change during rendering calls (released, killed, stealed, etc.) so the pointer may not uniquely identify the voice. The ID on the other hand identifies a group of voices that are spawned by the same noteon event. If you want to control the voice ID yourself (e.g. one unique ID for a single voice), I suggest to use fluid_synth_start() . Note that fluid_synth_noteon() and fluid_synth_noteoff() take care of proper legato playing. You won't have that when manually spawning voices, just in case that matters for you. Also note that fluid_synth_noteon() kills overlapping notes. Tom _______________________________________________ fluid-dev mailing list fluid-dev@nongnu.org https://lists.nongnu.org/mailman/listinfo/fluid-dev