AI-powered feedback detection and suppression — ported from the OpenX32 DSP module.
Please note! This is only a draft; it has not been fully tested in production.
Audio In ──► FFT (512 samples, ch 0) ──► log-magnitude features ──► nn_predict()
│
149-class softmax probabilities
(clean + 148 bands, 200 Hz … 15 000 Hz)
│
Cluster adjacent detections (max 3)
compute center freq + dynamic Q
│
8x Peak IIR Filters (always active)
gain ramps via attack / release envelope
│
Audio Out
| Stage | Details |
|---|---|
| Neural Net | FFT-based: 256 log-magnitude bins → 64 hidden ReLU → 149 softmax classes (clean + 148 frequency bands, 200–15 000 Hz in 100 Hz steps) |
| Clustering | Adjacent detected frequencies (within DF_FREQ_STEP) are merged into one band slot (max 3 per cluster). Pair → exact midpoint; triple → middle frequency. Q widens automatically to cover the cluster. |
| Peak Filters | 4 simultaneous biquad peak filters. Always in the signal path; cut depth is controlled by a per-band smoothGain (1.0 = flat, DF_CUT_GAIN ≈ −40 dB = full cut). |
| Envelope | smoothGain ramps toward DF_CUT_GAIN on detection (attack) and back to 1.0 when detection clears (release). Ramping is block-rate to avoid zipper noise. |
| Frequency lock | A band's centre frequency is frozen for the entire release cycle (smoothGain < DF_FREE_THRESHOLD). New detections are routed to free bands only, so no frequency jump occurs mid-cut. |
Latency: 0 samples (zero latency; detection analysis lags by one 512-sample window ≈ 11 ms at 48 kHz)
| Parameter | Range | Default | Description |
|---|---|---|---|
| Clean Gate | 0.00 … 1.00 | 0.30 | Minimum (1 − cleanProb) required to engage any filter. Lower = more aggressive; higher = more conservative. The white line on the meter shows this threshold. |
| Freq Gate | 0.00 … 1.00 | 0.15 | Minimum per-band confidence to activate that band's cut. Both conditions must be true simultaneously. |
| Attack | 1 … 100 ms | 10 ms | How fast the gain ramps to full cut once feedback is detected. |
| Release | 50 … 2000 ms | 300 ms | How long the cut fades back to flat after detection clears. Band frequency is frozen for this entire duration. |
These are static constexpr values at the top of Source/PluginProcessor.h. Change them and recompile; no UI adjustment needed.
| Constant | Default | Meaning |
|---|---|---|
DF_FREQ_START |
200 Hz | Lowest frequency class |
DF_FREQ_STOP |
15 000 Hz | Highest frequency class |
DF_FREQ_STEP |
100 Hz | Step between classes (must match model training) |
DF_TOP_BANDS |
4 | Number of simultaneous peak filter slots |
DF_NOTCH_Q |
5.0 | Baseline Q for single-frequency detections |
DF_CUT_GAIN |
0.01 | Linear gain at full cut (≈ −40 dB) |
DF_FREE_THRESHOLD |
0.98 | smoothGain level at which a band is considered free for reassignment |
- CMake ≥ 3.22
- C++17 compiler
- Linux: GCC 9+ or Clang 10+
- macOS: Xcode 12+ (Apple Clang)
- Windows: MSVC 2019 or 2022
- Internet connection on first build (JUCE 8.0.4 is downloaded automatically via FetchContent)
git clone --recursive https://github.com/Marvo2011/OpenDeFeedback.git# Install dependencies (Debian/Ubuntu)
sudo apt install cmake g++ libfreetype6-dev libx11-dev libxcursor-dev \
libxinerama-dev libxrandr-dev libxrender-dev libasound2-dev \
libwebkit2gtk-4.0-dev libgtk-3-dev
cmake -B build -DCMAKE_BUILD_TYPE=Release
cmake --build build --config Release -j$(nproc)
# Result:
# build/DeFeedback_artefacts/Release/VST3/DeFeedback.vst3
mkdir -p ~/.vst3
cp -r build/DeFeedback_artefacts/Release/VST3/DeFeedback.vst3 ~/.vst3/cmake -B build -DCMAKE_BUILD_TYPE=Release
cmake --build build --config Release -j$(sysctl -n hw.logicalcpu)
# Result:
# build/DeFeedback_artefacts/Release/VST3/DeFeedback.vst3
mkdir -p ~/Library/Audio/Plug-Ins/VST3
cp -r build/DeFeedback_artefacts/Release/VST3/DeFeedback.vst3 ~/Library/Audio/Plug-Ins/VST3/
# For AU support: uncomment the AU lines in CMakeLists.txtcmake -B build -G "Visual Studio 17 2022" -A x64
cmake --build build --config Release
:: Result:
:: build\DeFeedback_artefacts\Release\VST3\DeFeedback.vst3
:: Copy to C:\Program Files\Common Files\VST3\- Too many false positives? Raise the Clean Gate (e.g. 0.50) and/or the Freq Gate (e.g. 0.30).
- Feedback not caught fast enough? Lower both gates or reduce the Attack time.
- Cuts lasting too long after feedback stops? Reduce Release (e.g. 100 ms).
- Audible artefacts on transitions? Increase Attack (e.g. 25 ms) to soften the gain ramp.
- DSP algorithm © 2025-2026 OpenMixerProject — licensed under GPL v3
- JUCE framework © Raw Material Software — JUCE License
- VST3 plugin wrapper: community contribution

