Skip to content
Tom M edited this page Oct 8, 2020 · 31 revisions

This is a list of MIDI events that fluidsynth handles by default. That "handling" is either given by

  • a decisive explanation in the SoundFont spec, or
  • a (vague) description of the General MIDI standard.

Thus you cannot expect that fluidsynth behaves in a certain way (which you e.g. know from other synths) just because you send some CCs.

Note: In order to control even more aspects of the sound synthesis (e.g. ADSR, low pass filter cutoff & resonance, reverb & chorus amount) SoundFont modulators must be used! Either define them in the SoundFont file itself (as ought to be by the spec) or use fluidsynth's API for manipulating default modulators (see fluid_synth_add_default_mod() and fluid_synth_remove_default_mod() resp.).

Legend

✔️ Implemented according to MIDI or SoundFont spec and usable by default

✅ Partially or customly implemented and usable by default

⚠️ Requires special setup of fluidsynth to be usable by default

❌ Not handled by default, but usable via custom SoundFont modulators

MIDI Message Implementation Chart

MIDI Message Implementation Status
NOTE_OFF ✔️
NOTE_ON ✔️
CONTROL_CHANGE See related table below.
MIDI_SET_TEMPO ✔️
PROGRAM_CHANGE ✔️
CHANNEL_PRESSURE ✔️ SF2 default modulator
KEY_PRESSURE ✔️
PITCH_BEND ✔️ SF2 default modulator
MIDI_SYSTEM_RESET ✔️

MIDI Control Change Implementation Chart

MIDI CC Implementation Status
(000) Bank Select ✔️ Interpretation of MSB and LSB depends on synth.midi-bank-select
(001) Modulation Wheel ✔️ SF2 default modulator
(002) Breath Controller ⚠️ Usable in breathmode, see PolyMono documentation
(004) Foot Controller
(005) Portamento Time ✔️ MSB and LSB (14-bit value!), see PolyMono documentation
(006) Data Entry ✔️ MSB and LSB (14-bit value!).
(007) Channel Volume ✔️ SF2 default modulator
(008) Balance non-standard SF2 modulator
(010) Pan ✔️ SF2 default modulator
(011) Expression ✔️ SF2 default modulator
(064) Sustain Pedal ✔️ See Sostenuto documentation
(065) Portamento Switch ✔️ See PolyMono documentation
(066) Sostenuto Pedal ✔️ See Sostenuto documentation
(068) Legato Switch ✔️ See PolyMono documentation
(072) Sound Controller 3 (default: Release Time)
(073) Sound Controller 4 (default: Attack Time)
(074) Sound Controller 5 (default: Brightness)
(084) Portamento Control (PTC) ✔️ See PolyMono documentation
(091) Effects 1 Depth (Reverb Send Level) ✔️ SF2 default modulator
(092) Effects 2 Depth (Tremolo Depth)
(093) Effects 3 Depth (Chorus Send Level) ✔️ SF2 default modulator
(094) Effects 4 Depth (Celeste (Detune) Depth)
(095) Effects 5 Depth (Phaser Depth)
(098) NRPN LSB ✔️ See related table below
(099) NRPN MSB ✔️ See related table below
(100) RPN LSB See related table below
(101) RPN MSB See related table below
(120) All Sound Off ✔️
(121) Reset All Controllers ✔️
(121) Local Control ✔️ Ignored, because not applicable
(123) All Notes Off ✔️
(124) Omni Mode Off ✔️ See PolyMono documentation
(125) Omni Mode On ✔️ See PolyMono documentation
(126) Mono Mode ✔️ See PolyMono documentation
(127) Poly Mode ✔️ See PolyMono documentation

RPN Control Change Implementation Chart

RPN CC Implementation Status
(000) RPN_PITCH_BEND_RANGE ✔️ SF2 default modulator
(001) RPN_CHANNEL_FINE_TUNE ✔️
(002) RPN_CHANNEL_COARSE_TUNE ✔️
(003) Tuning Program Select ✔️
(004) Tuning Bank Select ✔️
(005) Modulation Depth Range ❌ Not yet implemented

NRPN Control Change Implementation Chart

All SF2 generators can be altered with NRPN Control Change messages. See section 8.1.2 in the spec.