Dispersive spring reverb · Fireball Audio
A spring reverb is a coil of wire with a transducer at each end, and the wire is dispersive: high frequencies travel along it faster than low ones. A click goes in and comes back as a falling sweep, the top first and the bottom last. That sweep is the boing. It isn't an effect laid over the reverb. It is the reverb.
Spring Ting builds that wire rather than imitating its sound. A chain of 120 stretched allpass sections, the frequency-dependent delay a torsional wave sees on a real coil, sits inside the feedback loop. So the first return chirps, and every return after it has been through the wire again and chirps further. A spring tank behaves the same way.
Two tanks of unequal length, 41 and 47 ms, run side by side, each with its own wire, its own damping and its own saturation in the loop. Loop gain is solved from the decay time you ask for, so Decay is a real number of seconds and no setting can make it run away.
Around that sit the Fireball controls: a RANDOMIZE button that rolls the tank and the motion but never your mix, a MIX LOCK that holds your blend while you browse, and 145 factory presets in nine categories.
The big button, the meter and the glass across the top; the presets beneath them; then the tank, the output and the motion. Every value reads off a lit amber window. Double-click any knob to reset it, shift-drag for fine control; the scroll wheel works too.
A reverb scatters a sound into a cloud that arrives all at once and then thins out. A spring does something narrower and stranger: it sends the sound down a wire that different frequencies travel at different speeds, so what comes back is sorted. The signal path, in order: stereo in summed to mono (a tank has one drive transducer), transducer band, Drive, Pre-Delay, two tanks in parallel, DC block, Width, auto-pan, then the blend with your untouched dry signal.
Each section is a first-order allpass stretched over two samples, y = x[n−2] − a·x[n] + a·y[n−2]. Its delay is longest at the bottom of the band, so lows arrive last. Boing sets a from 0.55 to 0.955.
17 – 217 ms of low-end lag, first pass
The cascade sits between the input and the tank delay, and the tank's output goes back through it. Every recirculation is dispersed again, so later repeats are more smeared than early ones.
one chirp per trip, compounding
Loop gain is solved each sample from the RT60 you set and the loop's true length, the tank delay plus the wire's own delay. Turning Boing up makes the loop longer, and the gain follows, so the decay time holds.
g = 10^(−3·(L + D) / (sr·T60)), capped at 0.985
A tanh inside the feedback path: loop gain falls as level rises, so a hot input compresses the tail instead of blowing it up. Ahead of the tank a second tanh is the Drive stage, after a 120 Hz – 4.5 kHz transducer band.
bounded at any setting
Every Fireball plugin has both. RANDOMIZE finds you somewhere new; MIX LOCK makes sure that neither it nor a preset moves the one setting that decides how loud the reverb is in your mix.
Rolls Drive, Boing, Decay, Tone and all four Motion controls to a new setting. The rolls are curated, not uniform: Decay is drawn from about 0.37 to 6 seconds and Tone from about 600 Hz to 8 kHz, so a press lands somewhere usable. It uses exactly the same draw rules the factory presets were generated from.
Never touches Mix, Pre-Delay or Width. Those decide how the reverb sits in your mix, and a randomizer that moves them is one you stop using.
Holds Mix where you set it. Presets load everything else and skip Mix. The lock is saved with your session and shown on the MIX LOCK lamp in the display.
Set Mix to 100 % on a send, lock it, and browse all 145 presets without the dry signal ever coming back.
Each control gets the same two pictures: the tank's own return with that control turned down, and with it turned up, drawn to the same scale so the difference between them is the real difference. Once you have read one you can read all of them by looking only at what changed.
Every picture below was produced by running the plugin's own DSP at the two settings named underneath it and measuring what came out. None of them is an illustration.
On the longer views — Decay and all of Motion — the teal line is left off on purpose. Once repeats start stacking up, the loudest moment in a band is a later repeat rather than the first return, and a line drawn through those would be a measurement of the wrong thing.
The Motion controls are all drawn on the same test, because their whole subject is time and a still picture cannot show speed directly: four hits, 600 ms apart, with the decay shortened so each return finishes before the next one starts. On those you are comparing the four returns against each other rather than the left picture against the right one. When they are identical copies, nothing is moving.
How hard the spring is hit. Low settings are clean and open. Higher settings compress the return, thicken the middle, and past about 5 add the ragged edge a tank gets when the send is pushed into it. The DRIVE lamp in the display lights from 5 up.
How: tanh(x · Drive) on the transducer signal, ahead of the pre-delay and the tank. It shapes what enters the wire, so the grit is dispersed along with everything else instead of sitting on top.
The reason this plugin exists. It sets how much the wire disperses: how far behind the top end the bottom end arrives. At 0 the return is a tight metallic splash. At 100 the lows trail 150 ms behind the highs and every hit becomes a falling dwoing. Watch the teal line lean over in the figure.
How: Sets the allpass coefficient a = 0.55 + 0.405 · Boing. The cascade's delay at the bottom of the band is 240 · (1 + a) / (1 − a) samples: about 17 ms at 0 and about 217 ms at 100 (48 kHz). The manual's renderer is checked against that formula to within 0.02 ms in every band.
How long the tank rings, in seconds to fall 60 dB. The knob is curved so the useful short settings get most of the travel; the big numbers are at the very end. The display shows the value on the seven-segment readout.
How: Loop gain g = 10^(−3·(L + D) / (sr · T60)), recomputed every sample for each tank from its own length L (41 or 47 ms) plus the wire's delay D at the current Boing and LFO position, capped at 0.985. That is why Boing and the LFO do not change the decay time.
Brightness of the tail. Because the filter sits inside the loop, it acts on every pass. Low settings don't just sound dark, they get darker as the tail goes on, the way a real spring loses its top end.
How: A one-pole low-pass at Tone in each tank's feedback path, after the tank delay and before the loop saturation. Each trip round the loop is filtered once more, so the highs decay faster than the lows.
A gap before the spring answers. A few milliseconds pull the reverb off the front of a snare. At 60 ms or more it becomes a slapback with a spring on it. RANDOMIZE never moves it.
How: A plain delay line between the Drive stage and the tank, outside the feedback loop, so it moves the whole return later without spacing the repeats. Below 0.5 ms it is bypassed entirely.
Stereo spread of the reverb only. Your dry signal is never touched. At 0 the reverb is mono, at 100 it is the natural difference between the two tanks, and past 100 that difference is pushed wider. RANDOMIZE never moves it.
How: Mid/side on the wet pair: M + S·Width, M − S·Width. The figures draw the side signal (L − R), which at Width 0 is exactly silent. That's why the left picture is empty.
How much reverb against how much dry. On an insert, 20 – 40 % is typical. On a send, turn it to 100 % and lock it. MIX LOCK, the chip beside the knob, keeps it there while you audition presets, and RANDOMIZE never rolls it.
How: out = dry · (1 − Mix) + wet · Mix · 0.5. The dry path is the input, untouched and still in stereo; only the wet goes through the mono transducer, the tanks and the pan. Mix Lock is stored in the session, not as an automatable parameter, so automation can't unlock it.
Speed of the modulator that bends the wire. Slow settings let the chirp drift from note to note; fast ones make it shimmer inside a single tail. It runs freely and is not tied to tempo.
How: A sine phasor at LFO Rate in Hz. Compare the four returns in each picture with each other: at 0.01 Hz they are identical copies, because nothing moves between hits 600 ms apart.
How far the LFO bends the wire. It changes the chirp, not the pitch. Modulating the dispersion rather than a delay time means the tail breathes and warps without ever going out of tune.
How: Adds ±0.12 · Depth to the allpass coefficient, with the right tank 90° ahead of the left, so the two sides move differently and the image swims. The coefficient is clamped to 0.20 – 0.965.
Speed of the auto-pan, as a note value of your project tempo. It is locked to the host transport, so the sweep lands the same way on every playback and only moves while the transport is playing.
How: Reads the host's beat position through RNBO's transport phasors. The pictures are rendered at 120 BPM with the transport running: at 1/2 the position drifts slowly across each return, and at 1/16 it flutters several times inside a single return.
How far the reverb swings left and right. The dry signal is never panned. At 0 the pan is off. It's the only Motion control that starts at zero, so a fresh instance holds still.
How: Equal-power: position = sin(2·pi·phase) · Amount, then cos/sin gains scaled by 1.414 so the centre is unity. Only the wet pair is panned.
Plus a neutral Init at the top of the list. Each preset was rendered through the plugin's own engine and chosen from thousands of candidates for how different it measures from its neighbours, so stepping through a category never gives you the same sound twice. The line under each name is generated from its actual settings.
Short, small tanks for drums and percussive parts.
Pre-delay out past 40 ms: a slapback with a spring on it.
Long pre-delay, long tail, big boing. The dub throw.
Tails of several seconds for pads, keys and space.
Tone wide open and the chirp to the front.
Tone closed down, so the tail gets darker as it goes.
Drive high enough to hear. The grit goes through the wire.
LFO and auto-pan doing the work. Play with the transport running.
Mix at 100 %, for an aux. Lock the mix, then browse.