RoomVerb: A Digital Reverb Pedal

RoomVerb is a digital effects pedal that applies reverb to an audio signal based on parameters of room size and wall material. The pedal is programmed on an embedded Teensy 4.1 microcontroller with the reverb algorithm coded in C++. The primary late reflection algorithm is based off of the all-pass ring model, which was selected due to its colorless frequency response and proficiency at long decay times. In addition, an FIR filter is incorporated within the feedback loop to attenuate certain frequencies with each pass, approximating the effects that different wall materials would have on the reverberant properties of a physical room (with the user able to select between 8 material options).

RoomVerb was created in collaboration with colleagues Alec Bertoy and Kaysen Chown as our digital signal processing “Major Design Experience” at University of Michigan, Spring 2023. My primary contributions included researching and comparing various late-reflection algorithms, researching and implementing the all-pass ring algorithm in C++, and wiring and programming the pedal’s user interface.

Process

For this group project, we wanted to try our hands at an effects pedal and chose reverb as it is often considered one of the most complicated audio effects and it was one we had we had littles experience developing. Rather than a convolution reverb algorithm (which is simple to achieve but depends on the impulse response recordings) we wanted to investigate the digital algorithmic approach as this allows for the size and character of the reverb to be adjusted continuously and poses more of a challenge. The overall goal was to design an algorithmic reverb that could still approximate the effects of a room. 

In the beginning phases, I was tasked with researching the primary “late-reflection” portion of the reverb (with my colleagues investigating the accurate simulation of early reflections, room materials, and overall planning). As an initial step, I demoed several algorithms (the schroeder reverb, several variations on FDNs and the all-pass ring) in MaxMSP so that I could quickly compare them and determine which path we should take. Through careful listening, impulse response comparison, and adding variations in the delay, feedback, and modulation values, I came to the conclusion that the all-pass ring was the most promising for our needs. Due to its colorless frequency response, ability to perform well for long decay times, and relative flexibility regarding  tuning values, it seemed the most viable and best sounding starting point for our project.

After this, the next step was to code it in C++ as a new effect in the Teensy Audio Library. This step was challenging due it being my first major foray into dealing with audio at the sample block level. The development process involved taking frequent impulse responses of the algorithm (essentially a black box), temporarily disabling sections of code and attempting to diagnose the sources of various unwanted distortions and noise, or lack of change to the sound. Through persistence (debugging, careful attention to bit math, going over the block diagram) I was able to get the algorithm working, and even discovered that an additional “freeze” feature was easy to implement by setting the feedback values to 1. I also determined that the “room materials” feature could be implemented by adding FIR filters into the feedback loop to attenuate different frequencies at different rates each pass. 

During the final stage of the project, our task was to incorporate all of our components together and design and build a physical pedal enclosure. Here, we all collaborated and I brought some of my experience with making Arduino-based instruments to the table, helping wire the components and developing the button and LED logic for the user interface. Though the deadline was tight, we were able to present a working prototype at U of M’s bi-annual engineering project showcase with musical instruments and mics hooked up to the pedal for passersby to play and listen to!

Previous
Previous

DIY Polysynth

Next
Next

Adaptive Cruise Control