FluidFeatures
This is a list of MIDI events that fluidsynth handles by default. That "handling" is either given by
- the SoundFont spec, or
- the General MIDI standard.
While the explanations in the SoundFont spec are very precise in terms of the intended audio-synthetic articulation, the descriptions in the MIDI standard are very vague when it comes to sound articulation. Thus you cannot expect that fluidsynth behaves in a certain way (which you may know from other synths) just because you send some MIDI CCs.
In order to control those "underspecifed" aspects of the sound synthesis (like ADSR, low pass filter cutoff & resonance, tremolo & vibrato depth, etc.) custom SoundFont modulators must be used! The SoundFont spec wants the SoundFont designer to define those modulators in the SoundFont file itself. Doing so will give you great portability between any SF2 compliant synth, i.e. you would get the same sound articulation when sending your custom CCs to any SF2 compliant synth to trigger your custom effects. Unfortunately, defining those modulators must be done for every single instrument or preset in the SoundFont, which can be tiresome and error-prone. Alternatively, you can use fluidsynth's API for manipulating default modulators (see fluid_synth_add_default_mod()
and fluid_synth_remove_default_mod()
resp.). This will allow you to insert or remove your own custom modulators, which will then affect all loaded SoundFonts equally. However, this technique is not portable and limited to fluidsynth.
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 |
|
MIDI_SET_TEMPO | |
PROGRAM_CHANGE | |
CHANNEL_PRESSURE |
|
KEY_PRESSURE | |
PITCH_BEND |
|
MIDI_SYSTEM_RESET |
MIDI Control Change Implementation Chart
Note that unless otherwise documented, CCs are interpreted individually, i.e. as 7-bit values.
MIDI CC | Implementation Status |
---|---|
(000) Bank Select |
synth.midi-bank-select
|
(001) Modulation Wheel |
|
(002) Breath Controller |
|
(004) Foot Controller | |
(005) Portamento Time |
|
(006) Data Entry |
|
(007) Channel Volume |
|
(008) Balance |
|
(010) Pan |
|
(011) Expression |
|
(064) Sustain Pedal |
|
(065) Portamento Switch |
|
(066) Sostenuto Pedal |
|
(068) Legato Switch |
|
(072) Sound Controller 3 (default: Release Time) | |
(073) Sound Controller 4 (default: Attack Time) | |
(074) Sound Controller 5 (default: Brightness) | |
(084) Portamento Control (PTC) |
|
(091) Effects 1 Depth (Reverb Send Level) |
|
(092) Effects 2 Depth (Tremolo Depth) | |
(093) Effects 3 Depth (Chorus Send Level) |
|
(094) Effects 4 Depth (Celeste (Detune) Depth) | |
(095) Effects 5 Depth (Phaser Depth) | |
(098) NRPN LSB |
|
(099) NRPN MSB |
|
(100) RPN LSB |
|
(101) RPN MSB |
|
(120) All Sound Off | |
(121) Reset All Controllers | |
(121) Local Control |
|
(123) All Notes Off | |
(124) Omni Mode Off |
|
(125) Omni Mode On |
|
(126) Mono Mode |
|
(127) Poly Mode |
|
RPN Control Change Implementation Chart
RPN CC | Implementation Status |
---|---|
(000) RPN_PITCH_BEND_RANGE |
|
(001) RPN_CHANNEL_FINE_TUNE | |
(002) RPN_CHANNEL_COARSE_TUNE | |
(003) Tuning Program Select | |
(004) Tuning Bank Select | |
(005) Modulation Depth Range |
|
(006) MPE Configuration Message |
|
NRPN Control Change Implementation Chart
All SF2 generators can be altered with NRPN Control Change messages. See section 8.1.2 in the spec.
SysEx Messages
Note: fluidsynth only processes those SysEx messages, if the "device-id" in the SysEx message matches the synth.device-id
setting the synth has been initialized with! Broadcast SysEx messages are always processed.
SysEx | Implementation Status |
---|---|
MIDI Tuning Standard |
enum midi_sysex_tuning_msg_id for supported messages |
GS DT1 |
|
GM/GM2 mode on | |
GS reset | |
XG reset |