Table of Contents

Namespace NAudio.Effects

Classes

AudioEffect

Base class for effects. Provides click-free Bypass and dry/wet Mix for free: it captures the dry signal, calls ProcessBlock(Span<float>) to produce the wet signal in place, then blends them with a smoothed mix coefficient so toggling bypass or moving the mix never clicks. Derived effects implement OnConfigure(WaveFormat) and ProcessBlock(Span<float>).

AutomaticGainControlEffect

Automatic gain control: a slow leveller that drives the signal towards a target loudness. Gain reduction (too loud) reacts faster than gain boost (too quiet) so it does not pump, and — with UseVoiceDetection — gain is frozen while no voice is present so background noise is not amplified in pauses. Pair with a LimiterEffect downstream for a brick-wall safety ceiling.

BitCrusherEffect

Lo-fi bit crusher: reduces amplitude resolution (bit depth) and, optionally, the effective sample rate by sample-and-hold decimation down to a chosen target rate. The decimation deliberately aliases (the classic gritty bitcrusher character); enable Smoothing for a softer, more "vintage" tone. Per-channel state keeps a stereo image coherent.

ChorusEffect

Chorus: a short LFO-modulated delay mixed with the dry signal to thicken and detune it. Classic single-LFO design applied to every channel.

ComfortNoiseEffect

Adds a low level of gently shaped (low-passed) noise. Typically placed after a gate or noise suppressor so processed silence is not unnaturally "dead" — a small comfort-noise floor keeps the channel sounding live. Deterministic generator.

CompressorEffect

Feed-forward dynamic-range compressor with a soft knee, peak or RMS detection, and attack/release ballistics. Detection is channel-linked (one gain for all channels) so the stereo image is preserved. Exposes the live gain reduction for metering.

ConvolutionReverbEffect

Convolution reverb: convolves the signal with an impulse response (a recorded space or a synthetic IR) using partitioned FFT convolution, so the cost is bounded regardless of IR length. Supply a mono IR (applied to every channel) or one IR per channel. With no IR set the effect is a transparent pass-through. Reports its partition latency via LatencySamples.

DcBlockerEffect

Removes DC offset and sub-sonic rumble with a first-order high-pass (y[n] = x[n] - x[n-1] + R·y[n-1]), applied independently per channel. Cheap, phase-light, and a sensible first link in a voice or feedback chain.

DeEsserEffect

Split-band de-esser. A Linkwitz–Riley crossover separates the sibilant high band, which is compressed when it exceeds the threshold; the low band passes through untouched and the two are recombined. More transparent than wideband ducking because only the harsh band is attenuated. Detection is channel-linked.

DelayEffect

Feedback delay / echo with optional tempo sync, feedback damping and ping-pong. The delay time can be set directly in milliseconds or locked to a tempo and note division. A one-pole damping filter in the feedback path darkens successive repeats. In ping-pong mode (stereo) the echoes bounce between channels.

EffectChain

An ordered chain of IAudioEffects exposed as a single ISampleProvider. Effects are applied in the order they were added.

EffectParameter

A thin, delegate-backed facade over one of an effect's existing typed properties, describing it enough to drive a generic UI (or a VST3-style host, presets, automation). It does not store state — get/set forward to the effect — so the effect's property remains the single source of truth and IAudioEffect is unaffected. Build these with the static factory methods.

EffectSampleProvider

Adapts an IAudioEffect into the pull-model ISampleProvider pipeline: reads from a source and processes the samples through the effect in place.

Equalizer

Multi-band parametric equaliser. Each EqualizerBand is an independent biquad (peaking, shelf, pass, notch, band-pass or all-pass) applied per channel. Edit the bands and call Update() to retune — changes crossfade so they never click, even while audio is flowing.

EqualizerBand

One band of an Equalizer. Mutate the properties and call Update() to apply the change (click-free).

FdnReverbEffect

Feedback-delay-network reverb in the clean, modulated-FDN style described by Signalsmith Audio: eight delay lines mixed each sample through an orthonormal Hadamard matrix, with per-line frequency damping and slow delay-length modulation for a smooth, dense, metallic-free tail. Decay is set directly as an RT60 time. The flagship quality reverb. (Algorithm/topology reference only — original implementation.)

FlangerEffect

Flanger: a very short LFO-modulated delay with feedback, producing the classic sweeping comb-filter "jet" effect. Feedback may be negative for an inverted (hollow) comb.

GainEffect

Applies a gain (volume) to the signal, expressed in decibels or as a linear multiplier. Gain changes are smoothed so automating the level never clicks.

GateEffect

Noise gate / downward expander. Below the threshold the signal is attenuated; with a high Ratio it behaves as a hard gate, with a lower ratio as a gentle expander. Includes hysteresis (separate open/close points), a hold time to avoid chatter, and independent attack/release. Detection is channel-linked.

GraphicEqualizer

A graphic equaliser: a fixed set of ISO-standard peaking bands over the Equalizer engine, exposing one gain per band. Setting a band gain retunes click-free.

LimiterEffect

Brick-wall peak limiter with look-ahead and optional true-peak (inter-sample) detection. The signal is delayed by the look-ahead time while a channel-linked peak detector sees the audio early, so gain is already reduced by the time a transient reaches the output — no overshoot, no audible pumping from a hard catch. With TruePeak enabled the detector measures the oversampled signal, so reconstruction (inter-sample) peaks are caught too. Gain recovers with a smooth release. Reports its look-ahead as LatencySamples for delay compensation.

MonoMakerEffect

Collapses low frequencies to mono while leaving higher frequencies stereo — the "bass mono" tool used to keep a mix's low end phase-coherent. Everything below Frequency is summed to the centre; above it the stereo image is untouched. Frequency changes crossfade so they do not click. Only stereo signals are affected; other channel counts pass through unchanged.

MultibandCompressorBand

Per-band compression settings for a MultibandCompressorEffect.

MultibandCompressorEffect

Multiband compressor: a Linkwitz–Riley crossover splits the signal into bands, each independently compressed, then recombined. Useful for transparent level control, de-essing-style band taming, or mastering glue. Detection is channel-linked per band.

NoiseSuppressionEffect

Single-channel-independent spectral noise suppressor (STFT Wiener / spectral subtraction). A square-root-Hann weighted overlap-add analysis estimates the noise spectrum during non-speech frames (gated by a shared VoiceActivityDetector) and applies a smoothed per-bin attenuation to reduce stationary background noise. This is the build-from-scratch "tier-a" suppressor; an ML tier (RNNoise) remains a future evaluation. Reports its frame size as latency.

PanEffect

Constant-power stereo panner. Pan ranges from -1 (hard left) through 0 (centre) to +1 (hard right). Pan changes are smoothed. Only stereo signals are affected; other channel counts pass through unchanged.

ParameterDispatchQueue

Lock-free single-producer/single-consumer queue that carries parameter writes from a control thread (UI, automation, presets) to the audio thread. The producer calls Post(EffectParameter, float) — invoked for you by Value once the parameter has been Attach(IParameterized)ed — and the audio thread calls Drain() once at the top of each processing block. Every pending write is then applied on the audio thread, so coefficient recomputation, delay-buffer resizes and filter swaps happen where there is no concurrent reader.

PhaserEffect

Phaser: a cascade of first-order all-pass stages whose corner frequency is swept by an LFO, with feedback. Mixing the phase-shifted signal with the dry signal creates moving notches in the spectrum.

PitchShiftEffect

Pitch shifter (no tempo change) wrapping the Bernsee STFT phase-vocoder (SmbPitchShifter) in the effect framework, one shifter per channel. This is the dependable default; a higher-quality Signalsmith-based tier remains a separate future evaluation. Introduces FFT-frame latency (LatencySamples).

ReverbEffect

Schroeder–Moorer algorithmic reverb in the classic Freeverb topology (Jezar, public domain): per stereo bank, eight parallel low-pass-damped comb filters into four series all-pass filters, with a stereo-spread offset. Low CPU and a dependable sound — the lightweight baseline reverb. Reimplemented idiomatically (denormal-safe, allocation-free steady state); not a transliteration.

SaturationEffect

Wave-shaping saturation / soft-clip with selectable curve, input drive and output trim. Optional 2× or 4× oversampling moves the harmonics the non-linearity generates above the audible band before they can alias back down.

SendBus

An auxiliary effect send/return bus: a shared interleaved buffer that sources mix a portion of their signal into, run through one IAudioEffect (typically a reverb or chorus), with the wet result returned (added) into a destination mix.

This is the generic plumbing a mixer or sampler uses to share one reverb or chorus instance across many voices, rather than instantiating the effect per voice. The effect runs every block so its tail keeps sounding after the sends stop. Not thread-safe; drive it from the audio thread.

StereoWidthEffect

Adjusts stereo width via mid/side processing. Width of 0 collapses to mono, 1 leaves the image unchanged, and values above 1 widen it. Width changes are smoothed. Only stereo signals are affected; other channel counts pass through unchanged.

TransientShaperEffect

Transient shaper. A fast and a slow envelope follower track the signal; their difference distinguishes the attack (onset) of a sound from its sustain (body). AttackDb boosts or cuts the attack portion and SustainDb the sustain portion, independent of input level. Detection is channel-linked so the stereo image is preserved.

TremoloEffect

Tremolo (LFO amplitude modulation). With AutoPan enabled on a stereo signal it instead sweeps the signal between the speakers (constant-power auto-pan).

Interfaces

IAudioEffect

A processing kernel that transforms interleaved 32-bit float audio in place. An effect is configured with a WaveFormat (sample rate and channel count) and then processes blocks — pulled from a source through an EffectSampleProvider/EffectChain, or pushed directly by a synth/sampler voice. Implementations are channel-agnostic and must not allocate on the steady-state processing path.

IParameterDispatch

A sink that marshals EffectParameter writes onto the audio thread. While an effect's parameters are routed through a dispatch, setting Value from another thread does not mutate the effect inline; the (already clamped) write is posted here and applied later, at a block boundary, on the thread that runs the effect — so coefficient recomputation and buffer resizes never race the audio callback. See ParameterDispatchQueue.

IParameterized

Optional capability an effect implements to expose its tweakable controls as a uniform list, so a generic UI (the real-time effects harness, a future VST3-style host), presets, serialisation or automation can drive any effect without effect-specific code. This is purely additive — it does not change IAudioEffect or the real-time processing contract. Bypass and Mix live on AudioEffect and are surfaced generically, so implementations should not repeat them here.

Enums

DetectorMode

How a dynamics processor measures signal level.

EffectParameterKind

The kind of control an EffectParameter represents.

EqualizerBandType

The filter shape an EqualizerBand applies.

GraphicEqualizerLayout

Standard graphic-equaliser band layouts.

SaturationCurve

Saturation transfer-curve shape.