Skip to content

About

A vibe coded application for windows allowing independent routing of program audio to different audio output devices.

Resources

Stars

1 star

Watchers

0 watching

Forks

Repository files navigation

🎛️ Sound Router

Send each app's audio wherever you want it.

Spotify to the Bluetooth speaker. The game to your headset. Discord to both ears. At the same time.

Download Downloads License

Windows 11 .NET 8 No admin required

Sound Router - a node graph patchbay routing Spotify, Chrome and Steam to different audio outputs

Windows can already send one app to a different speaker — it is buried five clicks deep in Settings, resets itself, and shows you a dropdown list of device names.

Sound Router gives you the patchbay instead. Drag a cable from an app to a device. That app's audio moves there and nothing else changes.

✨ Features

🔌 Drag-and-drop patching Grab a socket, drop it on a device. That is the whole interaction.
🎚️ Per-app volume A real rotary knob on every node. Drag it, or scroll over it.
📊 Live VU meters Proper dB-scaled metering so you can see what is actually playing where.
🔀 Many-to-one, one-to-many Several apps into one device, different apps into different devices, simultaneously.
📌 Pin what you use Keep your five apps and two devices on screen instead of scrolling a system list.
💾 Remembers everything Routes survive restarts and are re-applied when an app relaunches with new process ids.
🚀 Starts with Windows Optional, and boots straight to the tray.
🎨 DJ deck styling LED outlines, glowing patch cables, segmented meters.

📥 Install

Installer (recommended)

⬇ Download the latest installer

Run it. No administrator rights needed — it installs to your user profile and offers to start Sound Router with Windows.

Portable

Grab the .zip from the same page, extract it anywhere, run SoundRouter.exe. Nothing is written outside %APPDATA%\SoundRouter.

Both downloads are self-contained. You do not need the .NET runtime installed.

Requirements: Windows 10 version 1803 or later, or Windows 11.

🎮 How to use it

  1. Click + ADD under SOURCES and pick an app. Anything currently making noise is sorted to the top and tagged AUDIO.
  2. Click + ADD under OUTPUTS and pick a device.
  3. Drag from the app's socket across to the device's socket.

That's it. The cable lights up and the audio moves.

Controls

Action What it does
Drag a source socket onto an output Route that app to that device
Right-click a socket Unplug it — the app goes back to the system default
Drag a knob, or scroll over it Adjust volume (hold Shift for fine control)
Hover a node, click the × Unpin it from the panel
☰ menu Start with Windows, and close-to-tray behaviour
RESET ALL Hand every application back to the Windows default output
Close the window Keeps running in the tray — click the tray icon to bring it back
The settings bar, with toggles for starting with Windows and closing to tray

⚠️ Good to know

One device per app. Windows routes an application to a single output. Playing one app through two devices at once needs a virtual audio driver like VoiceMeeter — that is a different kind of tool.

A few apps ignore it. Anything that grabs a device in exclusive mode — some games, most pro-audio software — will stay where it is. Sound Router checks whether the move actually took effect and marks the node NO SIGNAL PATH in red instead of pretending. Restarting the app usually sorts it out.

Device meters read lower than the app feeding them. That is correct, not a bug — the device meter is measured after its volume knob, exactly like a hardware mixer.

Routes outlive the app. They are stored by Windows, not by Sound Router, so they stay put after you close or uninstall it. Hit RESET ALL first if you want a clean slate.

🛠️ Building from source

git clone https://github.com/NonayMete/WindowsSoundRouter.git
cd WindowsSoundRouter
dotnet build SoundRouter.sln
dotnet run --project src/SoundRouter/SoundRouter.csproj

Needs the .NET 8 SDK. Full build, publish and installer instructions are in TECHNICAL_DETAILS.md.

🔬 How it works

Windows exposes per-application routing through an undocumented internal WinRT class, Windows.Media.Internal.AudioPolicyConfig. Sound Router calls it through explicit vtable slots, because the CLR's built-in WinRT support was removed in .NET 5.

Everything else — endpoint enumeration, per-app sessions, volume, metering — is documented WASAPI.

If you want the vtable layout, the PROPVARIANT sizing trap, why routes are applied across a whole process tree, or how the meters are scaled: TECHNICAL_DETAILS.md.

🤝 Contributing

Issues and pull requests welcome. If you are reporting a routing problem, the smoke test output helps enormously:

dotnet run --project tests/SoundRouter.SmokeTest

📄 License

GNU General Public License v3.0

🙏 Acknowledgements

The AudioPolicyConfig interface was mapped by the EarTrumpet project, whose interop declarations were the reference for the vtable layout used here.

Built for Windows 11 with WPF and a lot of COM interop.

About

A vibe coded application for windows allowing independent routing of program audio to different audio output devices.

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages