Skip to content

Marvo2011/OpenDeFeedback

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

17 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

DeFeedback VST3 Plugin

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.

UI Settings


How It Works

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)


Parameters

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.

Code-Configurable Constants

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

Building

Requirements

  • 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)

Clone repository with submodules

git clone --recursive https://github.com/Marvo2011/OpenDeFeedback.git

Linux

# 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/

macOS

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.txt

Windows (MSVC)

cmake -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\

Tips

  • 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.

Credits

  • DSP algorithm © 2025-2026 OpenMixerProject — licensed under GPL v3
  • JUCE framework © Raw Material Software — JUCE License
  • VST3 plugin wrapper: community contribution

About

AI-powered feedback detection and suppression - ported from OpenMixerProject

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors