
After about a year of experimenting, I found the ideal listening chain, shown in the figure below:

The blocks are color coded to show the loudness compensation in blue (for all listening environments), the headphone-related items in yellow (if listening through speakers, you can turn these off, the room conditions in orange (without Crescendo processing these two cancel each other out), and Crescendo processing for hearing corrections in red.
Let’s take each one. The loudness compensation provides for proper (mostly bass) response when listening at reduced volume levels. My system uses my UltimateVol plugin which is calibrated for listening nominally at 73 dBSPL. As I dial in other levels, e.g., 68 dBSPL, it raises the bass level accordingly. Typically this happens with an overall bass amplitude boost of around 1/2 the dB distance from 73 dBSPL, going through a pair of gentle IIR shelving filters. The treble gets a slight boost too, at lower listening levels. But most of the boost is in the bass region. The loudness compensation is suitable for all listening, through either headphones or speakers.
Next comes a headphone crossover for headphone listening. I use the GoodHz CanOpener plugin for this. It provides a superb simulation of listening through speakers. Bass is mostly centered, with increasing stereo width expansion toward higher frequencies. I use it with no internal EQ nor gain compensation since my UltimateVol is doing a proper job of this for calibrated listening sessions. I have it adjusting with the HyperRealistic HQ settings, with 150% crossfeed and 60 deg speaker placement.
The Listening Rolloff (-1 dB/oct) is there to provide the sensation for Crescendo of what a proper listening room sounds like. The folks at JBL Research have shown that a proper listening environment has that -1 dB/octave rolloff due to natural damping of higher frequencies in the room. We have to assume that good mastering engineers are listening in good listening rooms, and hence, their mix output reflects what they hear in such an environment. So we have to provide that too.
If you had an excellent listening room, with perfect hearing (no need for Crescendo) then you could elide this block and the corresponding room flattening EQ on the output side. Your room would take care of itself.
But if you need help hearing those higher frequencies, using Crescendo, then Crescendo needs to know what you are listening to. Hence we have to roll off the sound just ahead of Crescendo, then flatten the room out on the output side, since Crescendo needs to feed a spectrally flat reproduction system.
Next comes the 3 blocks for Crescendo processing. For folks without any hyperacusis (hyper-recruitment) you can skip the pre-EQ stage. But for us with hyper-acusis at some frequencies we need to dip the volume going into Crescendo so that it will produce a proper steep compensation, and prevent the sounds at those frequencies from becoming over-loud.
Crescendo is the only nonlinear processing element in this listening chain. It provides frequency selective nonlinear compression (also known as dynamic-EQ) in order to cancel out the effects of sensioneural hearing loss. That compensation keeps all musical harmonics in proper proportion to their fundamental, allowing oboes to continue sounding like oboes, and not like muted Jazz trumpets.
On the output side of Crescendo we have an Amplitude Compensation block – just a simple volume control. Crescendo will boost the high frequencies, and at times this can produce clipping on otherwise nominal sound levels going through the processing chain. So we compensate by dropping the amplitude here, and then make up with amplifier gain on the output side. With my severe hearing loss, I need to give it about 18 dB of headroom in this Amplitude Compensation to cover all dynamic ranges in symphonic music. Most pop music has considerably less dynamic range, and I might be able to get away with as little as 6 dB of headroom here.
Next, we head out to the amplifier and speaker/headphones. Crescendo has to assume a flat spectral response in those transducers. But they generally aren’t flat. So the first output block compensates for a room, assumed to have the -1 dB/octave rolloff. Headphones aren’t rooms, but they are generally tuned to provide the same sensation as a room, and so they have that rolloff built into their reference curves.
The final block, for when using headphones, compensates for any errors in the headphones in reaching the ideal reference curve. Sennheiser HD-650 headphones are generally regarded as flat sounding, and their compensation is usually very slight. Mostly a bit of makeup gain in the midrange and a bit of bass boost. But other headphone models may need stronger correction.
I have all of these blocks as plugins in my output chain, which goes through the Rogue Amoeba SoundSource system running on my Mac. The output of SoundSource is directed through my DAC to my amplifier and speaker/headphones. On one of my Mac’s I use a Benchmark DAC3 which is very good. On the main music system Mac, I use a Cranesong Solaris, which is regarded as among the very best DACs. I do prefer the sound coming out of the Solaris, but the DAC3 is a very close second choice.

I run my audio sessions at a nominal -23 LUFS. And sometimes I monitor for that level coming in, using the excellent Youlean Loudness Meter. It has no effect on the sound, and simply monitors the loudness levels coming in. When not monitoring, I leave it disabled to preserve CPU cycles.
On my main Music Mac, with an 8-core Intel i9 processor, all of this output processing in SoundSource takes only around 3-5% of CPU bandwidth. Very minor. It takes a bit more, about 8%, on my other Mac with a 4-core Intel i7 processor. The listening on both systems is excellent!!
- DM