“Vintage” DSP: ReaComp

I can’t help but look back with a sense of nostalgia on the merits of now “vintage DSP plugins” from the 90s to 2000s and the practical approaches employed by software developers to work around technical constraints of limited processing power, memory and storage to achieve professional results. A lot of good records were made on modest systems, and it should be no surprise that you can now record and mix an album on a modern iPhone.

To contrast the operating conditions of an In-The-Box (ITB) mix session in 2004 with 2024, the biggest constraints were processing power and RAM. DSP software was thus designed to be elegant and efficient. Today it is practical for a single channel processor plugin to make use of the processor budget of an entire session from twenty five to thirty years ago. Ample processing power has shifted the general strategy of DSP design to not only model entire hardware units down to the circuit component level (Waves, Universal Audio, Slate Digital, IK Multimedia and others), but has also led to innovative and novel approaches by forwarding thinking companies like Oeke Sound’s Soothe series and Izotope’s range of processors with advanced algorithms that were impossible in the analog domain.

“Plug-in” interoperability standards were established by leading Digital Audio Workstation software manufacturers Steinberg (VST) and ProTools (RTAS, AAX) so that any software developer could build modular processors that could be inserted into a Digital Audio Workstation’s channels similar to routing an outboard processor device into the signal path of an analog mixing console. Most early effects processors were optimized to do one thing with maximum CPU efficiency. Saturation was rarely an “default feature,” as it could ruin the advertised specifications with aliasing unless over-sampled, which would be CPU expensive and confuse or frustrate users.

For the generation that learned to mix in these early systems, this lean modular plugin approach led to a lot of creative stacking of lightweight processors that would have been difficult in an analog studio: EQ–> Compressor–> EQ–> Compressor–> Multiband Compressor –> Limiter and so forth. Sound familiar? The other factor that was straightforward in DSP was the ability for a DAW to delay compensate the entire mix with perfect phase alignments so that plugins could preview and analyze forthcoming signals before playback. This opened the door for true brick-wall limiting without clipping (the Waves L1 Ultramaximizer in 1994), look-ahead attenuation envelopes and Root Mean Square analysis.

The Waves L1 Maximizer ca. 1997. Source: Waves/The Internet Archive

None of this was possible in a multitrack analog system, and it’s easy to take for granted how revolutionary that was vs. analog processing.

ReaComp – The Super Utility Compressor

There is one plugin from the 00s that may be among the greatest sleeper plugins of all time: ReaComp, the proprietary stock compressor from Cockos’ popular DAW, “Reaper” that was generously made available for free as VSTs for all compatible platforms.

Nearly eighteen years after the first freeware version was introduced, ReaComp still provides one of the most extensive ranges of control parameters available in a lightweight broadband compressor. Instead of obfuscating the underlying functions beneath a few familiar knobs pre-tuned for optimal results, the Cockos team throws the kitchen sink into a compact UI, exposing many of the parameters that DSP developers themselves use under the hood to emulate familiar hardware. The users who understand them appreciate their potential, but ReaComp’s complexity and lack of skeuomorphic UI leads the uninitiated to assume it’s some primitive relic from the Windows 95 era. To quote one Reaper enthusiast, it’s really a “dynamics engine.” To quote Han Solo, “She may not look like much, but she’s got it where it counts, kid.”

With the exception of Fabfilter’s Pro C2 ($169), there aren’t many utility compressor plugins capable of more possibilities than ReaComp ($0.00). It can approximate the control characteristics of many famous dynamics compressors, and do some things that no other can. The only thing it “lacks” is a saturation stage to emulate analog character, but that is easily solved by combining it with your saturation modules of choice.

Compared to many compressors, ReaComp can be complex to use. Sheffield UK-based audio engineer Dan Worall made a couple of hands-on videos comparing a few modern elite compressors to the humble ReaComp, along with some tricks to workaround limitations with its feedback mode. Dan is a highly experienced engineer who enjoys exploring DSP in an applied context, but also understands how it works and doesn’t hesitate to back up his observations with the analysis tools like Plugin Doctor. If he sees something he doesn’t like, he says so.

His conclusions on ReaComp are not sensational or superlative. ReaComp’s flexibility and lack of guardrails means it has quirks. As a user of Reaper, perhaps he was providing a measured comeback to claims that “ReaComp can do anything and is the only compressor you’ll ever need!” I don’t buy that claim. While most of us prefer a familiar default utility compressor, there is remarkable variety in the design of audio leveling solutions, and many are just perfect for a specific use case with minimum fuss.

In the spirit of good collegial science, I felt compelled to try to reproduce some of Dan’s findings and take his experiments a step further. But first, an overview of ReaComp, because the manual never tells the full story.

It’s crucial to note that this is a review of the portable VST version 2.36 (last updated January 2, 2016). This is not the same as the latest version available to Reaper users.

The User Interface

Sorry kids, no cool metal textures or retro knobs. It’s about as exciting as a spreadsheet. Daddy has to work on this mix for a client right now. This is a tool for grown ups.

ReaComp’s design is utilitarian. Function over fashion. As I’ve gotten older, I increasingly find skeuomorphic designs superflous. ReaComp doesn’t earn many points in the usability department either, but perhaps that depends on what control schemes you’re accustomed to. It was designed in an era where the average viewport resolution was much smaller, so the developers were challenged to pack a lot of controls into a small space. With that in mind, it’s actually quite tidy. The minimalist UI based on default OS controls actually aged quite well compared to a popular alternative from the late 90s, the legendary Waves Renaissance Compressor shown below.

Wave Renaissance Compressor is arguably the most popular compressor plugin of all time. It’s impossible to estimate how many hit records have used it over the past 25 years.
As a point of comparison regarding UI complexity, the Kush Audio UBK-2 released in August 2024 is flamboyantly designed and packed with features including multiple pre and post saturation types. Knobs aplenty to twiddle. Significant CPU horsepower is recommended. All you wanted to do was compress your signal?

At first blush, the horizontal sliders of ReaComp may seem a bit strange, but over time I’ve grown to appreciate their elegance. All parameters have clearly visible numeric key input fields for fast precise settings.

Above are the maximum values of all settings for quick visual reference.

Attack: Ranging from true zero (unusual) to 500ms.

Release: Ranging from true zero to a generous 5000ms. A true zero attack and release are usually intentionally prevented by most designs, because they introduce hard clipping. Yes, ReaComp can be a clipper. You’ve been warned.

Classic attack: A curious checkbox with no tooltip. Does it indicate a classic attack like a program dependent design similar to an 1176? More to come on that.

Auto Release: does it indicate a program dependent release like an LA2a? Is it transient forgiveness during longer release settings? Or is it just a truly automatic setting that overrides the release setting? When enabled, the auto release function attempts to automatically adjust the release time to prevent sudden and dramatic compression changes. As we’ll see later, this mode follows a traditional pattern established in analog predecessors that adjusts the release sort of like charging a battery (well, capacitors) based on the duration of constant energy in the signal to strike a balance between sudden transients and longer loud passages.

Pre-Comp: a unique control for up to 250ms look-ahead with a range you won’t find elsewhere. What is it and how does it interact with the other attack options?

Knee-size: A relatively common control in modern digital utility comps but with a wide range of up to 24db. While this is impressive and unusual, there are no guardrails preventing it from doing strange things.

Detector Input: A wonderful and rare feature in the form of a drop down selector that includes the compressed signal output for feedback compression.

Lowpass: A versatile low-pass filter for the detector input that extends the entire frequency range so you’re not limited.

Highpass: A versatile high-pass filter for the detector input that extends the entire frequency range.

RMS size: Perhaps one of the most valuable features of ReaComp, you can define a sample window of up to 1000ms for Root Mean Square analysis by the detector circuit which averages the energy of the waveform for a more relaxed and forgiving compression. This also applies to the Pre-Comp look ahead time, meaning you can include “future” signal in your average.

Output Mix Section:

To the right we have vertical sliders for wet and dry signals, which today is common in the form of a “dry mix” knob or similar, but in 2007 this was relatively rare. This allows for parallel compression blending directly in the UI without any external routing.

Preview filter: Allows you to listen to the detector input signal. Useful for tuning any equalization via the Lowpass and Highpass filters.

Auto make-up: A common feature of modern compressors, it analyzes the amount of gain reduction to automatically set the makeup gain.

Metering

While ReaComp’s metering is not lacking for its era, and much better than a mere single VU meter on classic compressors, I strongly prefer the transfer curve metering like that found on ProTools and Studio One’s stock compressors to visualize the signal passing through it.

The combo visualizer with animated transfer curve in Studio One

That said, ReaComp has three visual meters that are useful in combination:

  • Input: The threshold control fader on the left lights up with a familiar vertical green peak meter so you can accurately adjust your threshold visually based on input.
  • Gain Reduction: The primary meter right of center, while not labeled, is a responsive and accurate gain reduction meter that intuitively fires downward.
  • Output: The output meter is contained within the Output Mix section to the right.

Individually, none of these features are exclusive to ReaComp, but to have them all in one tiny free plugin UI with a practically non-existent CPU footprint is impressive.

I wasn’t expecting any surprises in how each of these controls work, and wanted to better understand how they might behave or misbehave together. What I discovered surprised me.

Performance: The Basics

ReaComp handles basic attack/release utility duties well with a few points to note:

  • Attack, in the absence of other related parameters (knee, classic attack and pre-comp) is strictly linear beyond threshold, which means it can be aggressive. Rarely should attack be set to zero unless combined with a bit of knee or pre comp. Compressors with fast settings are prone to introduce unintended distortion.
  • Release, in the absence of other parameters is atypically “slightly” anti-log. Its precision and wide control range makes it unforgiving on low frequencies, so you’ll rarely want to set it below 50-60ms on signal containing significant energy below 250hz, else you’ll start to encounter distortion, harmonics and tonal changes. That said, most harmonics generated by lower frequencies will be below nyquist and below the noise floor of a busy mix, so don’t be too paranoid if it sounds good.

Attack and Release Characteristics

Dan Worrall astutely pointed out that ReaComp’s default release behavior is anti-log. This isn’t a bug, but it’s different than the behavior of most compressors and contributes to a “pumping” sound that isn’t always desirable. Below we’ll see this behavior is affected by knee settings. Most compressors actually implement a slight minimum knee, even if unadvertised, whereas ReaComp allows the user to set the knee from true zero to taste. The light anti-log curve at zero potentially provides more flexibility and range.

Here we see the default attack and release behavior (despite a bit of pre-comp lookahead). The input is shown at top in yellow-green and the output is rendered in pink below. Note the 50ms release after the louder signal creates a slightly anti-log arrow point with a hard knee when gain reduction returns to target.

Knee Size vs. Attack & Release

Knee size affects the behavior and slope of both attack and release curves. A sufficient knee also compensates for the anti-log release curve and results in a more musical sound. A knee of 2dB or greater to taste is recommended in most applications. The portable VST version 2.36 utilizes the original knee behavior now called “Weird Knee”.

Above: Note the smoothing of the anti-log release on otherwise identical attack and release settings.
Above: Here’s a comparison with a long attack and release of 100ms with no knee.
And the same settings with a knee of 6db. Note that the attack is not substantially altered, but the release is elongated and smoothed.

Knee: Compression Below Threshold

Compressors and limiters with wider knee settings traditionally start compressing gradually at a reduced ratio before the signal crosses the threshold. ReaComp changed the knee behavior characteristics in 2018 to more reliably match traditional behavior, and introduced a checkbox for “Weird Knee” to enable the old knee and as an option for backward compatibility with older presets. However, the “Weird Knee” available by default in the portable version also exhibits gradual compression ahead of threshold.

Yes, I did this manually in Google sheets using a simple set of input sample points at 1 dB intervals, so apologies for the unusual x/y values. Analysis of hard knee behavior at 4:1. The threshold is indicated by the horizontal line at -4db.
Analysis of soft knee behavior at 4:1 with a larger 8db knee. As we can see, knee has a significant impact on the ballistics. The threshold is indicated by the horizontal line at -4db. Compression begins before the threshold. Given these results, knee sizes at this range are substantially flattening the transfer curve, so the 24dB maximum doesn’t seem necessary, and we’ll see its side-effects below.
Here is a 700hz sine wave fade up test at the 4:1 8db knee settings with -4dB threshold. The input signal is the darker blue horn shape.
Above: note the small amount of gain ~1db reduction on transients with the threshold above the input signal, even with an extreme 24dB knee. When the the threshold was raised and knee size was reduced, there was still some observable attenuation.
The knee at extreme settings may yield unexpected results. Hmm. Perhaps this is why the knee was described as “weird”. I don’t imagine practical situations where such high knee sizes are useful.
With knee size at zero, we see a predictable behavior with ratios in the limiting range.

Classic Attack

This one frankly confused the hell out of me. The manual states,

“With classic attack enabled, the compression ratio is gradually reduced as the volume increases above the threshold, gradually restoring ratio of 1:1. This allows the loudest passages to pass uncompressed.”

Ok… is it just me or is this description unclear? I have to assume the described “gradual reduction” is only within the attack range, otherwise this would behave like an expander. We’ll proceed on that assumption.

Classic attack is “program-dependent”. This is often desirable, and is similar to behavior found in vintage compressors. In my analysis, the program dependent behavior was around 3ms of “hidden” attack forgiveness that gradually increases at frequencies above around 900-1k. This was confirmed via transient pure sine pulse tests at various frequencies. In other words, fast transient signals above 900k begin to pass without compression. This is not quite the behavior described by the engineers above. I noticed this by accident while analyzing a drum loop.

The playback line on the orange source above is passing through a medium-high pitched snare with most of the fundamentals in higher midrange. You can see the signal is well above threshold but no gain reduction is happening.
Above we see the same settings, but now on playback of a low frequency kick. The classic attack attenuates the transient with around 4db of reduction. Assuming that there is a ~3ms hidden attack buffer, at first I thought this may simply be a matter of wavelength. A 50hz wave has a period of around 20 ms, but we can clearly see that the snare hit to the right has equal power and longer decay than the kick, and certainly exceeded threshold greater than 3ms. It otherwise would not make sense that pulses of equal power at various frequencies would receive different attenuation if there weren’t an intentional frequency-dependent algorithm in play?

Auto Release

Auto release in ReaComp prevents sudden changes in gain reduction. What this translates to in practice is going to be program dependent. Hugh Robjohns over at Sound On Sound explains hardware auto-recovery designs very well:

“The dual-stage or auto-recovery system is an attempt to provide both fast and slow recovery times simultaneously, handling the loudest signal transients with a fast recovery to maintain the perceived loudness, while cushioning the quieter signals with a slow recovery time to avoid pumping. Hopefully, this will give the best of both worlds with none of the drawbacks, and avoid the inherent compromises of a fixed recovery time.”

Waves introduced a more sophisticated approach in the 90s with what they call Auto Release Control (ARC). Their original documentation describes it in detail:

“In many uses of compressors, the exact choice of time constants is set as a careful choice of reaction to RMS and peak transients. To allow more constant compression with less artifacts, the release time must change to control different parts of the signal. In ARC, similar to the human ear, RMS and peak transients are analyzed and reacted to differently. In general, the release is faster for peak transients and slower for the overall RMS level.”

“For instance, with a relatively constant compression of 4dB, peaks beyond this need faster release times. The ARC system does exactly this, varying the release time to fit the ear’s expectations while increasing RMS, and without creating distracting artifacts. In this way, the Renaissance Compressor can serve as a leveler plus a fast compressor simultaneously. This feature also serves gentle mastering applications quite well, but generally with slower release times.”

In our test signal above, we see the source in yellow, auto-release engaged in green and auto-release disabled in red. Quite different. Note the knee-size isn’t sufficient to compensate for an anti-log recovery curve.
With a much slower release time set, we can see it’s identical to the previous test, overriding the manual setting and does not scale base on the release setting. It seems to accentuate / ignore the knee size that compensates for an anti-log recovery curve.
Above we see a fast attack and release on a set of transient pulses. Green renders auto release on, red auto release off. Here we see that while there are some slight differences in the release time, but the auto-release is handling the snappy auto-recovery of transients in the typical way we would expect.

While the handling of transients works well, the slow release of a longer signal of equal energy results in a dramatic drop of subsequent material, but this is typical of classic compressors that use multi-stage capacitors with different discharge rates. The above would also indicate a similarity to ARC algorithms, as the longer energy signals have a higher RMS. If you want rapid release on everything, just set a manual release.

RMS Size

A widely adjustable RMS size is one of the most useful features of ReaComp and isn’t common in most utility compressors. Root Mean Square is simply the formula for averaging the power of a waveform over a period of time. Increasing the size of the sample window will result in more relaxed and musical results. RMS compression is useful for buss compression and mastering. Adding a touch of RMS to taste is always worth trying. Longer RMS sizes will typically attenuate less, retain the microdynamics and will impact the behavior of both attack and release settings. Let’s explore some examples below that demonstrate this interplay.

Advanced Techniques: RMS & Pre-Comp

Pre-Comp

Pre-Comp leverages your DAW’s VST compatible delay compensation framework to implement a look-ahead range allowing the compression to gradually begin a specified number of milliseconds before the threshold is reached by a forthcoming signal. This is useful in specialty wave-shaping scenarios where you want to implement an attack time range (slope) but ahead of the forthcoming signal.

Level Rider – Combining Pre-Comp and RMS Size to Level Out A Vocal

A common prep stage for an assistant engineer in a pro studio is to take an incoming set of files in a project, organize them to the mix engineers’ preferences and inspect individual tracks for obvious inconsistencies in volume. A common task is visually inspecting vocal takes that may have been raw clean captures where the singer was moving off mic or the gain was inconsistent across multiple takes and sessions. In a poorly recorded project, this can mean slicing every phrase or syllable and manually adjusting the volume envelope so that the signal is consistent yet natural. Grunt work. While this seems like what a compressor is designed to do, a compressor will be more susceptible to artifacts if every part of the phrase is significantly different. Heavy compression to level audio also tends to sacrifice micro-dynamics. A consistent input will yield more reliable results from saturation or a character compressor like an 1176.

Plugin developers have implemented this “gain riding” functionality in specialty processors, but ReaComp can also be used to automate this laborious step, or to simply provide a different approach to vocal compression that preserves micro-dynamics. Using Pre-Comp lookahead and RMS size in tandem, the plugin will analyze the average energy of the signal and adapt to it dynamically. I’ve experimented with various settings and found that the simple rule of thumb is the Pre-Comp should be half of the total RMS window. This puts half of the “rolling” average ahead of the playback point and half behind. The maximum pre-comp time is 250, so up to 500ms of split RMS analysis is possible. The total time will vary depending on the signal, but as you can see below, it does a good job of leveling out each “blob” while retaining the micro-dynamics of the phrase.

Modest settings on a vocal take with a lot of variations in dynamics. I found this range to be best on this particular take before it begins to sound unnatural on the louder sections. Note that attack and release are at zero — the RMS detection is taking care of a smooth ride. The knee setting shown is not the value used. It should be set to zero.
Keeping the same RMS settings, higher ratios result in more extreme loudness, but note how the microdynamics stay true to the original. The knee setting shown is not the value used. It should be set to zero.

Attack and release are bypassed? Yes, because the RMS size is large enough to result in a smooth ride. You may adjust to taste. Being an extremely CPU efficient processor, stacking three of these in series with decreasing window sizes may also be interesting, just keep in mind that pre-comp introduces delays across the whole project, so this is best as a preparation step.  When you’re satisfied, bounce the output and proceed with your mix.

This little trick alone is worth adding ReaComp to your arsenal.

Clipper?

With an attack time and a release time of zero, the ReaComp is simply hard clipping the signal. This is distortion. How that clipping plays with other parameters like knee size and RMS size may yield interesting results. However, clipping without oversampling will generate aliasing. The anti-aliasing filters labeled “AA” in the ReaPlugs version do not appear to be well implemented, and in my host I observed no evidence that they were capable of oversampling or really doing anything at all to prevent obvious aliasing. In short, don’t use this as a clipper except on low frequency signals. There are much better clippers and saturators available.

With maximum “AA” there was no reduction of foldback aliasing. Perhaps this was a limitation of my host.

Feedback Compression

The Detector Input dropdown selector offers a variety of convenient input options, including sidechain compression from an aux input (if your host supports the routing). It also has an option to use the output of the compressor, which allows for feedback compression. I discussed the importance of feedback topology in the 1176’s famous character in my last post. Feedback designs let more transients through before the detector responds. The detector reacts to a signal that’s already been compressed, leading to smoother compression and importantly, less over-compression artifacts.

The feeback mode of ReaComp is useful for achieving a fast but musical character not dissimilar to an 1176. The downside is that ReaComp’s actual ratio in this mode is limited to 2:1, even when the detector ratio is set higher. This of course can be compensated for to some degree by lowering the threshold, but it’s still a known limitation that Dan Worrall developed a workaround for using two ReaComp’s in series. But if I really needed a feedback compressor, I’m not going to load two plugins, I’d reach for an 1176 or the (now deprecated) Tokyo Dawn Labs Feedback II.

Limitations of ReaComp

The most recent versions of the native ReaComp for Reaper have updates that were not ported to the free ReaPlugs package, but I’m not aware of any major improvements beyond the following:

  • The old knee behavior was deprecated and labeled as “weird knee” option for backward compatibility
  • the largely useless Anti-Aliasing filter is hidden by default, and is only activated by using a legacy preset.
  • improvements of slider sensitivity / calibration
  • and the addition of an improved feedback implementation on the detector circuit that uses the pre-output fader input so you can independently control the wet/dry makeup gain without affecting the compressed signal feeding back to the detector input.

Conclusions:

Since every modern DAW has a lightweight utility compressor, ReaComp is attractive if you need some of its more advanced capabilities. Let’s face it, the compressors available in the latest versions of ProTools, Logic and Studio One are comprehensive and cover most flavors (opto, VCA, FET, RMS etc). However, the variable RMS feature makes ReaComp perfect for specific use cases. Frankly, its quirks prevent it from being an all-round replacement for my go-to favorites, the highly flexible Studio One Compressor, VladG Molot, Klanghelm MJUC, and TDR Kotelnekov.

Pros:

  • The CPU usage is practically non-existent. Hundreds of instances could be used in a modern mix.
  • The power features of this plugin that make it worthwhile are RMS and look-ahead Pre Comp.
  • The “level rider” recipe alone justifies its value for project preparation duties.
  • Knee size is useful within lower ranges below 8db.
  • Auto Release in this version is workable and similar to classic compressor behavior.
  • The anti-log release characteristics are atypical but easily remedied with a knee size. In fact, anti-log release is a feature of the highly regarded Elysia Mpressor ($199).
  • The classic attack mode is a bit surprising, but still useful.

Cons:

  • Its Achilles heel is not so much a design flaw as its inherent flexibility and lack of guardrails leading to unintended results to the uninitiated.
  • Distortion and aliasing accidents are going to be common with the wrong settings of fast attack and release, but this is true of any fast compressor.
  • ReaPlugs is only available for VST compatible hosts outside of Reaper.
  • The “weird” knee behavior is atypical but an interesting alternative to garden variety alternatives.
  • It’s been nearly a decade since the last version release of portable ReaPlugs, but this version is stable on 64bit hosts and the VST standard will likely be around for a very long time.