Skip to content

Repository files navigation

NoNoise Mac

NoNoise Mac

Real-time, on-device AI noise cancellation for macOS — free Krisp alternative

Silence keyboards, fans, traffic, and room echo on any mic, in every app — processed entirely on your Apple Silicon Neural Engine. No cloud. No subscription. No lag.

Swift Platform On-device License Size CI

Install · Why · Usage · How it works · Contribute



How to Install



Works with
Slack Google Meet Zoom Discord OBS Studio


Important

Requires a Mac with Apple Silicon (M1 / M2 / M3 / M4 or newer). NoNoise Mac runs the model on the Apple Neural Engine + Metal. It does not support Intel Macs.


🎥 Demo

nonoise-intro.1.mp4

Real noise in, studio voice out — in real time, 100% on-device.


🎯 What is NoNoise Mac?

NoNoise Mac is a lightweight menu-bar app that cleans your microphone in real time using DeepFilterNet3, a state-of-the-art deep-learning speech-enhancement model, compiled to CoreML. It strips background noise and de-reverberates "roomy" audio, then routes the clean signal through a virtual audio cable so Zoom, Meet, Discord, OBS, Slack, QuickTime — anything — hears studio-quality voice.

Everything happens on your device. Your audio never leaves your Mac.

✨ Why NoNoise Mac

  • 🚫 Kills real-world noise — fans, AC, keyboards, traffic, café chatter, crying kids.
  • 🎙️ Studio clarity — de-reverb removes echo so you sound close-mic'd and present.
  • ⚡ Real-time feel — a tight Metal/Accelerate pipeline keeps latency negligible for live calls.
  • 🔒 100% private — fully on-device on the Neural Engine; nothing is uploaded, ever.
  • 🎛️ One-click modes — Meeting, Podcast, Tutorial, or Custom, with strength + tone control.
  • ↩️ Safe reset — restore audio/device settings to defaults from Settings without deleting saved Voice Profiles or custom Hotkeys.
  • 🚀 Launch at Startup — open Settings → General → Launch at Startup to start the menu-bar app automatically when you log in. The setting is off by default and requires the bundled app; if macOS asks for approval, enable NoNoise Mac under System Settings → General → Login Items.
  • 🎙️ Broadcast Voice — a one-tap clarity lift (Off / Low / Medium / High) that adds studio presence and tames sibilance, so you sound clearer and more present while still sounding like you.
  • 🎧 Clean Incoming / Guest — de-noise the other side too. NoNoise Mac captures all system audio via a native macOS process tap (no loopback device or BlackHole required) and cleans what you hear in real time with the same on-device AI — no cloud, no subscription. Requires macOS 14.4+.
  • 🫦 Mouth Noise — an optional de-plosive (P-pop / B-thump suppressor) and de-click (lip-smack / mouth-click suppressor) stage (Off / Low / Medium / High). Both are identity at rest — only the artifact is removed, never the voice.
  • ⌨️ Global Hotkeys + Stream Deck — system-wide hotkeys (user-configurable) for every control action (toggle AI, A/B bypass, cycle preset, cycle Broadcast Voice, nudge gain), plus a nonoisemac:// URL scheme for Stream Deck "Open" actions or shell scripting.
  • 📊 Live HUD & loudness — see your input/output levels, a clip warning, an "AI working hard" signal, and added latency at a glance; an ITU-R BS.1770 LUFS meter with optional one-tap loudness normalization (−14 / −16 LUFS) keeps you consistent across calls and recordings.
  • 🛠️ Works everywhere — any input (Built-in, USB, XLR via interface) → any app via a virtual cable.
  • 🟢 On by default — launches actively cancelling noise; toggle from the menu bar anytime.
  • 💸 Free & open source — MIT licensed.

🧩 Modes

Mode Best for Suppression Voice Polish
Meeting Calls / max noise removal Full Off (raw, uncolored)
Podcast Warm, natural voice Full, natural floor On (warm)
Tutorial Screen recordings Full On (clear/present)
Custom Your own balance Your Strength + Reduction Limit On (balanced)

Your selection (and any fine-tuning) is remembered between launches.

Tutorial is tuned to sound clean and present for screen recordings; it does not add output gain by default. If your mic is quiet, raise Output Gain manually.

🎙️ Broadcast Voice

An optional clarity enhancement layered on top of any mode. It pairs a gentle, wide presence lift with an automatic de-esser, so added "air" never becomes harsh sibilance. Off by default; Low / Medium / High increase the effect. It is designed to be transparent — a peaking bell with unity gain at the low end and a de-esser that only acts on real "ess" sounds — so it preserves the identity of your voice.

🫦 Mouth Noise

Two targeted artifact suppressors that live after the de-esser in the chain:

  • De-plosive: detects P-pop / B-thump transients by watching the ratio of low-band energy (< 120 Hz) to total energy. Only subtractively ducks the low band when both the energy level and the low-heavy ratio exceed their thresholds — so normal voiced stops (B, D, G) pass through untouched.
  • De-click: tracks a fast envelope vs. a slow background RMS. When the fast/slow ratio spikes beyond clickRatio (6×), a brief (4 ms) gain reduction is applied. Normal speech never sustains this ratio.

Both stages are Off by default and are identity at rest — verified by XCTest. They are orthogonal to Broadcast Voice and the noise preset.

⌨️ Global Hotkeys + Stream Deck

Global hotkeys (default combos use ⌃⌥ to avoid system-shortcut collisions):

Action Default
Toggle Noise Cancellation ⌃⌥N
A/B Bypass (hold for raw) ⌃⌥B
A/B Bypass (toggle) ⌃⌥⇧B
Preset → Next ⌃⌥]
Preset → Previous ⌃⌥[
Broadcast Voice → Next ⌃⌥C
Gain + ⌃⌥=
Gain − ⌃⌥-

Rebind any hotkey in Settings → Hotkeys. If a combo is already in use by another app, NoNoise Mac shows a conflict warning and leaves that slot unregistered.

Stream Deck (no SDK required): Use the Stream Deck "Open" action (or "Website" in Open mode) with one of these URLs:

nonoisemac://toggle
nonoisemac://bypass
nonoisemac://preset/next
nonoisemac://preset/prev
nonoisemac://clarity/next
nonoisemac://gain/up
nonoisemac://gain/down

Or from a terminal / shell script: open nonoisemac://toggle (or NoNoiseMacCLI --action toggle).

A/B Bypass: Hold ⌃⌥B to momentarily hear the raw mic (useful for comparing before/after during a recording). Release to restore AI. ⌃⌥⇧B toggles bypass on/off persistently.

📥 Install

Easiest — download the installer (no Xcode, no Terminal)

Best for most people. One download, one double-click, done.

  1. Go to the latest release and download NoNoiseMac-<version>.pkg (e.g. NoNoiseMac-v1.4.0.pkg).
  2. Double-click it. It isn't notarized yet, so macOS first calls it an "unidentified developer" — open System Settings → Privacy & Security, click Open Anyway, then run the installer. (One-time approval.)
  3. The installer puts NoNoise Mac in Applications and installs the NoNoise Mic virtual microphone in one step. All audio drops for ~3 s while the audio system restarts — that's expected.

Approving the unsigned NoNoise Mac installer in System Settings → Privacy & Security (Open Anyway), then the installer running and completing successfully
First open: macOS blocks the unsigned .pkg — click Open Anyway in Privacy & Security, then run the installer to the success screen. The file is named NoNoiseMac-<version>.pkg on the releases page.

Now skip to Usage and point your apps at NoNoise Mic. No git, no build tools — those aren't preinstalled on macOS, and you don't need them for this path.

Prefer the pieces separately? The same release also ships NoNoiseMac-<version>.app.zip (unzip → drag to Applications) and NoNoiseMic-driver-<version>.zip. The .pkg just installs both for you.

Build from source (developers)

Prerequisites: macOS 13+, Apple Silicon, and the Swift toolchain (Xcode or Swift.org). Note: git and the Swift toolchain are not preinstalled on macOS — this path is for contributors; everyone else should use the installer above.

git clone https://github.com/ivalsaraj/NoNoise-Mac.git
cd NoNoise-Mac
./install-app.sh --with-driver   # arm64 release build → /Applications, stages the driver
sudo ./install-driver.sh         # install the NoNoise Mic driver (restarts coreaudiod)

install-app.sh runs swift build -c release --arch arm64, bundles/signs the app, and installs it to Applications; --with-driver also builds the virtual mic so install-driver.sh can install it. First app launch: right-click → Open (ad-hoc signed); if macOS blocks it, System Settings → Privacy & Security → Open Anyway. Build the .pkg yourself with ./build-pkg.sh.

Each tagged release (cut with ./release.sh) publishes the Apple Silicon build — app, CLI, driver, and the one-click .pkg — to the Releases page. ⭐ the repo to get notified.

Publishing a versioned release

To publish a new version (e.g., 1.2.0), run:

./release.sh 1.2.0

This script:

  1. Updates the version in Resources/Info.plist
  2. Commits the version bump
  3. Creates a v1.2.0 git tag
  4. Pushes to GitHub, which triggers the release workflow

The workflow then builds optimized arm64 binaries and publishes assets (app, CLI, driver, checksums) to the Releases page.

Version format: Use semantic versioning (major.minor.patch, e.g., 1.2.0, 1.2.1, 2.0.0).

🚀 Usage

NoNoise Mic (virtual microphone) — recommended

The bundled NoNoise Mic driver lets any app pick the cleaned audio directly — no BlackHole, no system-default juggling. Installed the .pkg? The driver is already set up — skip to step 1.

Building from source instead? Install the driver once:

./build-driver.sh          # compile + ad-hoc sign NoNoiseMic.driver
sudo ./install-driver.sh   # install to /Library/Audio/Plug-Ins/HAL, restart coreaudiod, verify

Installing restarts coreaudiod, so all audio drops for ~3 s. Then:

  1. Launch NoNoise Mac — the NoNoise logo appears in your menu bar.
  2. Input — set Input Device to your real microphone (Built-in, USB, etc.). Output is automatic: the app routes cleaned audio to the hidden "NoNoise Mic Engine" and the popover shows Output: Automatic → NoNoise Mic (the Output picker only appears for the BlackHole fallback below).
  3. Point your apps at the mic — set the Microphone to NoNoise Mic inside each app (see app-by-app steps below).
  4. Pick a mode — Meeting / Podcast / Tutorial, or fine-tune Suppression Strength and Reduction Limit in Settings (this switches the mode to Custom).
  5. Noise cancellation is ON by default. Toggle it anytime from the menu bar. Remove the driver later with sudo ./uninstall-driver.sh.

App-by-app microphone setup

Slack

  1. Click your profile picture in the bottom-left sidebar.
  2. Go to Preferences → Audio & Video.
  3. Under Microphone, select NoNoise Mic Virtual.

Google Meet

  1. Before or during a call, click the ⋮ More options menu → Settings.
  2. Under Audio, set Microphone to NoNoise Mic Virtual.

Zoom / Discord / OBS — each has an Audio or Sound Settings page; set Microphone to NoNoise Mic Virtual there.

⚠️ Do NOT change the microphone in macOS System Settings → Sound. Setting "NoNoise Mic" as your system-default input causes your Mac to route audio into itself — you will hear your own voice echoed back. Always set the microphone inside the app (Slack, Meet, Zoom, etc.), not at the system level.

Gatekeeper and driver-load are different checks. The app is ad-hoc signed (right-click → Open on first launch). The driver is loaded by coreaudiod, which silently ignores a plug-in with an invalid signature — install-driver.sh verifies the device actually appeared.

Fallback: BlackHole virtual cable

If you can't install the driver (e.g. a managed Mac), NoNoise Mac also works with a BlackHole 2ch virtual cable:

  1. Launch — find the NoNoise logo in your menu bar.
  2. Input — set Input Device to your real microphone (Built-in, USB, etc.).
  3. Output — set Output Device to BlackHole 2ch (the virtual cable).
  4. Point your apps at the cable — in Discord / Zoom / OBS, set the Microphone to BlackHole 2ch.
  5. Pick a mode and toggle as above — noise cancellation is ON by default.

🎧 Clean Incoming / Guest (hear them clean)

NoNoise Mac can also clean the other side of a call — a guest on a noisy laptop mic, or a caller with a fan running — so you hear them de-noised in real time.

Requires macOS 14.4+. No BlackHole or loopback device needed.

NoNoise Mac uses a native macOS process tap to capture all system audio except its own output, runs a second on-device AI stream, and re-plays the cleaned result to your default output automatically.

  1. Open Settings → Clean Incoming / Guest and enable the toggle.
  2. macOS will prompt for audio capture permission — grant it. (One-time.)
  3. Done. NoNoise Mac cleans what you hear on any call, podcast, or stream, and follows your default output device automatically if you switch headphones or speakers mid-call.

The feature is off by default (the second AI stream only runs while enabled). On macOS 13 or earlier the toggle is hidden — use the CLI dual-pipeline approach below instead.

Updating

NoNoise Mac updates itself with Sparkle. It checks for new stable releases on launch and daily; when one is available you'll get a native "A new version is available" prompt, or use Check for Updates… in the popover.

First install only: the updater ships starting with the first Sparkle-enabled release. If you're on an older build, download that first release manually (right-click → Open, since the app is ad-hoc signed). After that, updates are automatic.

💻 Advanced: dual pipelines (CLI)

Want to clean your outgoing mic and clean incoming audio from your headphones at the same time? Use the bundled NoNoiseMacCLI. Device names match those shown in the menu-bar app's Input/Output pickers (and macOS System Settings → Sound); the CLI also echoes the input/output devices it detects on launch.

# Show usage and available flags
./NoNoiseMacCLI --help

# Terminal 1 — clean your microphone into the virtual cable
./NoNoiseMacCLI --in "Built-in Microphone" --out "BlackHole 2ch" --gain 1.0

# Terminal 2 — clean a captured meeting stream into your speakers
./NoNoiseMacCLI --in "Loopback Audio" --out "MacBook Pro Speakers" --gain 1.5

Offline audio file cleanup

Clean an audio file locally:

./NoNoiseMacCLI --denoise noisy.wav --output clean.wav --preset podcast --overwrite

This v1 file mode writes a cleaned audio file. Video containers such as MP4 are planned separately so the CLI can preserve the original video track correctly.

🔬 How it works

Microphone ─▶ Capture (48 kHz) ─▶ Ring buffer ─▶ STFT
                                                   │
                            DeepFilterNet3 (CoreML, Neural Engine)
                                                   │
                                ISTFT ─▶ Voice shaping (polish · Broadcast Voice · Mouth Noise)
                                                   │
                                             Virtual cable ─▶ your app
  • DeepFilterNet3 runs as a streaming UNet on CoreML (computeUnits = .all).
  • A faithful STFT feature pipeline (ERB bands, complex-spec features) matches the reference model exactly — see AGENTS.md and CONCEPTS.md.
  • An optional Voice Polish chain (high-pass → shelves → compressor → limiter) adds tone and leveling for Podcast/Tutorial modes.
  • Optional Broadcast Voice (presence → de-esser) and Mouth Noise (de-plosive → de-click) finisher stages layer on any mode — each Off by default and identity-at-rest.

🔒 Privacy

NoNoise Mac is 100% on-device. Audio is captured, processed by the local CoreML model, and routed out — it is never sent off your Mac. There is no telemetry and no account.

🧰 Tech stack

  • App: Swift 5.9, SwiftUI (menu-bar MenuBarExtra)
  • Audio: AVFoundation, CoreAudio, AudioToolbox, Accelerate (vDSP)
  • AI: CoreML + Metal, model computeUnits = .all
  • Model: DeepFilterNet3 (streaming UNet)
  • Packaging: Swift Package Manager + bundle.sh / install-app.sh

🤖 Contributing & AI-native

This repo is built to be worked on by humans and AI agents alike:

  • AGENTS.md — architecture, build/test, and the non-negotiable DSP / real-time invariants.
  • docs/agents/README.md — the agent store: a catalog of agents to invoke for DSP review, CoreML I/O auditing, releases, and more.
  • docs/knowledge/ — compounding knowledge base (gotchas, decisions, timeline).
  • CONCEPTS.md — domain glossary · CONTRIBUTING.md — how to contribute.

PRs welcome. Keep the default audio path behavior-preserving and the render thread allocation-free.

🙏 Credits & acknowledgements

  • Original project — MetalVoice by Ghostkwebb. NoNoise Mac is a rebrand + AI-native restructuring of MetalVoice, used under the MIT License. Huge thanks for the original implementation and the CoreML DeepFilterNet integration.
  • DeepFilterNet by Hendrik Schröter (Rikorose) — the speech-enhancement model at the core of this app.
  • BlackHole by Existential Audio — the recommended virtual audio cable.
  • SF Symbols by Apple — UI iconography.

📄 License

MIT © Ghostkwebb (original MetalVoice) · ivalsaraj (NoNoise Mac)


Built for macOS, on-device, with ❤️ — NoNoise Mac

About

Real-time, 100% on-device AI noise cancellation for macOS Silicon. Menu-bar app + CLI. (Free Krisp alternatice)

Topics

Resources

Contributing

Stars

13 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages