Skip to main content

Building and Modeling a Homemade Spring Reverb

I crossed off two items on the bucket list this week: building my own spring reverb, and creating a digital model of that reverb. Here's how I did it.

Building the physical reverb

The goal is to produce a spring reverb as cheaply as possible rather than making a professional sounding unit. Cheap prefab spring reverb units exist, but I wanted to go through the learning experience of building it from scratch, as this is the first electronics project I've done in years.

I found a good guide on Instructables on how to make a simple spring reverb using a spring extracted from a kids' toy microphone often marketed as "batteryless." I took some inspiration from this guide, but wanted to go cheaper. For example, the linked guide suggests eviscerating a cheap handheld battery-powered guitar amp, but now such amps sell for $50! I obtained the following:

  • Extension spring. These can be easily obtained from hardware stores. Try to get the thinnest gauge you can find so the spring constant is low. Mine is 1.1 cm diameter, 26.0 cm length, 1.0 mm gauge, which is pretty thick but still usable.

  • 9 V battery

  • 9 V battery connector

  • Adjustable step-down converter that supports 9 V -> 5 V

  • Amplifier that takes 5 V power

  • Small speaker, preferably with screw holes (I found a kit that contains an amplifier and two speakers)

  • Piezoelectric sensor

  • Two 1/4" jacks

  • Two small metal hooks with screw threads

  • Four nuts that fit the metal hooks

The total cost to buy the above materials was around $70 USD. This seems pricey, but if I were mass-producing spring reverbs, I estimate I would be able to make around three of them for that price.

Tools and additional materials needed:

  • Soldering iron and solder

  • Wires, wire cutter, wire stripper

  • Wood, screws, and various woodworking implements

  • J-B Weld and wood glue

I'm providing the below instructions so you can get an idea of how to replicate my work. In practice, you will certainly have to make modifications to suit the parts you have, just as I had to extrapolate from the original Instructables post.

  1. Solder the terminals of the 9 V battery connector to the input of the step-down converter.

  2. Plug in a 9 V battery and adjust the trim pot on the step-down converter until the multimeter reads 5 V on the output (or whatever power your amplifier requires). Disconnect battery after completion of this step.

  3. Connect the output of the step-down converter and the power terminals of the amplifier board with wires. Connect the input of the amplifier board to a 1/4" jack, and the output of the amplifier board to the speaker. Solder the piezo to the other 1/4" jack.

  4. Plug the battery back in and test that the entire amplifier/speaker setup works. Also test the piezo.

  5. Place two nuts on each metal hook and secure the nut positions with [find out what J was using]. J-B Weld one hook to the brass side of the piezo, and the other hook to the speaker.

  6. Build a long base out of four pieces of wood, secured using wood glue and wood screws.

  7. Using two pieces of wood and wood screws, erect two posts and attach the speaker to the posts, facing inward. In my case, the speaker conveniently has screw holes.

  8. Attach the other side of the piezo to a wood board with J-B Weld. I was paranoid about messing with the electrode/ceramics, so I drilled a circular hole in the wood just large enough to accommodate the inner circle. To deal with the wires sticking out the back, I chiseled a shallow "channel" next to the hole. I was careful not to get any J-B Weld on the electrode, but I don't know whether this caution is warranted.

  9. Place the spring on the hooks. Clamp the piezo board to the base so that the spring is tensioned. The spring reverb is now ready for testing. After you have verified everything works, attach the piezo board to the base with screws.

In the above instructions, "I" usually means "we" -- that is, myself and a friend who is experienced with woodworking. If you don't want to do the woodworking part, I imagine something can be cobbled together using two heavy weights to tension the spring.

The spring I used is stronger than expected, so I was somewhat worried that the glue on the piezo and speaker wouldn't hold. Luckily everything worked perfectly. The resulting design may not be optimal in noise floor and it definitely picks up external sounds, but does it sound like a spring reverb? Absolutely.

If you want to hear how the reverb sounds, scroll down to the bottom of this blog post and check out the table.

Modeling overview

Inspired by Valhalla DSP's manifesto, I wanted to take a psychoacoustic approach to modeling -- above all else, it should sound pleasing to the ear and subjectively realistic. This means that manual tuning and listening tests should be a big part of the process. As such, I want to experiment with multiple methods.

The simplest model is to convolve the input signal with a measured impulse response. I know of one product that uses this, which is the Befaco VCV Rack module, and there are probably many more. Although I ultimately would like a parametric result, having this method in our shoot-out is valuable since it may well sound good.

An attractive option is to focus on the dispersive qualities of the spring and use a high-order allpass filter to model the classic "drip." In [Abel2006A] and [Abel2006B], said allpass filter is modeled with biquad allpasses in series. In [Valimaki2010], "stretched allpass filters" are used instead, and a more complete picture of designing a spring reverb is given. The latter model was further refined in [Gamper2011], which describes how to automate the design of the allpass filters, and [Parker2011], which makes the model more computationally efficient. These allpass-based methods can be combined with more traditional reverb structures like feedback delay networks and allpass loop topologies to generate an exciting variety of novel reverb architectures. Whether such devices sound good or realistic will require experimentation.

Some researchers have modeled springs using meticulous simulation techniques like finite-difference time-domain (FDTD). While these are powerful methods, they are difficult to implement (it's really tough to debug errors) and are highly computationally expensive. In a 2010 paper, Bilbao and Parker reported that it took 40 seconds to compute 1 second of audio with their model [Bilbao2010]. Ultimately I wouldn't consider these approaches for the final product, but they could serve as reference or training data for real-time simulation.

A different approach is to throw deep learning at it [MartinezRamirez]. Although I have experimented with basic machine learning in past projects, this paper is too advanced for me at the moment. It also does not appear from the paper that the resulting algorithm can be parametrically modified, either.

Method 1: Impulse response

To measure the impulse response of the spring reverb, I used the now-classic method in [Farina2000], which uses a long exponential sine sweep from 20 Hz to 20 kHz followed by silence of any length. The FFTs of the input and output signals are computed, the output spectrum is divided by the input spectrum, and the IFFT is taken of the resulting spectrum to recover the impulse response. Since the resulting signal is very long, I truncated it to four seconds and tapered off the final two seconds. The spectrogram of the first second of the impulse response looks like this:

/images/spring_reverb_impulse_response_spectrogram.png

This is consistent with other spring reverb spectrograms I've seen (see references for examples). Descending chirps that occupy most of the image, and in the sub-2 kHz range you can see a series of increasingly curved sweeps coming up from 0 Hz. They are a little hard to see, but they are more audible than the high-frequency chirps, and are responsible for the "drip" effect.

The above spectrogram is displayed on a decibel scale ranging 80 dB. The sample rate is 48 kHz, and the spectrogram was computed with an FFT size of 1024 and a hop size of 256.

Worth looking at is the long-term coloration of the spring reverb. I took the magnitude spectrogram of the IR and averaged each vertical moment over time in the linear domain. The resulting amplitude units are mostly arbitrary, since the amplitudes depend on the point at which the IR is truncated, but the overall shape should tell us something:

/images/spring_reverb_impulse_response_long_term_spectrum.png

This is a dark reverb with most energy concentrated below 2 kHz. There is also a quiet peak just below 8 kHz, also visible on the spectrogram.

How does it sound? To my ears, convolution with this IR certainly sounds like a spring reverb, but has different resonances and lacks some of the "boing" of the original. The resonant peak at 8 kHz is also much more pronounced than the real thing, and quite piercing and annoying. I'm not sure what's going on, but I suspect the nonlinearities are interfering.

To mitigate this, I made up something I call "coloration correction." To do such a correction, the magnitude spectrograms of the real processed signal and the artificially processed signal are computed -- call them \(\mathbf{S}\) and \(\hat{\mathbf{S}}\) respectively. Then compute the pointwise division \(\mathbf{S}/\hat{\mathbf{S}}\) and convert to decibels. Take the average of each row and apply a smoothing filter (a simple rectangular FIR filter of a few points will do). This gives you an EQ curve that you can apply to the impulse response, to hopefully yield coloration that more closely matches the original.

Table of sounds

These are level-matched using the excellent pyloudnorm library.

Method Guitar Vocals Drums White noise burst
Dry signal
Physical unit
Convolution

References

Abel2006A

Abel, Jonathan et al. 2006. "Spring Reverb Emulation Using Dispersive Allpass Filters in a Waveguide Structure."

Abel2006B

Abel, Jonathan and Smith, Julius O. 2006. "Robust design of very high-order dispersive allpass filters."

Bilbao2010

Bilbao, Stefan and Parker, Julian. 2010. "A Virtual Model of Spring Reverberation."

Farina2000

Farina, Angelo. 2000. "Simultaneous measurement of impulse response and distortion with a swept-sine technique."

Gamper2011

Gamper, Hannes et al. 2011. "Automated Calibration of a Parametric Spring Model."

MartinezRamirez

Martinez Ramirez, Marco A. et al. "Modeling Plate and Spring Reverberation Using a DSP-Informed Deep Neural Network."

Parker2011

Parker, Julian. 2011. "Efficient Dispersion Generation Structures for Spring Reverb Emulation."

Valimaki2010

Välimäki, Vesa et al. "Parametric Spring Reverberation Effect."