
Description
You have a MIDI file and Windows' built-in GS synth makes it sound like a 2003 ringtone. Commercial sample libraries fix that for several hundred megabytes and a licence. FluidSynth takes the SoundFont route instead: hand it an sf2 bank and a MIDI file and it renders the audio, and changing the instrument set is changing one file — of which there are plenty good and free.
There is no GUI; it is a command-line program plus a C library, which is precisely why it turns up everywhere. LMMS, MuseScore, Denemo and jOrgan all use it as their synthesis engine. Live, it takes a MIDI keyboard and plays out through dsound or wasapi; offline, `-a file` writes a wav faster than real time — the same code either way. The sample processing is multi-threaded, so low latency does not immediately mean dropouts.
SoundFont rendering: loads sf2 and sf3 banks and synthesises from their samples as MIDI events arrive — swap the bank and the whole piece changes voice without touching the MIDI.
Live or offline: `-a dsound|wasapi|waveout` drives a sound card for performance, `-a file -F out.wav` renders a MIDI file straight to audio faster than real time.
Multi-threaded synthesis: sample processing and audio rendering spread across threads, which is what keeps latency low without starving the CPU during a live set.
Reverb and chorus built in: `--chorus` and the reverb parameters are command-line switches, so no separate effects chain is needed for a usable sound.
Bank offsets for several SoundFonts: `-b` assigns each loaded bank its own offset so instrument numbers from different libraries do not collide.
Embeddable C library: the core is an LGPL C library — exactly how LMMS, MuseScore and Denemo embed it as their synth engine.
MIDI event dump: `-d` prints incoming and outgoing MIDI events to stdout, which is the quick way to debug a keyboard mapping or find out why one note is silent.
There is no GUI; it is a command-line program plus a C library, which is precisely why it turns up everywhere. LMMS, MuseScore, Denemo and jOrgan all use it as their synthesis engine. Live, it takes a MIDI keyboard and plays out through dsound or wasapi; offline, `-a file` writes a wav faster than real time — the same code either way. The sample processing is multi-threaded, so low latency does not immediately mean dropouts.
Features
SoundFont rendering: loads sf2 and sf3 banks and synthesises from their samples as MIDI events arrive — swap the bank and the whole piece changes voice without touching the MIDI.
Live or offline: `-a dsound|wasapi|waveout` drives a sound card for performance, `-a file -F out.wav` renders a MIDI file straight to audio faster than real time.
Multi-threaded synthesis: sample processing and audio rendering spread across threads, which is what keeps latency low without starving the CPU during a live set.
Reverb and chorus built in: `--chorus` and the reverb parameters are command-line switches, so no separate effects chain is needed for a usable sound.
Bank offsets for several SoundFonts: `-b` assigns each loaded bank its own offset so instrument numbers from different libraries do not collide.
Embeddable C library: the core is an LGPL C library — exactly how LMMS, MuseScore and Denemo embed it as their synth engine.
MIDI event dump: `-d` prints incoming and outgoing MIDI events to stdout, which is the quick way to debug a keyboard mapping or find out why one note is silent.
