Building complex reverbs using ValhallaÜberMod

The original ValhallaÜberMod concept had a fairly sparse Diffusion section, which was intended to smooth out feedback echos and add some density to chorus patches. Somewhere during the development process, the diffusion block was expanded into a much more powerful DIFF section, with each input channel being processed by a dense modulated diffusion block with variable size. The DIFF section proved useful in creating dense nonlinear reverbs, as well as lush ambient reverbs and decent plate simulations. The ÜberMod controls aren’t designed around creating reverbs, so I figured that any reverbs created with ÜberMod were a cool bonus with that plugin.

Flash forward to a few days ago, where I found myself experimenting with ÜberMod, mainly as a way of procrastinating before I get back to work on my next plugin. I started running multiple instances of ValhallaÜberMod in series and parallel, and using the sends of my DAW to control the routing and levels. To my surprise, I found that I was able to create some VERY complex and subtle reverbs using ÜberMod, by allocating different instances of the plugin for different stages of the reverb decay.

EXAMPLE 1: Medium Vocal Reverb, w/early reflections

The first example uses 3 instances of ÜberMod, running on 2 different sends. The first instance is running on its own send, and will cover the early reflections stage of a reverb:

<ValhallaUberMod pluginVersion="1.0.1" presetName="RandomizedEarlyReflections" Mix="1" Depth="1" StereoWidth="0.5" Delay="0.0476999991" Feedback="0" Spread="1" Slope="0.643999994" Skew="0.175999999" Random="1" TapGain="0.5" Diffusion="0.624000013" DiffSize="0.0163265299" DiffModRate="0.0490490496" DiffModDepth="0.5" LowCut="0.0351758786" HighCut="0.232160807" SpatialXover="0.145728648" DetuneRate="0.00900900923" DetuneDepth="0.851999998" VibratoRate="0.298245579" VibratoDepth="0" OverMod="0.0313131325" DriveInGain="0.375" DriveOutGain="0.75" DriveNoiseGain="0.333333343" FeedbackRotate="0.5" SmoothingTime="0.0990990996" ColorMode="1" DelaySync="0" type="0.333333343" DiffEnable="1" Drive="0" DrivePrePost="1" Speed="0" InputPan="0.125"/>

This preset uses the 16Tap mode, in conjunction with the DIFF section, to create a dense early ambience that abruptly cuts off after about 50 to 100 millseconds. The TAP Slope parameter is used to create the perception of a room with a short to medium decay, and the DELAY slider determines the point at which this decay is truncated. Some slow LFO modulation is used in conjunction with the MOD OverMod control to randomize the reflections.

The second instance of ÜberMod is running on a separate send, and provides the input diffusion of the late reverb tail:

<ValhallaUberMod pluginVersion="1.0.1" presetName="InputDiffusion" Mix="1" Depth="0.444000006" StereoWidth="0.5" Delay="0.00999999978" Feedback="0" Spread="0.5" Slope="0.5" Skew="0.5" Random="0" TapGain="0.5" Diffusion="0.703999996" DiffSize="0.0653061196" DiffModRate="0.0130130127" DiffModDepth="0.395999998" LowCut="0" HighCut="0.387939692" SpatialXover="0.145728648" DetuneRate="0.0370370373" DetuneDepth="0.5" VibratoRate="0.298245579" VibratoDepth="0" OverMod="0" DriveInGain="0.375" DriveOutGain="0.75" DriveNoiseGain="0.333333343" FeedbackRotate="1" SmoothingTime="0.0990990996" ColorMode="0" DelaySync="0" type="0.0416666679" DiffEnable="1" Drive="0" DrivePrePost="1" Speed="0" InputPan="0.125"/>

This preset uses the 2TapChorus mode, but most of the work is being done by the DIFF section. A fairly short DIFF size is used, with the idea being to turn impulsive sounds into a “puff” of diffuse energy. This will smooth out any reverb that this preset is placed in front of.

The third instance of ÜberMod is placed in series after the second instance (i.e. on the same send), and generates a reverb tail with a medium decay:

<ValhallaUberMod pluginVersion="1.0.1" presetName="MediumLateReverb" Mix="1" Depth="0.5" StereoWidth="0.5" Delay="0.00999999978" Feedback="0.612999976" Spread="0.5" Slope="0.5" Skew="0.5" Random="0" TapGain="0.5" Diffusion="0.748000026" DiffSize="0.240816325" DiffModRate="0.0290290285" DiffModDepth="0.5" LowCut="0.0954773873" HighCut="0.288442224" SpatialXover="0.145728648" DetuneRate="0.0490490496" DetuneDepth="0.5" VibratoRate="0.298245579" VibratoDepth="0" OverMod="0" DriveInGain="0.375" DriveOutGain="0.75" DriveNoiseGain="0.333333343" FeedbackRotate="1" SmoothingTime="0.0990990996" ColorMode="0" DelaySync="0" type="0.0416666679" DiffEnable="1" Drive="0" DrivePrePost="1" Speed="0" InputPan="0.125"/>

The above late reverb preset also uses the 2TapChorus mode, with most of the work being done by the DIFF section and the FEEDBACK control. The Diffusion is set to a fairly large size. The DIFF Size, in conjunction with the feedback and filtering, determines the length of the reverb decay. The WARP fBMix control is set to 100%, to create a figure-8 (ping-pong) feedback loop, as used in reverbs by Lexicon & Alesis.

Once you have the basic routing set up, experiment with the send levels being sent to the Early Reflections (instance 1) and the Late Reverb (instances 2 and 3). I have found that it sounds best with the Early Reflections set to a somewhat higher level than the Late Reverb.

EXAMPLE 2: Randomized Hall

ValhallaÜberMod is versatile enough that you can emulate many types of reverb structures, not just the Early Reflection / Late Reverb division of the more “scientific” reverbs. For example, Lexicon’s Random Hall is known for its high echo density, and the soft attack derived from the Shape and Spread controls. To emulate this soft attack using ÜberMod, we’ll use 2 instances of ÜberMod in series. The first is used to approximate the Shape/Spread section of Random Hall:

<ValhallaUberMod pluginVersion="1.0.1" presetName="ShapeSpread" Mix="1" Depth="0.444000006" StereoWidth="0.5" Delay="0.342900008" Feedback="0" Spread="1" Slope="0" Skew="1" Random="1" TapGain="0.5" Diffusion="0.791999996" DiffSize="0.134693876" DiffModRate="0.0130130127" DiffModDepth="0.395999998" LowCut="0" HighCut="0.975879371" SpatialXover="0.145728648" DetuneRate="0.0370370373" DetuneDepth="0.5" VibratoRate="0.298245579" VibratoDepth="0" OverMod="0" DriveInGain="0.375" DriveOutGain="0.75" DriveNoiseGain="0.333333343" FeedbackRotate="1" SmoothingTime="0.0990990996" ColorMode="0" DelaySync="0" type="0.375" DiffEnable="1" Drive="0" DrivePrePost="1" Speed="0" InputPan="0.125"/>

This preset uses the 32Tap mode, with a fair amount of Diffusion, and the TAP Slope set to -100%, to create a nonlinear reverb that fades in gradually over time.  The attack time is determined by the DELAY slider.
The ShapeSpread preset is used in series with a 2nd instance of ÜberMod on the same send, that adds a huge reverb tail to the slow attack:

<ValhallaUberMod pluginVersion="1.0.1" presetName="BigLateReverb" Mix="1" Depth="0.760999978" StereoWidth="0.5" Delay="0.00999999978" Feedback="0.768000007" Spread="0.5" Slope="0.5" Skew="0.5" Random="0" TapGain="0.5" Diffusion="0.843999982" DiffSize="0.448979586" DiffModRate="0.0730730742" DiffModDepth="0.495999992" LowCut="0.0502512567" HighCut="0.340703517" SpatialXover="0.145728648" DetuneRate="0.033033032" DetuneDepth="0.5" VibratoRate="0.298245579" VibratoDepth="0" OverMod="0" DriveInGain="0.375" DriveOutGain="0.75" DriveNoiseGain="0.333333343" FeedbackRotate="1" SmoothingTime="0.0990990996" ColorMode="0" DelaySync="0" type="0.0416666679" DiffEnable="1" Drive="0" DrivePrePost="1" Speed="1" InputPan="0.125"/>

This preset is very similar to the earlier late reverb preset, but with a much greater DIFF size setting. In addition, the WARP Speed is set to 1/2, which doubles the size of the diffusors, to create a HUGE reverb decay.

ROLL YOUR OWN SOUNDS

The above examples are just 2 quick demos of the complex reverb responses that can be generated with multiple instances of ValhallaÜberMod. For example, a longer gated reverb could be used in parallel with a reverb that incorporates DRIVE in the feedback loop, to create a reverb that starts off clean, then turns nasty after a certain amount of time.

ÜberMod is also useful in extending the capabilities of other reverb plugins. For example, the InputDiffusion or ShapeSpread examples from above can be used in series with ValhallaRoom, to create a super lush reverb that has more “standardized” reverb controls. The RandomizedEarlyReflections example can be added in parallel to ValhallaShimmer, to add early reflections to the modulated Shimmer late decay. Or combine ÜberMod with any other reverb plugin, algorithmic or convolution, as you see fit.  The low CPU consumption of ÜberMod makes it easy to use it in conjunction with other plugins.

It is worth noting that the same process can be used in the construction of all sorts of complicated sonic events, not just reverbs. ValhallaÜberMod excels at choruses, ensembles, multitap delays, echos, and so forth. By combining different settings of ÜberMod in series and parallel, all sorts of weird and wonderful sounds can emerge. I encourage people to use ÜberMod as a modular building block for creating all sorts of complex effects.

ValhallaRoom Updated to 1.0.8. Resizable GUI, new reverb modes

We’ve been working hard here at Valhalla DSP towers [i.e. I've been working hard typing in code on my laptop while sitting at the dining room table]. One of the fruits of this labor:

ValhallaRoom has been updated to version 1.0.8. The newest features:

  • Resizable GUI. When ValhallaRoom was first released, I received several complaints that the GUI was too big. Version 1.0.8 has been updated. Now the GUI can get much, much bigger. It can also get smaller, if that is your thing.
  • Two new reverb modes, Nostromo and Narcissus. The new reverb modes both have a sparser initial echo density than most of the ValhallaRoom modes, and take longer to build in echo density. This, combined with the high frequency attenuation, random modulation, and deliberately noisy delay interpolation, can be used to create grainy emulations of vintage reverbs, as well as denser decays that have a wide spatial image.
    • Nostromo is the biggest sounding reverb in ValhallaRoom, with audible echos at the largest size settings that slowly evolve into a rich decay.
    • Narcissus is Nostromo’s little sibling, with an initial denser decay. Narcissus is also the “lightest” reverb mode in ValhallaRoom, with a very low CPU hit.

Simon Stockhausen has some beautiful demos using the new ValhallaRoom reverb modes on his Soundcloud page. The first example uses Stockhausen’s amazing soprano sax playing, processed by Nostromo:

The next example uses Symplant through Narcissus:

The final example utilizes a ring modulated sound from Alchemy, and runs it through Narcissus:

Update links have been sent out to all VRoom customers, and demos of the GUI resizing and new modes can be found on the webpage.

Algorithmic Reverbs, Distortion, and Noise

Over on Gearslutz, AstralPStudios asked an interesting question:

When it comes to reverb, is there close relation to distortion in some ways? I guess when I’m listening to big verbs with high decay times it makes me wonder that because at times a big, wet verb can have some distortion-type characteristics.

The distortion observation is a good one, as this can often be heard with very long decays in algorithmic reverbs. In some cases, this is due to the high signal levels of the output. Increasing the decay time means turning up the internal feedback gains, and this often results in an output sound with a very high RMS level. However, even if the output level is reduced to a level that isn’t clipping within the DAW, sometimes various forms of distortion and noise can be heard. This can be explained as a consequence of the feedback nature of the algorithms, and how feedback causes the characteristics of the loop to be magnified exponentially.

Algorithmic reverbs tend to be made up of short delay lines, with LOTS of feedback applied. A good rule of thumb is that the average delay lines in a reverb are 0.1 seconds or shorter in length. In order to get a 30 second decay out of the reverb, the sound will be going around those loops (30.0/0.1) times…or 300 times. So any little quirk in the feedback path, like interpolation noise or fixed point distortion, will be increased on each pass through the feedback loop.

The earliest “long” electronic reverb sounds were based around tape delays, possibly running into a spring or plate reverb. Listen to “Creation du Monde” by Vangelis for an amazing “reverb” sound that comes from 3 RE-201 Space Echos:

The wow and flutter of the tape units, and the distortion added by tape saturation, results in a sound that is far more ethereal than 3 clean digital delay loops run in series or parallel.

The Lexicon 224 is an early digital reverb that was well known for its spacey, extra long decays (up to 70 seconds). Again, Vangelis was an early pioneer of the extra long decays using this unit, most famously in the Blade Runner soundtrack:

The Lexicon 224 used a fixed point processor, with a 16-bit word size, and a 20-bit saturating accumulator. Translated into English, this means that the 224 had about 24 dB of headroom internally (4X the max input volume) before things started clipping. HARD, digital clipping. The allpass delays used by the 224 also had fairly high internal gains, especially with long reverb times. This results in clipping at various points in the digital reverb network. Strangely enough, adding clipping into the nodes of a Lexicon-style reverb network doesn’t end up producing the classic tape echo runaway feedback at most settings. Instead, it tends to produce a somewhat higher noise floor with broadband audio signals (i.e. music as opposed to test signals).

The modulation in the Lexicon 224 also produced distortion, but of a different sort. The 224 had a quirky multiplier, which resulted in the linear interpolation being quantized to fairly big subsample chunks (I think it was 32 or 64 chunks per sample). This resulted in a “halo” of noise around reverbed signals, where the noise was less signal dependent than the clipping noise described above. The linear interpolation also results in attenuated high frequencies above 1/2 the sampling rate. Since the sampling rate in the 224 was pretty low in the first place, the attenuated high frequencies were quite audible with long decays. The noise and high frequency attenuation will increase every time it passes through the reverb network, and a 70 second decay time results in a few hundred passes through the allpass delays.

EDIT (1/24/2013): Since I wrote the above, I have spent a lot of time studying the Lexicon modulation. I think that the modulation source in the older Lexicons had a lot more to do with the noise performance than I had originally thought. The modulation in my PCM70 is noisy as all get out. The results of my studies can be heard in my latest plugin, ValhallaVintageVerb. In the 1970s and 1980s modes, I make use of this noisy modulation, which can really be heard on long sustained synth notes going through longer reverbs. The Concert Hall and Bright Hall algorithms are the best showcases of these “old school” artifacts.

Today, reverb plugins are usually programmed with floating point math. 32 bit floating point avoids most of the distortion issues found in the older fixed point processors, and 64-bit floating point can be used if absolute precision is desired. Generally speaking, 64-bit math is useful for very low frequency higher order filters, and for precise control of attack/decay times for dynamics processing – otherwise, 32-bit floating point has an amazingly high SNR. In addition, the last 3o+ years have seen a great deal of progress in delay interpolation techniques, so you can have modulated delay lines with lower SNR and less high frequency attenuation. If a DSP engineer wants to throw a bunch of cycles at their algorithms, they can come up with very clean reverbs, even with extremely long decays.

At Valhalla DSP, our philosophy is that a little noise isn’t necessarily a bad thing, and that the artifacts of the older reverbs often added some nice mojo to the signal. The high frequency attenuation of linear interpolation can result in a far less “glassy” high end than modern high fidelity interpolation techniques. ValhallaShimmer makes use of this in the “dark” color mode (the “bright” mode makes use of a more modern interpolation style).

The new Dark Room mode for ValhallaRoom deliberately introduces noise into the linear interpolation, and downsamples the entire reverb algorithm, to produce more audible noisy artifacts. As the noise is very signal dependent, and the algorithm is true stereo, this will result in different noise signals in the left and right channels, which increases the decorrelation of the algorithm, producing a very spacious feel. With short decays, the noise won’t be that audible, as it will only pass through the delays a few times before decaying away. With long decays, the noise floor builds up, resulting in a big, washy block of “spectral plasma,” to borrow a term from Christopher Moore. The other ValhallaRoom algorithms are fairly clean, but I felt it was important that users had the choice between modern clean and vintage dirty.

ValhallaRoom: Early Reflections versus Early Energy

The reverberation algorithms in ValhallaRoom are separated into 2 sections, Early and Late. This is a fairly common division of tasks in algorithmic reverbs. However, while most reverberation algorithms describe the early part of the reverberation as Early Reflections, ValhallaRoom’s early section would be better described as “Early Energy.” The important distinctions:

  • Most reverberators that feature “Early Reflections” use up to a few dozen discrete delay taps, or echos. These delays are often based upon a ray-traced model of a room, but fail to take into account the diffusion found with real acoustic surfaces, and the huge amount of complexity that is found in a real performance space. Things like furniture, seats, columns, and other performers and musical instruments, all combine to create a reflection pattern that is far more complex than what a few dozen delay taps can reproduce.
  • In order to add the complexity that is missing from the tapped delay early echo generation, some manufacturers have resorted to allpass delays in order to increase the echo density. This can work well for many signals, but can result in metallic artifacts on vocals and impulsive signals such as drums. I’ve described this phenomenon extensively in an earlier post. The “Diffusion” control in most reverberators can be seen as a way of dealing with the unpleasant side effects of allpass filters, by allowing the user to control the allpass delay coefficients to suit particular input signals.
  • ValhallaRoom doesn’t attempt to model any particular room geometry. Instead, it takes the approach that the early energy should be as dense, colorless, and spacious as possible, in order to emulate an “impossible” room. The user can dial in the duration of the early energy (using the Early Size control), to emulate smaller or larger spaces. A range of 10 to 50 milliseconds is common for smaller spaces, while larger durations are useful for emulating concert halls and cathedrals, where the initial reverberation tends to take some time to build up intensity.
  • The crossfeed of energy between spatial channels in ValhallaRoom can also be controlled with the Early Cross control, to create reverbs that have a realistic spread of energy between left and right channels, or an unnatural separation of the early energy that can be useful in preserving the initial spatial image of a stereo mix.
  • The Early section of ValhallaRoom has no allpass delays in it, which allows it to avoid the coloration caused by short allpasses. The Early Diffusion control adjusts the overall echo density, but it is mainly there for special effects – you can turn Diffusion all the way up, without getting the “ringing” sounds associated with high diffusion settings in some algorithmic reverberators.

ValhallaRoom was designed from a pyschoacoustic perspective, as opposed to a physical perspective. The goal was to create a sound that produces the impression of an “ideal” room, versus a specific room that exists in the real world.

Reverbs: Diffusion, allpass delays, and metallic artifacts

One of the most common controls found in reverberation algorithms is the Diffusion control. This is usually described as increasing the echo density, either the initial echo density (for Lexicon algorithms) or the rate at which echo density builds over time. The manual for the Lexicon LXP-15 has a somewhat typical description of the Diffusion parameter:

Diffusion: Controls the degree to which initial echo density increases over time. High settings of Diffusion result in high initial buildup of echo density; low settings cause low initial buildup. Echo density is affected by Size — smaller spaces will sound denser. To enhance percussion, use high settings of Diffusion. For clearer and more natural vocals, mixes and piano music, use low or moderate Diffusion settings.

If you read a lot of manuals for reverb products, you will often see similar descriptions of the Diffusion control, as well as the recommendation to use lower settings of Diffusion for clearer vocals. But why is this? A real room or hall tends to start with very high levels of diffusion, due to the objects typically found in the space – chairs, furniture, intricate wall patterns, etc. It would seem that a given echo density should be a characteristic of the space, not of the signal being sent into that space.

The answer lies in the signal processing tricks used to generate the initial high echo density. Manfred Schroeder, in his seminal 1962 AES paper “Natural Sounding Artificial Reverberation,” discusses using very short feedback delay lines in series to increase the echo density. Schroeder developed a very clever feedback/feedforward trick, such that the resulting delay line has a “flat” frequency response. The resulting delay unit is referred to as an allpass delay:

In the late 1970′s, James Moorer published an optimized version of the allpass delay, which used less multiplies, and is more commonly used today:

The earliest commercial digital reverbs, such as the EMT-250 and Lexicon 224, made use of several series allpasses at the inputs of the reverberation algorithms to increase the echo density. Lexicon was the first company to allow the user to directly control the coefficients of the input allpasses, and labeled this the “Diffusion” control.  The practice quickly spread through the audio industry.

EDIT: Chuck Zwicky, in a comment to this post, points out that the Diffusion parameter wasn’t originally present in the Lexicon 224, but was introduced with the Version 4.0 software. He also points out that most of the successful early reverberators up to 1984 did not have adjustable diffusion. The Eventide SP2016 had adjustable diffusion for some of their reverb algorithms, but this would have been around the 1984 to 1985 time frame.

The problem with generating echo density through series allpass delays stems from the definition of “allpass.” An allpass system will pass all frequencies with equal amplitude, over time. There is no guarantee when a given frequency will make its way out of the allpass delay. In practice, allpass delays don’t sound flat. Much like comb filters, a short impulsive sound sent through an allpass delay will result in a “ringing” sound, where only certain frequencies are resonating. Run an impulsive signal through several short allpass delays in series, and the result is a metallic decaying sound.

For percussive instruments, the metallic coloration might be an acceptable tradeoff, versus the “chattering” sound that occurs when the initial echo density is too low. Plus, snare drums have a metallic coloration in their own right, so a bit more coloration is OK. For vocals, the coloration produced by short allpass delays can be very unpleasant. Even though vocals are usually perceived as a “smooth” or continuous signal, the actual waveform produced by the glottis is very pulse-like, and can cause short series allpasses to ring out. This is especially audible on male vocals.

Some of the possible solutions to the issues with series allpasses:

  • Embrace the metallic coloration, use a bunch of series allpasses, and call the resulting algorithm a plate reverb. This is a fairly common approach, with most of the “plate” algorithms having very little to do with a physical plate, so much as having a lot of initial echo density and a somewhat metallic sound.
  • Use fewer series allpasses at the input. This works in eliminating coloration, but can result in a lower initial echo density. Many “hall” algorithms use this trick.
  • Use a larger number of series allpasses, with the idea being that the larger number of resonances will end up smearing out the metallic sound. This works, but a side effect of cascading a larger number of series allpasses is that the attack time can be extended to the point where the sound seems to “fade in.” This is a great sound if you like it, but doesn’t work for small room simulation.
  • Modulate the delay lengths within the allpasses. For longer allpasses, this helps reduce coloration. For the short allpasses used in the input diffusion section, this ends up producing too audible of a chorusing sound, or a sound similar to water sloshing around in a metal pan.
  • Reduce the coefficients of the allpass delays. This will reduce coloration, but will also reduce the echo density.

This is where the Diffusion control comes in. Instead of being a compromise solution that works OK for all signals and not great for any signal, it allows the user to adjust the algorithm to suit the input signal. It places the burden of balancing echo density and coloration on the end user, instead of on the algorithm designer. By knowing how the Diffusion control works, the end user can make their reverbs work better for them.

Is this an ideal solution? Probably not. But in the limited hardware processors of the late 1970′s, or the low-CPU plugins of today, it can be a reasonably effective solution.

EDIT #2: ValhallaRoom uses some clever signal processing tricks to avoid the issues associated with series allpass delays described above. A high level explanation of the Early Reverb section of ValhallaRoom can be found here. Even though ValhallaRoom has a Diffusion control, it is not being used to control allpass coefficients – the Early Reverb has no allpasses in it.

EDIT#3: ValhallaShimmer is built around a large number of cascaded, modulated allpass delays, and the artifacts that are generated by such a structure (see this blog post for more details). In addition, many of the “classic” digital reverbs relied heavily on series allpasses, so it isn’t to say that they produce a sound that is unusable – just that this sound isn’t necessarily reflective of what is found in a “real” acoustic space.

ValhallaShimmer: a bit of history

ValhallaShimmer has its roots in the earliest digital reverberation algorithms, as described by Mannfred Schroeder in 1961. Schroeder, in his earliest AES paper on the subject, described a “colorless” reverberator, based upon cascaded diffusor (allpass) delays. At the time, the computation power available on the mainframe computers Schroeder was using limited the complexity of his algorithms.

In 2006, I experimented with extending Schroeder’s early reverberator structure to much higher orders. I was expecting that using much larger numbers of cascading diffusors would increase the echo density of the algorithm. It did, but it had a really weird effect: As the number of diffusors increased, the reverb decay started to sound less and less like a “real” acoustic space, and more and more like some weird spooky backwards thing.

It turned out that I had run into an artifact of what is known as the Central Limit Theorem. Without getting into the messy scientific details, the effective result was that, as the number N of cascaded diffusors increased, the attack and decay characteristics of the reverb changed from an exponential decay towards a bell, or Gaussian, curve. In other words, the reverb would slowly fade in, and then slowly fade out.

This wasn’t what I was expecting. More importantly, it sounded cool. Add some randomized modulation to each of the diffusors, and the result was an ethereal, ghostly soundscape.

The pitch shifting Eno trick was one that I had first tried back in 2004. The pitch shifter I used at the time produced decent results. Later on, I conducted research into early pitch shifting techniques (as detailed in earlier blog posts) and developed a simple yet effective algorithm for pitch shifting. The goal was to generate similar artifacts to what a “de-glitched” pitch shifter would produce in a feedback loop with a reverberator, but without performing the costly autocorrelation analysis that the deglitching pitch shifters used. The result was a pitch shifting algorithm that added noise and texture to the feedback loop. It was an attempt to avoid metallic colorations (and emulate what a deglitching pitch shifter sounds like when it is freaking out), but it also sounded like a huge orchestra warming up.

When I started work on ValhallaShimmer in the spring of 2010, I knew that I wanted to combine the results of the cascaded diffusor experiments with the pitch shifted feedback as used by Brian Eno, Daniel Lanois, U2 et al. In order to put these into plugin form, I had to perform extensive optimization on the basic building blocks, as my early experiments used up far too much of the CPU. After a few months of work, I had a framework that brought the CPU consumption down by a factor of 10 to 20 from my 2006 experiments.

The original version of ValhallaShimmer had a single reverb algorithm, the one currently labeled as “mono.” Testing the plugin with material recorded with stereo miking techniques quickly pointed out that true stereo algorithms were necessary. The resulting algorithms (bigStereo, mediumStereo, smallStereo) were designed to get different perceived room “sizes,” although most of the sounds fall in the range between pretty big and huge.

During the optimization process, I found that one of my CPU-reducing tricks resulting in a lot of high frequency loss. Instead of looking at this as a technical shortcoming, I listened to the results. The optimized code sounded “warm,” and much closer to an ancient digital reverb with a low sampling rate and steep anti-aliasing filters. So I left it in as the “color” mode, so the user can choose between the original “bright” mode for modern reverb sounds, and the “dark” mode for that warm vintage sound.

Looking back at the history of ValhallaShimmer, it just struck me that most of what makes this an original algorithm was embracing the weird little artifacts that I came across while experimenting with various digital signal processing techniques. The cascaded diffusors didn’t behave in the manner I was expecting, but they sounded great. The pitch shifting artifacts added some grainy texture to the reverb decay, that sounded like a string orchestra section, even though the original goal was to get rid of metallic coloration. My optimization techniques darkened the overall tone, and helped me to realize that dark is often a good thing for a reverb. Happy accidents.

ValhallaShimmer released for OSX AU, VST, RTAS. $50. Demo versions online.

After far too much work, ValhallaShimmer is finally available for sale and demoing:

ValhallaShimmer

OSX users, grab yerself a demo copy and see how you like it. Windows folks, I estimate another week of work and beta testing until the Windows VST/RTAS release.

Some thanks are in order:

  • Beta testers. You’ve dealt with far too many revisions, and your input has been invaluable.
  • The Audio Damage guys. You gave me credit for my work on Eos, at a time when I had never received any public credit for my consulting gigs.
  • My old co-workers at Staccato Systems / Analog Devices. It was like going to school, just getting paid.
  • My teachers at University of Washington and CCRMA. It was exactly like going to school, except I was learning really cool stuff. You helped me start off on this crazy journey.
  • Bram Wessel and David Hopper, for encouraging me to keep going on Shimmer even when I was ready to walk away from the project.
  • All of you who have been following this blog and the forums, and giving me words of encouragement.
  • Last and by no means least, my lovely wife Kristin has given me emotional and financial support, time, and has been an awesome web designer. Plus, you’ve heard me rant about allpass filters and modulated delays for the past 13 years, which makes you a freaking hero.

More sounds from ValhallaShimmer

I was playing around with 8 instances of the new plugin, ValhallaShimmer, in series, processing the same harp loop used in the earlier example. Here’s what came out:

The sound hasn’t been edited – the fading in and out is a natural consequence of cascading multiple instances of this algorithm. This can be viewed as the Central Limit Theorem in action. In signal processing terms, this means that cascading a whole bunch of similar filters will result in an impulse response that approximates a Gaussian curve.

A single instance of the plugin as used to generate this effect sounds like this (with wet/dry mix set to 50%):

The plugin by itself can be set up to produce a Gaussian attack and decay, where the sound fades in over a few seconds:

However, cascading several instances produces a more dramatic version of the same effect. To me, it sounds very similar to the sounds obtained by extreme time stretching.

Progress continues on the plugin. It is in the hands of beta testers, and I am resolving the bugs that are coming up. I hope to make an official announcement in the next few days.

EDIT: I just made the first announcement of the new plugin, ValhallaShimmer. Check it out here.

RIP Keith Barr

I just read on Matrixsynth that Keith Barr passed away. He was 61 years old.

Keith Barr was one of the co-founders of MXR, back in 1973. After MXR, he founded Alesis. Most recently, he designed the FV-1 chip for Spin Semiconductor, as well as many of the excellent quality reverb algorithms featured on that chip’s ROM and the Spin Semiconductor website. Barr was both a hardware and software developer, and made the transition from designing such classic analog pedals as the MXR Distortion+ and Phase 90 to the digital hardware used in such low cost yet high quality boxes as the Microverbs, Midiverbs, and Quadraverbs.

I was lucky enough to enter into an email exchange with Mr. Barr back in late 2008. In one of the emails, he gave a detailed description of the development process of the Midiverb:

You seem to be collecting stories about reverb development, so I have one for you. If its boring just skip over it. There’s about 6 things I’ve done in my life that I thought were really clever, but as it is with technology, either folks don’t understand or if they do they don’t care, and as technology marches on something better is surely to emerge. This is one of them that I always look back upon fondly:

MIDIVERB:

After playing with a monster machine I built with a bank of commercial SRAM and a 16 X 16 multiplier chip ($100 !), I found that there didn’t seem to be a secret to reverb, just the need for a few simple operations. I put the monster aside, along with my dreams of standing at the side of Lexicon, and returned home to the down and dirty music store… I decided instead of making the world’s coolest reverb, I’d make the world’s cheapest one. I never felt comfortable with the swells in the first place. The $100 multiplier offended me! Although I never really liked beer, I didn’t like Champaign either… As a poor kid, I had learned to make much from sticks and string.

At the time (early 80s) we had 32K EEPROMS and 64K DRAMs that were organized as 16K x 4. Also, HC logic was exploding, and I could get octal registers and both inverting and non-inverting octal tri-state buffers. I immediately put tape to Mylar on my rigged up light table, a discarded old window propped up by a single tube fluorescent light at the back, C-clamped to my white drafting table. God I loved that way of doing things. It was with your hands, earthy, soulful, it was art.

The DRAM required 2 addressing cycles, ROW and COLUMN, each 7 bits wide. I developed a system that fetched 2 bytes from the EEPROM and used the lower 7 bits of each as row and column addresses, after passing them through an 8 bit adder which summed the last values of ROW and COL with the new ones. –This eliminated an address counter, as the code simply expressed the next address relative to the previous address. Of course I had to allow for this in the code assembler (written on an 8 bit CPM machine), because the total of all address offsets needed to be just one more than the total address space, so that every time ‘around’ it would appear as though an address counter was actually present! As I recall, it was 2×4 Bit adders, 2 octal registers (w/ tri state outputs) and ½ a dual flip flop to store the carry in the math operations.

Then I had two left over bits to actually control the thing, and I decided to make one to control write operations and the other to control reads, so I had a DRAM write signal immediately! The final control bit was the magic: The write ops were to 1) write the accumulator (16b) to DRAM and add this value times 0.5 to the accumulator, or 2) write the accumulator to DRAM and add this value times -0.5 plus the result of the last read op to the accumulator. The read ops were to 1) read DRAM times 0.5 and load to the accumulator or read DRAM times 0.5 and add to the accumulator. That was it, just 4 instructions. As I recall, the hardware was 2x octal inverting buffers, 2x octal non-inverting buffers, 4x octal registers, 4x 4 bit adders, 4x 4 bit muxes and 4x 4 bit XOR gates to handle any overflow (saturation limiting).

It was a 128 op machine, which required 256 EEPROM accesses per sample cycle, right on the edge of what the EEPROM and adders could handle.

A 2 tick AP was possible, but I don’t have one here and I can’t remember all of the details, especially about the exact wiring of the second write op. Most coefficients would be 0.5 of course, and we had a few comments about how the reverbs had a ‘building’ effect as a result of APs with K=0.5. Oh well… They bought about 5,000 every month for about a year though, which gave a good start to my new company! –You could build a box for $100 and sell it to a dealer for $240 back then, and I don’t know from where, but $400 would leap out of pockets at guitar stores!

I wrote the assembler in assembly on the Z80 microcomputer (2 8” floppies, no HD) with a Soroc terminal, a wonderful old combination that had earlier produced commercial drum machine code and stored and edited the drum sounds from analog tapes with a home built ADC/DAC plug-in board. Actually that system produced a lot of stuff that never was built…

A later version of the engine was produced in a gate array, as I recall it was 2K gates! Still later versions of the product allowed the 8051 controller to generate LFOs that would update the code (SRAM replaces EEPROM) on a sample by sample basis to sweep delays, generate chorus and so forth. –Even did 4 point interpolation in the process!

END OF STORY

Thought you might want to add that to your collection,

Thanks,

Keith

In another email, Keith gave a brief description of the basic reverb topology he preferred to use in his later reverb designs:

I really like 2AP, delay, 2AP, delay, in a loop. I try to set the delay to somewhere a bit less than the sum of the 2 preceding AP delays, which are of course much longer than the initial APs (before the loop).

Yeah, the big loop is great; you inject input everywhere, but take it out in only two places… It just keeps comin’ new and fresh as the thing decays away. –If you’ve got the memory and processing!

Keith also went into a great deal of detail about his reverb designs on the Spin Semiconductor forum. I’d highly recommend reading all of his posts on that forum. In addition, Keith wrote a series of “Informal Notes” about the FV-1, that are invaluable for anyone interested in audio DSP design. One of my favorite parts of those notes is a drawing of the basic reverb topology that Keith arrived at after years of research:

In the drawing, you can see the 2 allpass, 1 delay “unit” that Keith used as his basic building block. The resulting sound would be quite “open,” with somewhat less initial echo density than the various Lexicon algorithms, but with a wonderful build over time. Combine such a structure with the modulated allpass delays that Keith often used, and you have a reverb that is ideal for ambient music. Artists such as Autechre, Aphex Twin, Labradford, and Roy Montgomery made heavy use of Alesis reverbs in constructing their ambient soundscapes.

Keith Barr’s pioneering work in reverb software and hardware design is one small aspect of the hugely productive life he led. He was a pioneer of audio effects, digital recording, affordable drum machines…the list can go on and on. An overview of Keith Barr’s life and accomplishments can be found at Mix Online. He will be missed. Rest in peace.

Another clip from my upcoming plugin

The following clip shows some of the different modes of my upcoming plugin, ValhallaShimmer:


A brief summary of what is going on:

  • The clip begins with harp recorded in a fairly echo free environment
  • At 0:24, the mix control on the plugin is set to about halfway. The plugin is currently producing a fairly large reverb sound.
  • At 0:48, the feedback control on the plugin is turned up. This results in a much longer reverb sound. It is kinda subtle in this context.
  • At 1:13, the Pitch Mode of the plugin is set to “single,” with the pitch shift set at +12 semitones. This produces the classic “shimmer” sound that I have talked about in earlier blog posts, and that featured heavily in Eno / Lanois productions and many classic U2 tracks.
  • At 1:38, the harp loop ends, and the “shimmer” reverb decays away. Notice that the reverb increases in pitch as it decays.

In the next few days, I’ll be going into more details about the upcoming plugin. For now, I’m burning the midnight oil in front of the compiler.