Resonance suppressor

Spectral resonance suppressor: finds narrow peaks that stand above the local spectral average and pulls them down dynamically, bin by bin.

  • Dynamics
  • Since 0.2.0
  • resonance
  • harsh
  • ringing
  • dynamic eq
  • spectral
  • mixing
  • de-ess

Open in TuneToys

Resonance suppressor as the Patch draws it, at default values: inlets on the left, outlets on the right.

Smooth out harsh, ringing frequencies only when and where they appear, without a fixed EQ cut.

What it does#

The suppressor splits the sound into narrow frequency bins (2048-point frames up to 48 kHz, 4096 above) and compares each bin with the average of its neighbours, over a window that is wide at low Sharpness and narrow at high Sharpness. Where a bin between Low and High stands more than Threshold above that average, it is pulled back down to Threshold, but never by more than Depth. The comparison leaves out the bin itself and its closest neighbours, so a peak cannot raise its own reference. Cuts grow with Attack and recover with Release, so a resonance is only cut while it rings.

The node delays its output by one frame, 2048 samples (about 43 ms at 48 kHz, 4096 above), and reports that latency, so the rest of the Toy stays aligned.

When to use it#

Use it on a boxy or whistling microphone, a harsh synth, a guitar amp that rings at one note, or a mix bus that turns shrill when it gets loud. A fixed narrow EQ cut works when the frequency never moves; this follows peaks that come and go. For feedback in a live system, use the Feedback suppressor, which adds no latency.

Ports#

PortDirectionSignalLanes
audioInputAudioInferred from the cable
audioOutputAudioInferred from the cable

Parameters#

ParameterLabelRangeDefaultUnitScaleNotes
depthDepth0 to 309dBlinearThe most any bin is turned down.
sharpnessSharpness0 to 10.5%linearNarrows the average a peak is compared with, from one octave around it at 0 to a sixth of an octave at 100 %, so only sharper resonances are caught. Stored as a fraction; shown ×100 as a percentage.
thresholdThreshold0 to 246dBlinearHow far a bin may rise above its local average before it is pulled down. A peak is pulled back to this height, by at most Depth.
attack_msAttack1 to 20010mslogHow fast a cut grows on a new resonance.
release_msRelease10 to 2000150mslogHow fast a cut recovers once the resonance fades.
low_hzLow20 to 20000200HzlogLowest frequency the suppressor works on; below it the signal passes untouched.
high_hzHigh20 to 2000012000HzlogHighest frequency the suppressor works on; above it the signal passes untouched.
mixMix0 to 11%linearBlend from the dry input, delayed to stay aligned, to the suppressed signal. Stored as a fraction; shown ×100 as a percentage.
listenListen0 to 10linearRemoved plays only what the suppressor takes out, to hear which resonances it catches. Choices: 0 Off, 1 Removed.

Depth (depth)#

The deepest cut, in dB, from 0 to 30. 6 to 12 dB tames most resonances without dulling the sound.

Sharpness (sharpness)#

The width of the neighbourhood a peak is compared with: one octave around it at 0 %, a sixth of an octave at 100 %. Higher Sharpness catches only narrow rings and leaves broad tonal character alone; lower Sharpness also evens out wider bumps.

Threshold (threshold)#

How far, in dB, a bin may stand above its neighbourhood before it is pulled back. Lower values smooth the spectrum more.

Attack and Release (attack_ms, release_ms)#

How fast a cut grows on a new resonance and how fast it recovers once the resonance fades.

Low and High (low_hz, high_hz)#

The frequency range the suppressor works in. Outside it, the signal passes untouched.

Mix (mix)#

Blends the suppressed signal with the dry input, delayed by the same frame so the two stay aligned.

Listen (listen)#

Removed plays only what the suppressor takes out (the dry sound minus the result, scaled by Mix), to hear which resonances it catches.

Tips#

  • Use Listen first: switch to Removed and adjust Threshold and Sharpness until you hear only the ringing, then switch back.
  • Keep Low above the fundamental of a voice or instrument so its body is never cut.
  • Long Release values sound smoother; short ones follow fast-changing material more closely.

See also#

Parametric EQ, Noise reduction, Feedback suppressor, Compressor.

Help patches

Each help patch is an ordinary Toy that teaches one idea. The diagram shows the Patch; the preview shows its Frame. Open it in TuneToys to play and edit it.

1. Tame a ringing peak

beginner Teaches: depth, threshold, sharpness, listen

An EQ bell rings at 2.4 kHz on a saw and some air; the resonance suppressor pulls the ring back.

Patch: Oscillator audio output connected to Mixer chord.in input. Noise audio output connected to Mixer air.in input. Mixer audio output connected to Parametric EQ audio input. Parametric EQ audio output connected to Resonance suppressor audio input. Resonance suppressor audio output connected to Patch outputs audio input.
Connections as text
  • Oscillator audio output connected to Mixer chord.in input
  • Noise audio output connected to Mixer air.in input
  • Mixer audio output connected to Parametric EQ audio input
  • Parametric EQ audio output connected to Resonance suppressor audio input
  • Resonance suppressor audio output connected to Patch outputs audio input
  • The EQ adds a narrow 18 dB peak at 2.4 kHz, the kind of ring a small room or a boxy microphone gives.
  • The suppressor compares every frequency with its neighbours. Where one stands more than Threshold above them, it is pulled back, by at most Depth.
  • Switch Listen to Removed to hear only what is taken out. Higher Sharpness catches only narrow rings and leaves broad tone alone.
Frame preview: Tame a ringing peakFrame “Tame a ringing peak” with 5 elements: knob Depth, text heading, toggle Listen, knob Sharpness, knob Threshold.12 dBDepthTAME A RINGING PEAKListen0.5 %Sharpness6 dBThreshold
Frame preview (static). Controls show their default values.

Open in TuneToys

2. Chase a moving resonance

intermediate Teaches: low_hz, high_hz, attack_ms, release_ms, mix

A resonant filter sweeps over a buzz; the suppressor follows the peak inside its frequency range.

Patch: Oscillator audio output connected to Filter audio input. Control LFO control output connected to Filter @cutoff input. Oscillator audio output connected to Mixer buzz.in input. Filter audio output connected to Mixer sweep.in input. Mixer audio output connected to Resonance suppressor audio input. Resonance suppressor audio output connected to Patch outputs audio input.
Connections as text
  • Oscillator audio output connected to Filter audio input
  • Control LFO control output connected to Filter @cutoff input
  • Oscillator audio output connected to Mixer buzz.in input
  • Filter audio output connected to Mixer sweep.in input
  • Mixer audio output connected to Resonance suppressor audio input
  • Resonance suppressor audio output connected to Patch outputs audio input
  • A slow LFO sweeps a resonant band-pass across the buzz, so the peak moves.
  • Attack sets how fast a cut grows on the moving peak, Release how fast it lets go once the peak has passed.
  • Low and High fence the range: outside it the peak rings untouched. Mix blends back the aligned dry sound.
Frame preview: Chase a moving resonanceFrame “Chase a moving resonance” with 7 elements: knob Attack, knob Depth, text heading, knob High, knob Low, knob Mix, knob Release.10 msAttack15 dBDepthCHASE A MOVING RESONANCE6000 HzHigh400 HzLow1 %Mix150 msRelease
Frame preview (static). Controls show their default values.

Open in TuneToys

  • Parametric EQ Parametric EQ with up to 32 reorderable RBJ bands: cuts, shelves, bells and notches, per-band bypass and output trim.
  • Noise reduction Spectral noise gate: learn a noise profile or follow the floor adaptively, then turn down each frequency bin that stays near it.
  • Feedback suppressor Feedback suppressor: tracks howling tones and places up to eight narrow time-domain notches on them, with no added latency.
  • Compressor Peak/RMS compression with a sidechain key input, detector filtering, hold, adaptive release and channel linking.

Edit this page on GitHub

esc

↑ ↓ move↩ open⌘↩ new tabesc close