Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

62 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Kwiet

AI microphone cleanup, in every app you already use. No virtual microphone. No device to switch. One toggle.

CI Licence Windows 11

Français · Architecture (French)


The problem

Noise-suppression tools install a virtual microphone. Which means selecting it in Teams, in Discord, in Meet, in every app — and doing it again every time an update resets the default device. When it goes wrong, the app picks up the wrong microphone and nobody can hear you.

Kwiet creates no device. It attaches to your microphone, inside the Windows audio engine. Apps see nothing unusual: they open the microphone they have always opened, and what comes out of it is already clean.

How it works

Kwiet is an APO (Audio Processing Object): a user-mode COM DLL loaded by audiodg.exe, the Windows audio engine. No kernel driver.

Denoising is done by DeepFilterNet3, a ~2 M parameter network — far too heavy for audiodg's real-time thread, which must return a block every 10 ms without ever allocating, taking a lock, or making a system call.

APOProcess()  — audiodg's real-time thread ——————————————————————————
   |  pushes input into a lock-free SPSC ring (preallocated)
   |  pops processed output (fixed 30 ms delay)
   +— if the worker is dead or late: PASSTHROUGH immediately
                                     never silence, never a stall
Worker  — normal-priority thread —————————————————————————————————————
   +— drains the ring, calls the Rust cdylib (DeepFilterNet3)

Fail-open is structural: an APO that crashes audiodg leaves the whole machine without sound. Every design decision follows from that. If the DSP disappears, audio passes through untouched — that is the worst case.

Details and decisions: docs/architecture.md (French).

Measurements

Windows 11 build 26200, USB microphone, 48 kHz stereo:

Noise suppression ≥ 24 dB on a controlled source
Added latency 30 ms, fixed
CPU ~2 % of one core (RTF 0.017–0.020)
Dropouts 0

Installing

Important

One step after installing is not ours to take. Windows 11 requires you to choose the effect pack yourself: Settings → Sound → your microphone → Audio enhancements → Kwiet. Until you do, Kwiet is installed and entirely inert. The panel will tell you so, with a button to open the right page.

  1. Download the MSI for your language — Kwiet_x.y.z_x64_en-US.msi or Kwiet_x.y.z_x64_fr-FR.msi — from releases.
  2. Run it. It asks for elevation: the effect pack is a driver package and registers with Windows through pnputil. Sound cuts out briefly.
  3. Choose Kwiet in your microphone's audio enhancements (see above).
  4. The tray icon opens the panel.

Uninstalling removes the pack from the driver store along with the app.

Requirements

  • Windows 11 24H2 or newer (x64). The effect-pack mechanism used here does not exist on earlier versions.
  • A microphone that negotiates 48 kHz. Outside that, Kwiet deliberately falls back to passthrough rather than resampling blind.

Where it applies

Native applications — Discord, Zoom, Teams, OBS, games, recorders
Firefox
Chrome, Edge, and Electron apps

Chromium runs its own WebRTC audio pipeline and asks Windows for unprocessed audio so the two do not stack. A raw stream, by Microsoft's definition, bypasses every effect except a vendor's always-on processing — and a selectable effect pack is not always-on. Measured here: with a microphone capture open, Firefox makes this APO lock and process while Chrome never instantiates it at all, in four separate configurations including --disable-features=WASAPIRawAudioCapture.

This is not specific to Kwiet. Windows' own Voice Clarity is bypassed the same way, through the same mechanism. Tools that do reach a Chrome tab — Krisp, NVIDIA Broadcast — get there by installing a virtual microphone, which is precisely the thing Kwiet was built to avoid. Details: docs/architecture.md §14.

The panel

One idea, repeated everywhere: celadon is what your apps receive, amber is what Kwiet took away. The gap between them is the product.

  • Scope — the last few seconds, as two stacked envelopes.
  • Meter — the present instant, as one bar: the bright fill is the signal going out, the amber beyond it is the noise removed.
  • Strength — from gentle to maximum. Higher means total silence between words, at the risk of clipping their attacks.
  • Toggle — immediate bypass, without dropping the stream.

The panel speaks English or French, following Windows, and switches by hand at the bottom right.

Building from source

Requirements: Visual Studio 2019+ (C++ workload, Windows 10/11 SDK), CMake ≥ 3.21, stable Rust, Node 20+.

# 1. The APO (C++)
cmake -S apo -B apo/build -A x64
cmake --build apo/build --config Release

# 2. The DSP (Rust, embeds the DeepFilterNet3 model)
cd dsp ; cargo build --release ; cd ..

# 3. The effect pack, signed and timestamped
.\installer\effectpack\build-package.ps1 -Version 0.2.2 `
    -CertPath my-certificate.pfx -CertPassword $env:PFX_PW

# 4. The app and the installer
cd ui ; npm ci ; npm run tauri build
# -> ui/src-tauri/target/release/bundle/msi/Kwiet_0.2.2_x64_en-US.msi
#    ui/src-tauri/target/release/bundle/msi/Kwiet_0.2.2_x64_fr-FR.msi

The format is MSI, not NSIS: NSIS stubs draw antivirus false positives far more often than a Windows Installer package does. The effect pack is placed by a deferred custom action, defined in ui/src-tauri/wix/effectpack.wxs.

Icons and logo are generated: node assets/build-assets.mjs.

An APO under development is best tested on a VM or a dedicated machine — one that crashes takes the whole machine's sound with it: docs/procedure-test-vm.md (French).

Repository layout

Directory Contents
apo/ C++: the COM shim, SPSC rings, worker thread, shared memory
dsp/ Rust cdylib: DeepFilterNet3 behind a stable C ABI
ui/ Tauri v2: panel, tray, MSI installer
installer/ Effect pack (INF, catalogue) and install scripts
assets/ Visual identity, generated by script
bench/ Measurement tools
docs/ Architecture decisions, test procedure

Licence

Apache-2.0.

DeepFilterNet3 is dual MIT/Apache-2.0, compatible. The embedded model comes from the DeepFilterNet project by Hendrik Schröter.

About

System-wide AI microphone noise suppression for Windows 11. No virtual microphone, no device switching.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages