DIY Zeroth-Order Crescendo

Okay, so I now have invented a Crescendo. But in the early days it took massive horsepower to run it, in a big expensive outboard 3U rack unit. Not very portable. And what happens if the 3U unit goes belly-up and is no longer available. What will I do? I need Crescendo!

So I embarked on a long campaign to find approximate substitutes for Crescendo, just in case I ever need them. They won’t perform exactly as well as Crescendo, but they are a heck of a lot better than nothing.

Looking back at the diagrams I showed for Crescendo anti-recruitment compression, and the diagram shown for CLAS compression, I got an idea…

Notice anything similar? Not exactly the same shape, but similar?

So I embarked on a quest to find what amount of linear compression could be added to the dry signal to create a Crescendo compression curve?

It turns out that a fairly credible approximation to Crescendo is to add a very particular linear compression to the dry signal. By credible, I mean to within a few dB, plus or minus, just about everywhere over the dynamic range of music.

The particulars are:

  1. Compressor Threshold = Your threshold elevation – 20 dB
  2. Compression Ratio = 4
  3. Compressor Makeup Gain = 21.3 dB

So, for example, if you want to work at 4 kHz, and the threshold elevation there is about 60 dB, then you need a parallel compressor:

  • Threshold = 60 – 20 = 40 dBSPL
  • Ratio = 4
  • Makeup Gain = 21.3 dB

That’s all well and good, but how do I convert SPL to what I need in the DAW using dBFS? For that, assuming you are like most other humans, you can guesstimate that a 1 kHz sinewave at -17 dBFS will produce a sound level of 77 dBSPL when you have your amplifier adjusted for loud but comfortable listening. Just about everybody migrates to those levels as being most pleasing. Not as loud as in a movie theater, but a good listening level in your room at home.

If that is the case, then we can guesstimate that we should just subtract 94 dB from whatever SPL level to derive the corresponding dBFS level. So that 40 dBSPL compression threshold becomes -54 dBFS.

[Note: I winged it a bit here… Crescendo actually operates in the dBHL domain – hearing level above absolute hearing threshold for unimpaired hearing. That isn’t the same as dBSPL, except at 1 kHz, where they both agree on both zero point and scaling.

In low bass and high treble regions, there is considerable departure between dBHL and dBSPL, in both their zero points and scaling. But over the range from, say, 500 Hz to about 6 kHz, they are almost about the same as each other. Good enough for our first stab at a DIY Crescendo…]

But all of this so far was just aimed at my 4 kHz region. What about everywhere else? Well, yes… We need to somehow apply different parallel compressors over different frequency ranges. The Crescendo ideal is to work in 1 Bark bandwidths, which is roughly 1/4-1/3 octave in the low treble range. So you’d need something like a 30 band graphic EQ into which we would place a parallel compressor into each sub-band. Looking around, that is still a no-go.

But what we can do is take our DAW multiband compressor and maybe arrange to have at least 4 bands, instead of the Crescendo 100 bands. There are actually about 24 Bark bands ranging across our audible range from 20 Hz to 20 kHz. Splitting that into 4 subbands means that each of our multiband compressor bandwidths will span about 6 Bark. That’s pretty crude, but remember, just about anything is better than nothing at all. And this is definitely better than just using EQ.

If we split up the compression bands into 4 equal Bark subbands, then we would assign the compressors to Bark 0-6, Bark 6-12, Bark 12-18, and Bark 18-24. Converting those back to normal Hz units these are:

  • Bark 0-6 = 0-630 Hz
  • Bark 6-12 = 630-1700 Hz
  • Bark 12-18 = 1700-4400 Hz
  • Bark 18-24 = 4400-20,000 Hz

Now we have to choose the compressor thresholds. Our hearing has changing threshold elevations with frequency, but as a first approximation we could choose the threshold elevation corresponding to the mid-band frequency in each compressor. That would be the threshold elevation at Bark 3, Bark 9, Bark 15, and Bark 21. In normal units, these are 300 Hz, 1 kHz, 2.7 kHz, and 8 kHz.

As you can see… approximation is the art of compromise after compromise.

Normal audiology testing frequencies are 250 Hz, 500 Hz, 750 Hz, 1 kHz, 1.5 kHz, 2 kHz, 3 kHz, 4 kHz, 6 kHz, and 8 kHz. Every half-octave starting at 500 Hz. And our chosen mid-band frequencies line up pretty well with 250 Hz, 1 kHz, 3 kHz, and 8 kHz.

But actually… I wouldn’t recommend those frequencies. For one, you are going to use the most extreme, and most uncertain, threshold elevation at 8 kHz to try to correct music which has very little power up there. That’s a full octave above the highest key on the piano. But our band will also contain some of the most important frequencies needing correction, like 4 kHz – the last key on the keyboard. And 6 kHz where sibilance and cymbals live. That doesn’t sound very smart.

The most important portions of music spectrum for you are probably down in the range from 1 kHz to 8 kHz. So we should try a little harder to apportion our compressors to ranges more focused on these important frequencies, and to heck with everything above 8 kHz.

So, feel free to experiment on your own, but I’m going to apportion my compressors across the range from 750 Hz to 8 kHz, and lump in everything below 750 Hz with the bottom band, and everything above 8 kHz in the top band.

We have to go back to Bark frequency space to do the apportioning. 750 Hz = Bark 7, 8 kHz = Bark 21. Those will be our top and bottom band edges. We have 4 compressors, so we get to choose one more band edge. The mid point between Bark 7 and Bark 21 is Bark 14 = 2.3 kHz. So our compressors are now arranged as:

  • 0-750 Hz
  • 750-2,300 Hz
  • 2,300-8,000 Hz
  • 8,000-20,000 Hz

Our center frequencies are now Bark 3.5 = 350 Hz, Bark 10.5 = 1.4 kHz, Bark 17.5 = 4 kHz, and 8 kHz. (!! why not Bark 22.5? Well, that’s 12 kHz, and there is no audiology that high up. So just use your number at 8 kHz.)

… now that that’s settled, let’s move along with estimates of our compressor thresholds… Remember, compressor threshold = threshold elevation – 20 dB.

For myself, the 4 kHz threshold elevation is about 60 dB. Working up and down in frequency, my 8 kHz elevation ought to be about 75 dB, and my 1.5 kHz elevation ought to be about 40 dB. The elevation at anything below 750 Hz may as well be zero.

That means my compressor thresholds ought to be -114 dBFS (0-750 Hz), -74 dBFS (750-2300 Hz), -54 dBFS (2300-8000 Hz), and -39 dBFS (8 kHz and up).

My multiband compressor won’t operate with thresholds below -60 dBFS. Yours may be different. But there isn’t any correction needed down there anyway, so I could just as well disable that bottom band in the compressor.

The next band, needing -74 dB threshold needs to be adjusted to operate with a threshold of -60 dB. For that I just need to drop the makeup gain from 21.3 by the difference in thresholds (14 dB) multiplied by (1 – 1/R), for compression ratio R=4. That makes my makeup gain become 10.8 dB.

The remaining 2 bands will perform okay without any fiddling.

So, in summary, our compressor has been set up as:

  • 0-750 Hz, channel disabled
  • 750-2,300 Hz, threshold -60 dB, ratio 4, makeup 10.8 dB
  • 2,300-8,000 Hz, threshold -54 dB, ratio 4, makeup 21.3 dB
  • 8,000+, threshold -39 dB, ratio 4, makeup 21.3 dB

This compressor won’t take exactly what numbers I put in, but they are close enough. I “disabled” the bottom channel by using a makeup gain of -20 dB at a threshold of -60 dB and the ratio of 4. Music contains most of its power in this bottom band anyway, so the bottom compressor will mostly operate in full-out compression. You won’t hear it.

This is a parallel compressor, which means we need to split the audio coming into the output channel and send it to an aux channel containing this multiband compressor. That aux channel should then feed the output channel too.

Here is a screenshot of my mixer, showing my main audio channel on the left, feeding the main output channel, and sending 100% to Aux 1 where I planted the multiband compressor, also feeding the main output channel.

The mixer is set up to process live sound on In 1-2, from iTunes or elsewhere, and provide the processed sound out on the main stereo output device.

It works… better than nothing… but not really a Crescendo. It’s a low-cost improvement though…

[ Feel free to experiment.

Oh! And if you want to convert between Bark frequency and kHz, use this…

(defun cbr (fkhz)
;; Traunmuller (1990)
;; this gives negative barks at low frequencies!
;; … but it agrees within 0.05 bark with measured band edges
;; e.g., (cbr 0.4) = 4.01 bark
(- (/ 26.81 (+ 1 (/ 1.960 fkhz))) 0.53))

— or in English —

Bark = 26.81 / (1 + 1.96 / FkHz) – 0.53  


One final point… The filters used to split apart the bands in the multiband compressor may or may not be phase linear. If they are phase linear filters, then be sure to use latency correction in all your channels so that the direct and processed signals arrive at the output together. Otherwise, you’ll get comb filtering across the audible spectrum.

If your filters are not phase linear, then you’ll probably get comb filtering across the audible spectrum, even if you do properly invoke latency corrections.

So in both cases, you could just as well use a second Aux channel, send the dry signal 100% over to that new channel, plant an idempotent multiband compressor over there, to provide exactly the same band-pass filtering. Then disable the dry channel from feeding the main output channel, and instead, direct the idempotent multiprocessor to the output channel in its place.

That produces exactly the same kinds of phase shifts on both dry signal and processed signal, so that they will both end up arriving together, and also almost completely remove any possible comb filtering due to phase shifts between them.]

  • DM

Author: dbmcclain

Astrophysicist, spook, musician, Lisp aficionado, deaf guy

Leave a Reply