Zero-latency, frequency-split noise suppressor for guitar DI — built for high-gain amp-sim and reamping chains. It sits on the raw DI before the amp sim, strips pickup-borne hiss/buzz/EMI between notes, and leaves the guitar body alone. Formats: VST3 and CLAP (Windows, macOS, Linux).
The core is a causal, sample-domain dynamic low-pass:
- the input is split by a fourth-order Linkwitz–Riley-style crossover;
- the low branch always passes (body, fundamentals, sustain);
- the high branch is gated by an envelope detector that listens to the high branch itself — bass energy can't reopen the noise branch, pick attack and string harmonics can;
- the gate opens in 10 µs, holds through waveform zero-crossings, and closes on a smooth exponential release.
The result: noise between notes disappears in the band where hiss/buzz lives, while low mids and body pass untouched and pick transients survive intact. Zero reported latency in the default mode; negligible CPU (four biquads plus an envelope per channel).
| Control | What it does |
|---|---|
| Threshold | Sets when highs are reduced. Raise it until noise between notes is suppressed. |
| Strength | Sets how much of the high-frequency range is treated (8 kHz → 1.4 kHz). Zero is not bypass. |
| Release | Sets how quickly suppression returns after a note (2–30 ms). Increase it to preserve tails. |
| Listen removed | Auditions input minus processed audio; switch it off to hear the processed signal. This difference includes filter phase effects, not just noise. |
Input and output meters show peak dBFS. The large readout shows high-band gain reduction, not whole-signal loudness loss; in multiband sessions it shows the deepest band reduction. Clip warnings, bypass, silence, learning, and stopped audio are labelled explicitly. Stopped meters clear instead of holding stale readings.
Drag a dial to adjust; Shift-drag for fine control, double-click / Return for exact entry, and Alt/Option-click / Home to reset. Tab and arrow keys work too. Use your host's bypass to compare with the dry input.
Existing sessions and automation remain compatible. The additional engine settings remain available in the host's parameter view, not in the simplified editor. Host settings active indicates non-default legacy settings; hover for details. In multiband mode, Threshold and Strength are inactive because that mode uses its own splits and learned thresholds.
Requirements: CMake ≥ 3.22, a C++17 compiler, Ninja (recommended). JUCE and the CLAP wrapper are fetched automatically (pinned versions).
cmake -S . -B build -G Ninja -DCMAKE_BUILD_TYPE=Release
cmake --build build --target Suppressor_VST3 Suppressor_CLAP Suppressor_StandaloneOutputs land in build/Source/Suppressor_artefacts/Release/{VST3,CLAP,Standalone}.
cmake -S . -B build-tests -G Ninja -DSUPPRESSOR_BUILD_PLUGIN=OFF -DSUPPRESSOR_BUILD_TESTS=ON
cmake --build build-tests && ctest --test-dir build-tests --output-on-failurecmake --build build --target SuppressorUITests
ctest --test-dir build --output-on-failureThese also exercise native VST3/CLAP editor embedding. Linux needs a display
with a window manager (CI uses Xvfb + Openbox). Set SUPPRESSOR_UI_CAPTURE_DIR to an absolute directory to
save real editor captures at 100–200% scaling.
.github/workflows/ci.yml gates every push/PR on:
- DSP unit tests on Windows, macOS, and Linux;
- VST3 + CLAP builds on all three platforms (macOS universal);
- validation with pluginval (VST3) and clap-validator (CLAP);
- per-OS artifact packaging. Tags matching
v*publish a GitHub release.
See docs/DESIGN.md for the full DSP specification:
topology, parameter laws, timing, and the rationale behind every
improvement over a plain one-split gate.
GPL-3.0-or-later (see LICENSE). This project is built with
JUCE (also available under the GPL); a commercial JUCE licence would permit
proprietary relicensing. CLAP is MIT-licensed.
