Low-latency Windows microphone processor with AI noise suppression, smart gating, Auto-EQ, latency calibration, and a portable desktop build.
Current version: v1.7.14
AudioForge is a Windows-first desktop app with a Python/PyQt UI and a Rust real-time audio core. The repository is set up for local source builds and portable dist/AudioForge packaging.
- Noise suppression backends:
- RNNoise
- DeepFilterNet LL
- DeepFilterNet Standard
- Noise gate modes:
- Threshold-only gate
- VAD-assisted gate
- VAD-only gate
- Auto threshold defaults on in VAD modes and tracks the estimated noise floor plus margin
- 10-band parametric EQ with per-band frequency, gain, and Q
- Auto-EQ workflow with recording, spectral analysis, bounded center-frequency nudging, and one-click apply/undo
- Split-band de-esser with manual and auto amount control
- Compressor with soft knee, adaptive release, and optional auto makeup
- Lookahead limiter
- Raw monitor mode for direct diagnostic monitoring
- Real-time health and diagnostics:
- input/output meters
- callback stall detection
- dropped-sample counters
- backlog and recovery counters
- backend status/error reporting
- Callback watchdog with stream restart/backoff handling
- Device persistence and refresh that preserves the current selection when possible
- Per device-pair latency calibration profiles with migration from older saved keys
- Portable PyInstaller build with bundled Python runtime and model assets
Normal processing path:
Mic Input -> Pre-Filter (DC block + 80 Hz HP) -> Noise Gate -> Noise Suppression
-> De-Esser -> 10-Band EQ -> Compressor -> Limiter -> Output
Special paths:
Bypasskeeps the transport path active while skipping the main DSP stages.Raw Monitoruses the clean write path and skips the pre-filter and downstream DSP chain for diagnostics.
Latency labels in the UI describe suppressor/DSP behavior, not full round-trip latency. End-to-end latency still depends on the selected devices, driver mode, buffer sizing, and routing path.
- Windows 10/11
- Python 3.9+
- Rust 1.70+
maturin- A virtual environment in
.venvis assumed by the packaging script
python/mic_eq: PyQt application, analysis code, persistence, packaging entrypointsrust-core: Rust audio engine exposed through PyO3python/tests: Python test suitedist/AudioForge: packaged portable application outputbuild_exe.ps1: PyInstaller packaging script
git clone https://github.com/FueledByRedBull/audio-forge.git
cd audio-forge
python -m venv .venv
.\.venv\Scripts\python.exe -m pip install --upgrade pip
.\.venv\Scripts\python.exe -m pip install -e .[dev]
.\.venv\Scripts\python.exe -m maturin develop --release
.\.venv\Scripts\python.exe -m mic_eqYou can also use the installed console entrypoint:
.\.venv\Scripts\mic-eq.exeCreate models/ in the repo root if you want local runtime discovery during development:
models/DeepFilterNet3_ll_onnx.tar.gzmodels/DeepFilterNet3_onnx.tar.gzmodels/silero_vad.onnx
DeepFilter runtime library:
df.dllin the repo root for development runs- bundled under
dist/AudioForge/_internalfor portable builds
Environment variables:
DEEPFILTER_MODEL_PATHDEEPFILTER_LIB_PATHAUDIOFORGE_ALLOW_EXTERNAL_DF=1AUDIOFORGE_ENABLE_DEEPFILTERVAD_MODEL_PATH
Packaged builds prefer bundled DeepFilter assets. AUDIOFORGE_ALLOW_EXTERNAL_DF=1 should only be used when you intentionally want a packaged build to resolve df.dll externally.
- Select the input and output devices.
- Start processing.
- Choose a suppressor backend and gate mode.
- Tune EQ/dynamics manually or run Auto-EQ from the calibration flow.
- If the route needs compensation, run latency calibration for the current device pair.
Operational notes:
- Device refresh keeps the current selection when the same device is still available.
- Input/output stream setup prefers 48 kHz configs when available.
- In VAD modes, auto gate threshold is the default path; the UI shows the live noise floor and effective threshold while the manual threshold remains available as fallback.
- Runtime diagnostics expose input drops, backlog recovery, output recovery, and short-write loss separately.
- Dropped-sample counters can be reset from the UI.
Build the Rust extension first, then package:
.\.venv\Scripts\python.exe -m maturin develop --release
powershell -ExecutionPolicy Bypass -File .\build_exe.ps1Packaging script behavior:
- uses the locally built
python/mic_eq/mic_eq_core*.pyd - bundles the Python runtime with PyInstaller
- prunes the final bundle with
python/tools/prune_bundle.py - keeps the entire application self-contained in
dist/AudioForge
Portable output:
dist/AudioForge/AudioForge.exe- bundled assets and runtime files under
dist/AudioForge/_internal
The portable folder is intended to be archived as a single distributable:
& "C:/Program Files/7-Zip/7z.exe" a -t7z -mx=9 -m0=lzma2 -mmt=on -ms=on `
.\AudioForge-v1.7.14-win64-ultra.7z .\dist\AudioForge\*This uses LZMA2 with max compression and solid mode, which is appropriate for the PyInstaller bundle.
Rust:
cd rust-core
cargo test -p mic_eq_core --testsPython:
cd ..
.\.venv\Scripts\python.exe -m pytest python/tests -vTargeted checks used frequently during development:
.\.venv\Scripts\python.exe -m ruff check python/mic_eq python/tests
.\.venv\Scripts\python.exe -m pytest python/tests/test_auto_eq.py python/tests/test_spectrum.py
.\.venv\Scripts\python.exe -m pytest python/tests/test_config_v17.py python/tests/test_ui_sample_rate_and_diagnostics.pyHeadless checks:
.\.venv\Scripts\python.exe python/tools/health_check.py --duration 1800
.\.venv\Scripts\python.exe python/tools/self_test.pyMIT License. See LICENSE.
- RNNoise by Jean-Marc Valin
- DeepFilterNet by Hendrik Schroter and contributors
- Silero VAD contributors