Audio Splitter
Every speaker you own, playing at once, in sync.
The problem
Windows sends system audio to one output at a time, so the laptop, aux pair, HDMI monitor and Bluetooth speaker could not all play together. Simply duplicating the stream was not enough: Bluetooth's encode/transmit/decode delay made it echo behind wired outputs.
What it does
Windows only ever sends system audio to one output device at a time. This routes everything through a silent virtual sink, captures it once, and fans it out live to as many real outputs as you list — laptop speakers, wired aux, HDMI monitor and a Bluetooth speaker, all together.
The hard part is latency: each output has its own natural delay, so Bluetooth echoes behind the wired pair. Each stream is delayed just enough to cancel the difference out. No virtual audio driver to install, no reboot, no paid software.
Why it is built this way
I capture once from a silent virtual sink and fan the same audio into a bounded queue per WASAPI output, holding each device back by the difference between its latency and the slowest device. That avoids paid software, a custom driver and a reboot; music mode accepts the slowest speaker's delay for sync, while video mode excludes high-latency outputs because this app cannot delay the picture to repair lip-sync.
What was hard
The first output resolver selected MME endpoints, which left HDMI and laptop speakers silent; moving to WASAPI required per-device resampling with phase carried across chunks to stop clicks. The pipeline itself later measured about 810 ms late because 2.7 ms chunks and an 800-chunk transport queue could not drain; increasing chunks and shrinking the queue brought endpoint measurements down to 33-89 ms.
Outcomes
- No driver install
- Latency-matched outputs
- Open source