Skip to content
Tom M. edited this page Dec 8, 2024 · 25 revisions

SoundFont is a file format for sample-based instrument sounds. You will need a SoundFont to use FluidSynth. If you are not familiar with them, check out Josh Green's Introduction to SoundFonts and Soundfont 2.1 application note.

If you just need to play General MIDI files, these SoundFonts are known to work well with FluidSynth:

Soundfont Resources

SoundFont editors

Note: We cannot recommend using Audio Compositor for creating or editing Soundfonts, as it generates files that violate the Soundfont2 spec (specifically the order of generators as defined in section 8.1.2) and are therefore unusable with FluidSynth!

Conversion Tools

Note that most of the editors mentioned above may also perform conversions to some extend.

Software SoundFont Synthesizers:

Developer Resources

The SoundFont format was originally created by Creative Labs and EMU Systems and used in the SoundBlaster AWE 32 and later cards. There are now many other hardware platforms and software synthesizers supporting this format. SoundFont 2.0 and later are open formats and the specification is freely available.

FluidSynth's implementation details of the SoundFont 2 spec

The main goal of FluidSynth is to implement SoundFont 2 spec as accurately as possible. However, some minor adjustments have been made which are described here.

  1. The default "note velocity to filter cut off" modulator is inconsistently defined by the spec and is therefore actively disabled by fluidsynth. Generally, this is no problem, as many people feel that musically it doesn't make sense anyway. Therefore, it is usually not missed by users.

  2. FluidSynth applies a custom default modulator to every SoundFont in order to handle CC 8 (Balance) correctly. For details, pls. have a look at this Pull Request or the related discussion on the mailing list.

  3. The SoundFont spec allows into link multiple modulators to each other. An attempt was made to implement this. However, during implementation it was discovered that this feature is essentially "under-specified". Due to a lack for real-world use-cases and because it's hard to understand for a SoundFont designer what's going on in a linked modulator chain, implementing this feature was dropped.

  4. According to the spec, stereo sample pairs should both use pitch generators from the right channel. This is not implemented at the moment, as we are lacking an example SoundFont file where this issue would really make an audible difference, see related issue.

  5. The spec makes various constraints to sample loop points and is absolutely clear, that samples should be dropped or ignored when these conditions are not met. On the other hand, those constraints do not consider the effects of loop offset modulators on instrument level, which could potentially turn invalid sample loops into valid loops on instrument level, or turn valid sample loops into invalid ones. This makes the entire sample loop topic yet another "grey-area" in the SoundFont spec. Rather than messing around with incorrect sample loops or even dropping entire samples, FluidSynth will be very permissive on sample loops. It reports any problems it experiences, but generally leaves them as-is.

  6. As of version 2.4.0, fluidsynth supports the sample mode 2 introduced in Polyphone 2.4, see #1400 for details.

Differentiation to SBK / SF1

Before Soundfont2 existed, EMU released the AWE32 hardware synthesizer. The sound bank format used by this synth (and also by later synth's like Sound Blaster Live! and Audigy2 for backward compatibility) is known as SBK - a predecessor of the SF2 standard, whose implementation was heavily defined by its hardware. Due to technical reasons, fluidsynth isn't capable of handling SBK files. In order to use them, SBK needs to be converted to SF2.

A first starting point is to use EMU's "SoundFont Librarian" program. Pls. google for a sflib10c.zip on the web. Load the SBK and safe it as SF2. If you like the result, you're done at this point.

However, most SBK files converted to SF2 need further edits in order for the SoundFont to render correctly on a SoundFont 2.01 or 2.04-compliant device. This is also true for version 2.00 SoundFonts such as those created on the Sound Blaster Live!. Here is a list of the changes that must be made across all of the SoundFonts to approximate SoundFont 1.0 / 2.0 behavior:

  1. Disable default velocity→filter cutoff modulator for each instrument (both 2.01 and 2.04 spec versions).
  2. Enable velocity→filter cutoff modulator (2.04 spec version) for any samples with volume envelope attack at 0.008 seconds or greater.
  3. Re-route mod wheel (CC1) and channel aftertouch to modulate modLFO (LFO1) instead of vibLFO (LFO2). (Was CC1 switched over to using vibLFO before SoundFont version 2.01?
  4. Increase reverb (CC91) and chorus (CC93) controller sensitivity to better match AWE32 fx levels when using Audigy2 or FluidSynth.
  5. Replace ROM samples with RAM copies.
  6. In the original SoundFont implementation, if note was played on a drum kit (MIDI channel 10) on bank 1 or higher that didn't have an assigned sample in the preset, the corresponding note from bank 0 would be played instead. This is not true for SoundFont 2.01 or 2.04 devices, where the notes missing from the bank 1 preset will just play silence. I'm not sure whether this was changed in SoundFont revision 2.0 or 2.01. Anyway, some AWE32 songs rely on this behavior, so the missing percussion sounds must be copied into the SoundFont's percussion preset from a GM bank.
  7. Fix various SoundFont Librarian conversion errors as I encounter them. This part is very hard to do without reference to any AWE32 recordings. For example, I was able to find and fix a very bad pitch error in Tekkniko by Niko Boese thanks to this YouTube video. Without that, I might never have noticed one instrument playing inaudibly 5 octaves below its correct pitch.