{"id":49273477,"url":"https://github.com/yashsomalkar/noisegate","last_synced_at":"2026-04-25T15:00:52.301Z","repository":{"id":353774436,"uuid":"1220858727","full_name":"Yashsomalkar/noisegate","owner":"Yashsomalkar","description":"Real-time mic noise cancellation for Windows — DeepFilterNet3 in pure Rust, WASAPI low-latency, VB-Cable routing","archived":false,"fork":false,"pushed_at":"2026-04-25T14:17:54.000Z","size":49,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-04-25T14:24:49.243Z","etag":null,"topics":["audio","deepfilternet","dsp","machine-learning","microphone","noise-cancellation","noise-suppression","real-time","rust","speech-enhancement","tract","vb-cable","voice","wasapi","windows"],"latest_commit_sha":null,"homepage":"https://github.com/Yashsomalkar/noisegate","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Yashsomalkar.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE-APACHE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-04-25T12:35:58.000Z","updated_at":"2026-04-25T14:17:57.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/Yashsomalkar/noisegate","commit_stats":null,"previous_names":["yashsomalkar/noisegate"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/Yashsomalkar/noisegate","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Yashsomalkar%2Fnoisegate","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Yashsomalkar%2Fnoisegate/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Yashsomalkar%2Fnoisegate/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Yashsomalkar%2Fnoisegate/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Yashsomalkar","download_url":"https://codeload.github.com/Yashsomalkar/noisegate/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Yashsomalkar%2Fnoisegate/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32265977,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-25T09:15:33.318Z","status":"ssl_error","status_checked_at":"2026-04-25T09:15:31.997Z","response_time":59,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["audio","deepfilternet","dsp","machine-learning","microphone","noise-cancellation","noise-suppression","real-time","rust","speech-enhancement","tract","vb-cable","voice","wasapi","windows"],"created_at":"2026-04-25T15:00:48.155Z","updated_at":"2026-04-25T15:00:52.293Z","avatar_url":"https://github.com/Yashsomalkar.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"# NoiseGate\n\n[![License: MIT OR Apache-2.0](https://img.shields.io/badge/license-MIT%20OR%20Apache--2.0-blue.svg)](#license)\n[![Platform: Windows](https://img.shields.io/badge/platform-Windows%2010%2F11-0078d4.svg)](#install)\n[![Rust](https://img.shields.io/badge/built%20with-Rust-orange.svg)](https://www.rust-lang.org/)\n[![Model: RNNoise + ONNX](https://img.shields.io/badge/model-RNNoise%20%2B%20ONNX-purple.svg)](#noise-suppression-model)\n[![Latest release](https://img.shields.io/github/v/release/Yashsomalkar/noisegate?include_prereleases\u0026label=download)](https://github.com/Yashsomalkar/noisegate/releases)\n\nReal-time microphone noise cancellation for Windows. Pure-Rust inference, WASAPI low-latency capture/render, system-tray UI. Pipes cleaned audio into VB-Cable so any app (Zoom, Teams, Discord, OBS, browser calls) sees a noise-free mic.\n\n\u003e Status: pre-alpha scaffold. Builds on Windows 10/11 with the MSVC toolchain. Tested on (none yet — you're the first).\n\n## Why\n\nExisting noise-cancellation tools either cost money (Krisp), require an RTX GPU (NVIDIA Broadcast), or are Linux-only (NoiseTorch). NoiseGate is a free, open-source, lightweight alternative for Windows that runs on any CPU, with a swappable model so you can opt into a state-of-the-art network when you want one.\n\n## Stack\n\n- **Audio I/O:** WASAPI shared low-latency, event-driven, MMCSS Pro Audio scheduling.\n- **Routing:** VB-Cable (free virtual audio cable, [vb-audio.com](https://vb-audio.com/Cable/)).\n- **DSP model:** **RNNoise** by default (via the [`nnnoiseless`](https://github.com/jneem/nnnoiseless) crate — pure-Rust port). Optional **ONNX** path for newer models like DeepFilterNet3 from Hugging Face.\n- **UI:** `tray-icon` + `winit` event loop.\n- **Lang:** Rust 2021, single static binary, ~10 MB stripped (RNNoise default), ~25 MB with ONNX runtime.\n\n## Architecture\n\n```\nphysical mic ─► WASAPI capture ─► ring A ─► DSP thread (denoiser) ─► ring B ─► WASAPI render ─► VB-Cable Input\n                                                                                                        │\n                                                               other apps choose \"CABLE Output\" as mic ◄┘\n```\n\nThree dedicated MMCSS-priority threads. Lock-free SPSC ring buffers (8 frames ≈ 80 ms headroom). 480-sample (10 ms) frames end-to-end — the native frame size for both RNNoise and DeepFilterNet, so no reblocking inside the DSP path.\n\n## Noise suppression model\n\nTwo supported backends, both real-time:\n\n| Backend | Default? | Quality | Install size | How |\n|---|---|---|---|---|\n| **RNNoise** (via `nnnoiseless`) | ✅ | ★★★ Good. Excellent for stationary noise (fans, hum). Older classical-RNN architecture. | +0 MB (model embedded) | Just `cargo build`. |\n| **ONNX (DeepFilterNet3 etc.)** | opt-in (`--features onnx`) | ★★★★★ State of the art. | +15 MB (`onnxruntime.dll`) + ~12 MB model file you supply | Build with `--features onnx`, point config at an ONNX file. See below. |\n\nFor most users, RNNoise is what shipping software did until ~2022 and is still good enough for clean voice calls. Step up to ONNX/DFN3 when you have non-stationary noise (kids, traffic, music) and the extra CPU is worth it (typically 3-7%).\n\n## Install\n\n### Option A — Download a prebuilt `.exe` (easiest, once releases are cut)\n\nGrab the latest binary from the **[Releases page](https://github.com/Yashsomalkar/noisegate/releases)**, then jump to [Set up audio routing](#set-up-audio-routing) below.\n\n\u003e No releases yet? Build from source (Option B). A GitHub Actions workflow will start producing prebuilt binaries on every tagged release.\n\n### Option B — Build from source\n\nYou need three things on your Windows 10/11 machine:\n\n| # | Component | Download | Notes |\n|---|---|---|---|\n| 1 | **Rust toolchain** | [rustup-init.exe](https://win.rustup.rs/x86_64) — or visit [rustup.rs](https://rustup.rs/) | Pick the default (`stable`, `x86_64-pc-windows-msvc`). |\n| 2 | **MSVC C++ build tools** | [Build Tools for Visual Studio 2022](https://visualstudio.microsoft.com/visual-cpp-build-tools/) | In the installer, check **\"Desktop development with C++\"** (gives you `link.exe` + the Windows SDK). |\n| 3 | **VB-Cable virtual audio driver** | [vb-audio.com/Cable](https://vb-audio.com/Cable/) ([direct ZIP](https://download.vb-audio.com/Download_CABLE/VBCABLE_Driver_Pack43.zip)) | Extract, run `VBCABLE_Setup_x64.exe` as Administrator, reboot. |\n| 4 | **Git** *(probably already installed)* | [git-scm.com/download/win](https://git-scm.com/download/win) | Used to clone the repo. |\n\nThen in PowerShell:\n\n```powershell\ngit clone https://github.com/Yashsomalkar/noisegate.git\ncd noisegate\ncargo build --release\n.\\target\\release\\noisegate.exe\n```\n\nFirst build pulls ~300 MB of crates and takes 5-10 minutes. Subsequent builds are seconds.\n\nA tray icon appears in the system tray (bottom-right corner of your taskbar). Right-click it for the menu: **Enable**, **Open log folder**, **Quit**.\n\n### Set up audio routing\n\nOnce NoiseGate is running, point your communication apps at VB-Cable instead of your real microphone:\n\n1. Open **Windows Sound Settings** → **Sound** → **Input**.\n2. Verify **CABLE Output (VB-Audio Virtual Cable)** is in the device list. If not, the VB-Cable install didn't finish — re-run step 3 above.\n3. In Zoom / Teams / Discord / OBS / browser settings, choose **CABLE Output** as the microphone.\n\nNoiseGate captures from your real mic, denoises, and writes the cleaned signal into **CABLE Input**. Apps that listen to **CABLE Output** then receive your noise-free voice.\n\n\u003e **Sanity test**: open the Windows **Voice Recorder** app, set its mic to **CABLE Output**, record 10 seconds with a fan / typing in the background. Toggle NoiseGate's tray Enable off and re-record. The difference should be obvious.\n\n## Picking a specific microphone\n\nBy default NoiseGate captures from your **system default mic**. If that's a Bluetooth headset, Windows will switch the headset into **HFP/Hands-Free mode** as soon as we open the mic — that's a Windows-wide behavior, not a NoiseGate bug, and it sounds awful (16 kHz mono, glitchy). Pick your USB or built-in mic instead:\n\n```powershell\n# See what's available:\n.\\noisegate.exe --list-devices\n\n# Run with a specific mic (substring match on the friendly name):\n.\\noisegate.exe --mic \"USB\"\n.\\noisegate.exe --mic \"Yeti\"\n.\\noisegate.exe --mic \"Realtek\"\n```\n\nFor a permanent choice, copy the device `id` from `--list-devices` into `%APPDATA%\\NoiseGate\\config.toml`:\n\n```toml\ninput_device_id = \"{0.0.1.00000000}.{...your-id...}\"\n```\n\n## Configuration\n\n`%APPDATA%\\NoiseGate\\config.toml` — created on first run:\n\n```toml\ninput_device_id = \"\"        # empty = default mic\noutput_device_id = \"\"        # empty = auto-detect VB-Cable\nenabled = true\nattenuation_db = 100.0       # 6.0 = subtle, 100.0 = max\nauto_start = false\n```\n\nLogs at `%APPDATA%\\NoiseGate\\logs\\noisegate.log`. Tune verbosity with `RUST_LOG=noisegate=debug`.\n\n## Cargo features\n\n| Flag | Default | What it does |\n|---|---|---|\n| `rnnoise` | ✅ on | RNNoise backend via `nnnoiseless`. Pure-Rust, model embedded, no extra runtime deps. |\n| `onnx` | off | Adds ONNX Runtime as a dependency so you can load any raw-audio noise-suppression ONNX model (e.g. DFN3). Needs `onnxruntime.dll` on PATH. |\n\nBuild with the ONNX backend in addition to RNNoise:\n\n```powershell\ncargo build --release -p noisegate -F onnx\n```\n\nTo get DeepFilterNet3 quality:\n1. Build with `-F onnx`.\n2. Download the DFN3 ONNX export from Hugging Face: \u003chttps://huggingface.co/Rikorose/DeepFilterNet3\u003e.\n3. Drop `onnxruntime.dll` next to `noisegate.exe` (download from \u003chttps://github.com/microsoft/onnxruntime/releases\u003e — pick the `win-x64` zip).\n4. Point `model_path` in `config.toml` at the ONNX file.\n\n## License\n\nCode: dual MIT / Apache-2.0 — your choice.\n\nThe bundled RNNoise model (via `nnnoiseless`) is BSD-licensed — fine for any use including commercial. If you opt into the ONNX backend with DeepFilterNet3 weights, those are research / non-commercial; for commercial use, retrain on your own data or pick a different ONNX model.\n\n## Cost\n\n$0 for personal use. Every component is free. No driver-signing certs required (we don't ship a driver — VB-Cable does).\n\n## Not included (yet)\n\n- macOS / Linux backends (the audio-io crate is Windows-only; the rest is portable).\n- Far-end denoising (cleaning the audio you *hear* from the call — only your mic is cleaned).\n- Acoustic echo cancellation (combine with an AEC frontend if needed).\n- Auto-update.\n\n## Credits\n\nBuilt on top of excellent open-source work:\n\n- **[RNNoise](https://gitlab.xiph.org/xiph/rnnoise)** by Jean-Marc Valin / Xiph.Org — the recurrent-network noise-suppression model that powers the default backend.\n- **[`nnnoiseless`](https://github.com/jneem/nnnoiseless)** by jneem — pure-Rust port of RNNoise; this is the actual crate doing the work.\n- **[DeepFilterNet](https://github.com/Rikorose/DeepFilterNet)** by Hendrik Schröter et al. — the modern speech-enhancement model that the optional ONNX backend can run.\n- **[ONNX Runtime](https://onnxruntime.ai/)** + the **[`ort`](https://github.com/pykeio/ort)** Rust bindings — power the optional `onnx` backend.\n- **[VB-Cable](https://vb-audio.com/Cable/)** by VB-Audio — the free virtual audio driver every Windows audio-routing app depends on.\n- **[`windows`](https://github.com/microsoft/windows-rs)** crate by Microsoft — official Win32 bindings for Rust (WASAPI, MMCSS, COM).\n- **[`tray-icon`](https://github.com/tauri-apps/tray-icon)** + **[`winit`](https://github.com/rust-windowing/winit)** — system-tray UI and event loop.\n- **[`ringbuf`](https://github.com/agerasev/ringbuf)** — the lock-free SPSC buffers that connect the audio threads.\n- Inspired by **[NoiseTorch](https://github.com/noisetorch/NoiseTorch)** (Linux-only equivalent that uses RNNoise).\n\n## Issues \u0026 discussion\n\n- Bug reports / feature requests: [open an issue](https://github.com/Yashsomalkar/noisegate/issues).\n- Questions, ideas, \"is X possible?\" — [Discussions](https://github.com/Yashsomalkar/noisegate/discussions).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fyashsomalkar%2Fnoisegate","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fyashsomalkar%2Fnoisegate","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fyashsomalkar%2Fnoisegate/lists"}