Skip to content

Repository files navigation

Audius

A clean C# / WPF app for live Windows system audio on two or more devices.

Audius listens to everything playing through a selected Windows output (games, browsers, music players, notifications, etc.) and mirrors that live mix to as many additional outputs as you select. The original device continues playing normally. There is no audio-file player, microphone capture, recording, or upload.

Use the app

Open publish\Audius.exe, or double-click Start Audius.cmd in this folder.

  1. Leave System audio on your Windows default output, or choose the device your apps are using.
  2. Check one or more Additional outputs. Your source plus one additional output means two devices; select more to use three or more.
  3. Click Start mirroring. Play audio normally in any app.
  4. Adjust each additional output's volume independently. Set its slider to 0 to mute the mirrored copy.
  5. Click Stop mirroring before changing the source or destinations. Closing Audius also stops mirroring.

The input meter shows real captured audio. Silence is normal: the connection stays open, and audio resumes automatically. Connected devices are refreshed automatically; you can also use Refresh. If an active device disconnects, mirroring stops with an explanatory message.

What to expect

  • Source device matters: loopback captures the mix on the selected output. Apps explicitly routed to another output are not part of that mix. Keep the apps you want mirrored on the selected source. If you change the Windows default while mirroring, stop and select the new source if your apps moved there.
  • Some delay is unavoidable: live capture and playback introduce latency, and Bluetooth adds its own delay. This app does not promise sample-perfect alignment between independent devices. Use wired devices for lower latency. Keep the source active; muting or changing its hardware volume can affect loopback behavior on some hardware.
  • Shared Windows audio: audio using exclusive mode or protected media may not be capturable. No administrator rights or virtual audio driver is required.
  • No feedback loop: the source is excluded from additional outputs because it already plays the original mix. Avoid configuring another audio utility to send a destination's audio back into the source.
  • Live, bounded buffers: each destination has an independent frame-aligned queue. If a slower device falls behind, stale frames are discarded to keep it near live audio instead of accumulating delay. Such corrections can cause a small audible discontinuity.
  • Local only: Audius does not save captured audio, access the microphone, upload data, change the Windows default device, or change global device volume. Selections and volume values are remembered within the current session.

Build from source

Requires Windows 10/11 and the .NET 8 SDK. The published x64 app includes its own runtime.

dotnet run --project DualAudioPlayer.csproj
dotnet publish DualAudioPlayer.csproj -c Release -r win-x64 --self-contained true -p:PublishSingleFile=true -p:IncludeNativeLibrariesForSelfExtract=true -o publish

For this workspace, build.ps1 also detects the local SDK in .tools\dotnet:

.\build.ps1
.\build.ps1 -Publish

Verification

dotnet run --project tests/Audius.Tests.csproj -c Release
dotnet run --project tests/Audius.Tests.csproj -c Release -- --hardware

The hardware option opens actual output devices with mirror gain set to zero and feeds generated silence through the Windows mixer. It verifies loopback packet delivery, multiple simultaneous outputs, silence/resume, bounded queues, and release/restart. It does not record audio or confirm perceived sound quality or synchronization. Unit checks also cover sample fan-out, volume, frame alignment, and feedback rejection.

Project structure

  • MainWindow.xaml, App.xaml: WPF layout, styles, and accessible controls.
  • MainWindow.xaml.cs: device selection, live status, hotplug handling, and lifecycle.
  • LiveAudioRouter.cs: WASAPI loopback capture and multi-device playback.
  • LiveAudioBuffer.cs: bounded live queues with silence handling.
  • tests/: executable audio checks without a test-framework dependency.

Audio is powered by NAudio 2.2.1, used under the MIT license. See THIRD-PARTY-NOTICES.txt.

About

A Windows desktop app for mirroring live system audio to multiple output devices, built with C# and WPF.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages