How I approached sibilant detection
A de-esser has one job: find the harsh “s” sounds in a vocal and turn them down without touching anything else. Most of the attention goes to the second half, the gain reduction. In my experience the first half decides everything. If detection fires in the wrong spots, you're just attenuating the wrong moments, very precisely.
This is how I approached the detection problem during de-esser research for NoiseWorks. I'm keeping it at the concept level, the tuning values and implementation details stay with the client. The thinking carries over to pretty much any detector though: compressors, gates, transient tools.
Detection first, processing later
First decision: refuse to work on both halves at once. I built the dumbest processor I could, plain wideband gain reduction, and put all the work into the detector. When the only thing that changes is detection, you can actually hear whether it fires in the right places. Tune both at once and every artifact has two possible causes. You learn nothing.
Why the obvious approach fails
The obvious idea: sibilants are bright, so watch the energy in the high band and trigger when it crosses a threshold. It works on exactly one file. The one you tuned it on.
The problem is dynamics. A whispered “s” never reaches an absolute threshold and sails through untouched. A loud, projected phrase pushes normal vocal content over the threshold and the de-esser starts chewing on words that were never sibilant. You can chase this with the threshold knob all day. You're only picking which failure you prefer.
Compare two signals, not one
The fix is to stop measuring one thing and start comparing two. Run two envelope followers. One on the broadband signal, the body of the voice. One on the isolated sibilance band. Trigger on the ratio between them. A sibilant is a moment where the high band is a lot hotter than the voice as a whole, and that's true for a whisper and for a shout. One setting covers the whole dynamic range.
Picking the band matters more than it looks. “Somewhere up high” isn't good enough. Too wide and vocal harmonics leak into the sidechain and cause false triggers. Too narrow and you miss half the esses. I spent real time here, including soloing the sidechains of de-essers producers already trust, just to hear which frequencies those tools actually listen to. Reverse-engineering by ear is underrated.
The crossover trap
To process only the ess band you have to split the signal, and there's a pitfall that doesn't announce itself: standard Butterworth crossovers aren't transparent when you sum the bands back together. Phase shift between the branches causes partial cancellation and amplitude bumps around the crossover point. Your bypass isn't a bypass anymore, even with zero gain reduction.
The fix is old news in loudspeaker design: a fourth-order Linkwitz-Riley crossover. Both bands sum back to flat with coherent phase. If you've ever A/B'd a split-band plugin and felt it changed the sound with all processing off, this is usually why.
Lookahead
A sibilant onset is fast, a transient of a few milliseconds. A causal detector can only react after the fact, so the sharpest and most annoying part of the “s” is already through before the gain reduction lands.
The standard pattern: delay the audio path by a few milliseconds and run detection on the undelayed signal. The detector sees the future, the reduction lands on the onset instead of trailing it. Lookahead isn't cheating. It's paying a little latency to undo causality.
Envelopes decide if it sounds like a tool or a bug
Even with perfect detection, hard-switched gain reduction sounds bad. Abrupt attack reads as zipper noise, abrupt release as an unnatural letting-go. Two things helped. A soft knee, so reduction fades in as the ratio approaches the trigger point instead of snapping on. And a shaped release, fast at first so the next syllable's transient survives, then easing out to avoid clicks. Linear ramps are the first thing you try and the first thing you throw away.
Testing: subtract, don't stare
The most useful test cost nothing. Render the processed file, subtract it from the original, listen to the difference. The delta is exactly what the algorithm removed. If detection is right, you hear a file of isolated esses. If it's wrong, you hear consonants, breaths, chunks of vowels. You know within seconds, no spectrogram needed.
The other half of testing is the material. One clean studio vocal proves nothing. Whispered takes, shouted takes, dull voices, bright voices, plosives, harmonically rich sustained notes. Edge cases are where a detector shows its real character. My rule: fully understand one problematic recording before scaling up to a whole test set.
Where this ends up
Nothing in here is exotic on its own. Relative thresholds, proper crossovers, lookahead, shaped envelopes, delta testing. The work is in noticing that you need all of it at the same time, and in having a test setup that calls you out when you don't.
If you'd rather hear this than read it: there's a small split-band de-esser running live in the Lab section of this site. A Web Audio toy next to a production plug-in, but the detection ideas are the same.
Written by Robin Busse. Based on de-esser research for NoiseWorks. Implementation details and tuning values are left out on purpose.