A lightweight Windows tray utility that switches the system default audio output device through a list you choose, with a single global hotkey.
Inspired by PeekDesktop: no installer, single executable, portable configuration.
- One hotkey, one switch. Press your hotkey from any app — game, meeting, browser — and the system default audio output jumps to the next device on your list. No need to open the Sound settings panel.
- Pick exactly which devices to cycle. A typical Windows PC — desktop or laptop — exposes many outputs: the motherboard or chassis analog jacks (speakers, headphone-out, line-out), monitor audio routed over DisplayPort or HDMI, USB DACs and headset dongles, every Bluetooth headset ever paired, virtual audio cables, and so on. Audio Carousel only rotates through the ones you selected, so the cycle stays short and predictable.
- Visual confirmation. A toast appears at the bottom-right of the active monitor showing the new device's name. The tray icon's tooltip also reflects the current device.
- Tray-resident, mouse-friendly. Left-click the tray icon to cycle (same as the hotkey). Right-click for a menu that lists your devices — click one to switch to it directly, plus Cycle next, Settings, About, Exit.
- Flexible hotkeys. Modifier combinations (
Ctrl+Alt+A) and the rarely-used function keys (F13–F24, common on programmable keyboards and macro pads) all work. - 10-language UI. English, 日本語, 简体中文, 繁體中文, Español, Français, Deutsch, Português (Brasil), Русский, 한국어. Auto-detects from your Windows display language; switch manually any time in Settings.
- Plain-text JSON config. Settings live in
audio-carousel.jsonnext to the .exe. Open it in any text editor to see exactly what's saved, change a hotkey or device name without launching the UI, version-control it with git, or generate it from a script. The Settings window just edits the same file. - Optional auto-start. "Start with Windows" writes only to the
current user's
HKCU\...\Runkey — no admin rights, no service, no scheduled task. - No installer, no admin, no .NET runtime. Drop the .exe in any folder and run it. Self-contained build means you don't have to install anything else.
- Offline-device aware. Devices that are unplugged, powered off, or not currently connected appear grayed out in Settings; the cycle skips them automatically. This is especially handy for Bluetooth headphones — leave them in the cycle list permanently, and they'll rejoin the rotation only when they're actually connected.
-
Download
AudioCarousel.exefrom the Releases page and put it in any folder you like (e.g.C:\Tools\AudioCarousel\). -
Double-click to launch.
First-run note: because the binary is unsigned, Windows SmartScreen may show "Windows protected your PC". Click More info → Run anyway. Alternatively, before launching: right-click the .exe → Properties → check Unblock → OK. See Disclaimer below for why this happens.
-
The tray icon appears (near the clock) and the Settings window opens automatically on first run.
In the Settings window:
- Add the audio outputs you want to cycle. Click Add device and pick from the dropdown. Typical choices: speakers, headset, HDMI TV, Bluetooth earbuds. Two devices is enough to make the hotkey useful.
- Reorder if you like. Use Move up / Move down to set the cycle order.
- Set a hotkey. Click the hotkey field and press the keys you
want — e.g.
F16,Ctrl+Alt+A,Win+Shift+S(use anything not already taken). Click Clear to remove. - (Optional) UI language. Defaults to Auto (follows Windows). Pick a specific language if you prefer.
- (Optional) Start with Windows. Tick the checkbox to launch Audio Carousel automatically when you sign in.
- Click OK.
- Press the hotkey from any app → audio jumps to the next device on your list. A toast at the bottom-right of the active monitor confirms the switch.
- Left-click the tray icon does the same as pressing the hotkey.
- Right-click the tray icon for the menu:
- Your registered devices — the current one is checked; click any other to switch to it directly (offline devices are grayed out)
- Cycle next — same as hotkey
- Settings — reopen the settings window
- Start with Windows — toggle without opening Settings
- About — version info
- Exit — quit the app
- Settings file:
audio-carousel.jsonin the same folder as the .exe. Edit it by hand if you like, or just use Settings. - Registry: the only write is to
HKCU\Software\Microsoft\Windows\CurrentVersion\Runwhen Start with Windows is on. Turning it off removes the entry. Only the current user is affected. No admin rights are required. - No background services, no scheduled tasks, no telemetry. The app is just the one .exe.
- Right-click the tray icon → Settings → uncheck Start with Windows → OK (this removes the registry entry).
- Right-click the tray icon → Exit.
- Delete the folder containing
AudioCarousel.exeandaudio-carousel.json.
If you skip step 1, you can also clean up later by deleting the
AudioCarousel value under
HKCU\Software\Microsoft\Windows\CurrentVersion\Run in regedit.
- Windows 10 1809 or later, or Windows 11
- x64
- No admin rights required
- No .NET runtime required (self-contained build)
Audio Carousel calls IPolicyConfig, an undocumented Windows COM
interface, to switch the default audio endpoint. This is the same
technique used by many similar tools (SoundSwitch, EarTrumpet, NirCmd,
...) and has been stable from Windows Vista through Windows 11. However,
since the API is unofficial, Microsoft could change or remove it in a
future Windows update without notice. If a future Windows update breaks
Audio Carousel, please open an issue.
The released binary is not code-signed (code-signing certificates carry an ongoing cost, and we've held off on adopting one while the project remains free). Windows SmartScreen will warn on first launch until the binary's reputation builds up — see the First-run note under Download and run.
See SECURITY.md for the threat model and how to report security issues.
MIT — © 2026 Kairin. Bundled third-party components and their licenses are listed in THIRD_PARTY_NOTICES.md.
Everything below is for building from source. End users do not need any of this — just download the release binary above.
- C# / .NET 9 / WinForms (
net9.0-windows) - xUnit for tests
NAudio.Wasapi(NAudio.CoreAudioApinamespace) plus an inlineIPolicyConfigCOM declaration insrc/AudioCarousel/Audio/
Requires the .NET 9 SDK on Windows.
dotnet build
dotnet test
dotnet format # fixes whitespace/EOL per .editorconfigpwsh ./scripts/publish.ps1Output: publish/AudioCarousel.exe (~108 MB, self-contained).
scripts/publish.ps1 is the only supported way to produce a
release exe. The flags are deliberately tuned; do not assemble
dotnet publish arguments by hand.
Binary size note. Windows Forms is incompatible with NativeAOT (
NETSDK1175), and trimming strips runtime COM interop machinery thatNAudio.CoreAudioApidepends on. The script therefore uses an untrimmed self-contained JIT single-file publish. The ~108 MB size is the price of "drop the .exe anywhere and run, no .NET runtime needed" — this tradeoff was made deliberately.
See CLAUDE.md for the architecture map, conventions, and
critical gotchas (don't enable AOT/trimming, atomic config writes,
test isolation rules, etc.). Design notes live under
docs/superpowers/specs/.
