Auto-duck background audio when your mic is active.
A lightweight macOS menu bar utility for voice-to-text, calls, and recording.
WisprDuck sits in your menu bar and watches for microphone activity. When a selected app starts using the mic — voice-to-text tools like Wispr Flow, video calls, screen recordings — WisprDuck automatically lowers the volume of other apps so your voice comes through clearly. When the mic goes idle, volume smoothly fades back up.
No manual toggling. No keyboard shortcuts. Just works.
- Per-app mic triggers — choose which apps trigger ducking (e.g., only Wispr Flow) or duck on any mic use
- Per-app duck targets — duck all audio or pick specific apps (Spotify, Chrome, Arc, etc.)
- Smart defaults — Wispr Flow pre-selected as trigger, 20+ common audio apps pre-selected as duck targets
- Smooth linear fade — 1-second constant-rate volume transitions, no harsh jumps
- Crash-safe — uses
mutedWhenTappedso audio auto-restores if WisprDuck quits unexpectedly - Lightweight — event-driven Core Audio listeners, no polling, minimal CPU usage
- Smart grouping — Chrome helpers, Slack workers, etc. automatically group under their parent app
- Clone the repo and build from source, or download a build from the releases page
- Drag WisprDuck.app to
/Applications - Launch WisprDuck
- On first launch: right-click the app → Open (required for unsigned apps)
- Grant microphone access when prompted
- Grant Screen & System Audio Recording access (audio-only is supported)
- If you don’t see the prompt, open System Settings → Privacy & Security → Screen & System Audio Recording and enable WisprDuck.
WisprDuck runs as a menu bar app — no Dock icon. Look for the duck foot in your menu bar.
WisprDuck uses Core Audio process taps (macOS 14.2+) to intercept audio at the system level. When a trigger app activates the mic:
- Detect — Per-process Core Audio listeners detect which app is using the mic input
- Match — The active mic app is checked against your trigger list (or triggers on any mic use)
- Tap — Process taps are created for target apps, muting their original audio at the system mixer
- Scale — The intercepted audio is scaled by the duck level and played through an aggregate device
- Restore — When the mic goes idle, volume linearly ramps back to 100% over ~1 second, then taps are destroyed
The mutedWhenTapped behavior is the safety net: if WisprDuck crashes or is force-quit, macOS automatically unmutes all tapped processes. Audio is never permanently stuck at a low volume.
Click the duck foot icon in your menu bar:
| Setting | Description |
|---|---|
| Enable Monitoring | Toggle WisprDuck on/off |
| Duck Level | Target volume when ducked — 0% is silent, 100% is full volume (default 10%) |
| Trigger All Apps | Duck on any mic use, or toggle off to pick specific trigger apps |
| Duck All Apps | Duck every audio app, or toggle off to pick specific apps to duck |
- macOS 14.2+ (Sonoma) — required for Core Audio process taps
- Microphone permission — required to access microphone state on macOS
- Screen & System Audio Recording permission — required to capture and scale other apps’ audio (audio-only is supported)
git clone https://github.com/kalepail/wispr-duck.git
cd wispr-duck
open WisprDuck.xcodeprojBuild and Run with Cmd+R in Xcode. Requires Xcode 15+ with the macOS 14.2+ SDK.
Apache 2.0 — see LICENSE for details.
