Skip to content

๐ŸŒ€ Reverb Overview

The following page gives an overview of different reverbator engines provided by fluidsynth and selectable via setting synth.reverb.engine. It concentrates on objective criteria, although a quality assessment is attempted below. Sound examples are provided so you can make up your own opinion. Listening with headphones is strongly recommended! The reverb settings of all examples below share those settings:

-o synth.reverb.room-size=0.7 -o synth.reverb.width=1 -o synth.reverb.damp=0 -o synth.reverb.level=0.7

We start with the dry versions of the provided sound examples (the MIDIs may be found here):

Example 1 - Piano:

Example 2 - Snap:

Example 3 - Water drops + Triangle:


1. Freeverb

Freeverb was the reverb engine fluidsynth had used up to including version 2.0.9 and was based on: https://ccrma.stanford.edu/~jos/pasp/Freeverb.html

It was added back to fluidsynth in version 2.6.0 as comparison baseline for the other reverbators.

The reverbator receives a monophonic input signal, which then passes 8 parallel comb filters and finally 4 allpass filters.

The design of the reverbator is not capable of processing a stereo input signal.

Due to its design and the usage of comb filters in particular, the reverb introduces a resonance tone on mid- to high-frequency tones. This is often referred to as "ringing" and perceived unpleasant.

Freeverb is slightly more CPU-expensive than FDN.

Example 1 - Piano:

Example 2 - Snap:

Example 3 - Water drops + Triangle:


2. FDN

Due to its ringing nature, Freeverb was replaced by "Feedback Delay Networks"-reverbator in version 2.1.0. It's based on: https://ccrma.stanford.edu/~jos/pasp/FDN_Reverberation.html

FDN receives a monophonic input signal and - as the name suggests - routes it through several delay lines. Fluidsynth's default implementation makes use of 8 delay lines, although there is a compile-time switch to allow using 12 delay lines, that slightly increases the reverb's quality by an increased frequency density. However, it also increases CPU usage beyond what the previous Freeverb would have required, so it was decided to use only 8 delay lines.

To fight ringing and high-frequency reverb "reflections", the delay lines are modulated with a sine. While this is generally inaudible, it can be perceived on certain high-frequent usually clear sounding instruments, like a triangle, causing a slight vibrato effect to be applied to them.

FDN tends to add unnaturally sounding distortions for samples that have a wide frequency range. Take a listen to the "Snap" example 2.

FDN is less CPU-expensive than Freeverb and is not capable of receiving a stereo input signal. The reverb settings (room-size, width, damp, level) were tuned and scaled to match up well with the behavior of the original Freeverb.

Example 1 - Piano:

Example 2 - Snap:

Example 3 - Water drops + Triangle:


3. Lexverb

This reverb engine is inspired by Lexicon reverbators and is available since fluidsynth 2.6.0. It's the first reverb engine capable of processing a stereo input signal (though due to limitations by fluidsynth, it still only receives a monophonic input signal).

There are 10 allpass filters involved: Lexverb routes the left input channel through 5 allpass filter, and the right input channel through another 5 allpass filters. Delay lines between these filter chains feed a part of the left-wet signal back to the right filter chain and vice versa.

Due to the use of only allpass filters, the gain of the individual frequencies is not changed, only their phase is messed around with. It's similar to the reverb found in many Nintendo64 games... and possibly other stuff from the 90s.

Lexverb currently suffers from the fact that it receives a monophonic input signal, causing the wet-reverb sound to be effectively panned to the center, instead of bouncing left and right.

Lexverb is CPU-cheaper than FDN.

Example 1 - Piano:

Example 2 - Snap:

Example 3 - Water drops + Triangle:


4. Dattorro

This "plate-class" reverb engine is named after Jon Dattorro and based on this paper: https://ccrma.stanford.edu/~dattorro/EffectDesignPart1.pdf

It is available since fluidsynth 2.6.0. A monophonic input signal is fed into a sophisticated network of delay lines and allpass filters to create a rich and colorful reverb sound.

Dattorro is a bit more CPU-expensive than Freeverb.

Example 1 - Piano:

Example 2 - Snap:

Example 3 - Water drops + Triangle:

5. Signalsmith

This is a FDN based reverb engine, similar to Fluidsynth's original FDN reverb, but more sophisticated and better engineered.

It is available since fluidsynth 2.6.0, but only available when fluidsynth was compiled with Signalsmith Audio Basics support - the same library that also provides the limiter implementation. Signalsmith reverb receives a stereo input signal (though due to limitations by fluidsynth, it still only receives a monophonic input signal) and creates a rich and colorful reverb sound similar to Dattorro.

It performs better on transient and high-frequent sounds.

Signalsmith is significantly more CPU-expensive than Dattorro. Furthermore, its runtime varies by a factor of 10 and might therefore not be suited for real-time performances.

Example 1 - Piano:

Example 2 - Snap:

Example 3 - Water drops + Triangle:

Comparison

Architecture & Design

Freeverb FDN Lexverb Dattorro Signalsmith
Algorithm family Schroeder-Moorer Jot FDN Lexicon-inspired allpass network Plate reverb Diffused FDN
Core structure 8 parallel combs + 4 series allpass, separate L/R banks, Flowchart 8 modulated delay lines + feedback matrix , Flowchart 10 allpass filters (5/side) + 2 Lโ†”R cross-delay lines, Flowchart Predelay + 4 input allpass diffusers + 2 tank loops + 14 output taps, Flowchart 8-ch FDN + 4 Hadamard diffusion stages + early reflections stage
Feedback/mixing matrix None (parallel combs) A = P โˆ’ (2/N)ยทuuแต€ (Jot/Householder) Implicit via cross-feedback delays Fixed plate tank topology Householder (feedback) + Hadamard (diffusion)
Diffusion 4 allpass per side (Freeverb approximation) Input tone corrector only; matrix provides diffusion 5-stage allpass cascade per L/R side (Schroeder) 4-stage input diffuser + 2 decay diffusions per tank Explicit pre-diffusion and post-diffusion
Modulation None All 8 lines, sinusoidal LFO, 1st-order allpass interpolation None None 3 of 8 channels, sinusoidal LFO, 7th-order Lagrange interpolation
Damping filter 1-pole LPF inside each comb 1-pole LPF per line 1-pole LPF on AP4, AP9 and both cross-delays 1-pole LPF on input (bandwidth) + per-tank LPF Biquad low-shelf + high-shelf per FDN channel; separate LP/HP output cut
Early reflections No No No No Yes
Stereo input capable ๐Ÿ”ด Mono-in by design ๐Ÿ”ด Mono-in by design ๐ŸŸข Stereo capable (โš ๏ธ fluidsynth feeds mono currently) ๐Ÿ”ด Mono-in by design ๐ŸŸข True stereo in/out (โš ๏ธ fluidsynth feeds mono currently)
Denormalisation DC offset injection DC offset injection Not handled Not handled Not handled
CPU cost More than FDN Less than Freeverb Cheapest Slightly more expensive than Freeverb Most expensive

Quality Assessment

Freeverb FDN Lexverb Dattorro Signalsmith
Tail smoothness ๐Ÿ”ด Poor ๐ŸŸก Fair, but modulated ๐ŸŸข Clean ๐ŸŸข Clean ๐ŸŸข Excellent
Ringing ๐Ÿ”ด High (comb resonances) ๐ŸŸก Low ๐ŸŸข Minimal ๐ŸŸก Low ๐ŸŸข Minimal
Transient broadband handling ๐ŸŸก Fair ๐Ÿ”ด Distorted ๐ŸŸข Good ๐ŸŸข Good ๐ŸŸข Excellent
Echo density ๐Ÿ”ด Poor ๐ŸŸก Fair, no pre-diffusion ๐ŸŸก Sparse, no pre-diffusion ๐ŸŸข Good (4-stage input diffuser) ๐ŸŸข Excellent (multi-stage)
Stereo output ๐ŸŸก Separate L/R comb banks ๐ŸŸก ยฑ1 gain vector providing functional stereo, but not deeply decorrelated ๐ŸŸข Cross-coupled stereo by design ๐ŸŸก 14-tap decorrelated L/R output ๐ŸŸข Full stereo by design
Spectral character Colored (comb resonances) Colored, sometimes overloaded or synthetic Flat & simple Rich, colorful (plate character) Rich, colorful
Best for Legacy / compatibility ? CPU-constrained use, nostalgic video game sound Smooth long reverbs Rich creative "real-room" reverb, acoustic realism
Worst for High-frequent solo instruments, long decay Broadband transients (snaps, clicks) ? ? Real-time and live-performances
Overall โญโญ โญโญโญ โญโญโญโญ โญโญโญโญโญ โญโญโญโญโญ