Skip to content

About

Tiny native Windows tray utility that keeps the default communications playback device in sync with the current default output.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Latest commit

 

History

5 Commits

Folders and files

Repository files navigation

AudioRoleSync icon

AudioRoleSync

Keep Windows' default communications playback device in sync with the current default output.

Release Windows Architecture License

Download · Watch demo · How it works


AudioRoleSync is a tiny native Windows tray utility that keeps the Default Communications playback device synchronized with the normal Default playback device.

Windows maintains separate default roles for general audio and communications audio. Because of that, apps that use the communications role can remain attached to an old output after the normal Windows output is changed. AudioRoleSync keeps both playback roles aligned automatically.

Demo

GitHub does not render repository MP4 files inline inside README pages, so the demo opens as a normal video when clicked.

Watch demo

Features

  • Automatic synchronization of the default communications playback device with the normal default playback device.
  • System tray only with no settings window or visible background UI.
  • Starts with Windows by default on first launch.
  • Manual Sync now action from the tray context menu.
  • Event-driven Core Audio monitoring with no continuous polling loop.
  • Native Win32 C++ with no .NET, Electron, WebView, NAudio, or PowerShell runtime dependency.
  • No administrator privileges required.
  • No network access, telemetry, background service, or updater.
  • Available as both an installer and a portable build.

Installation

Download the latest build from Releases.

Installer

Use the installer for the standard setup. AudioRoleSync is installed per-user under %LOCALAPPDATA%\Programs\AudioRoleSync, launches immediately after installation, and is configured to start when the user signs in to Windows.

Portable

Extract the portable ZIP and run AudioRoleSync.exe. No installation is required.

On first launch, Start with Windows is enabled by default. It can be disabled from the tray menu at any time.

Note

Release binaries are currently unsigned. Windows SmartScreen may display a warning until signed builds are available.

Usage

AudioRoleSync has no main window. Right-click its system tray icon to access:

Action Description
Automatic sync Enable or disable automatic synchronization.
Sync now Immediately synchronize the playback roles.
Start with Windows Enable or disable startup at Windows sign-in.
Exit Close AudioRoleSync.

With automatic sync enabled, the flow is simply:

Windows default playback changes
              ↓
     AudioRoleSync detects it
              ↓
Default Communications playback
   is updated to the same device

How it works

AudioRoleSync listens for Windows Core Audio default-device changes through IMMNotificationClient::OnDefaultDeviceChanged.

When the default render endpoint for the normal playback role changes, the application compares it with the communications render endpoint. If they differ, it updates the communications role to use the same endpoint.

Windows does not provide a documented public API for changing the default endpoint role. AudioRoleSync therefore uses the commonly used undocumented IPolicyConfig::SetDefaultEndpoint interface for this single operation. This is isolated to a small part of the codebase, but compatibility with future Windows versions cannot be guaranteed.

Runtime footprint

AudioRoleSync is intentionally small and event-driven. At runtime it keeps only the components required for Core Audio notifications, the hidden message window used by the tray icon, and the tray icon itself.

No timer runs continuously. A short debounce timer is created only after Windows reports a relevant audio endpoint change.

Actual memory usage varies by Windows version and loaded system components.

Requirements

Running

  • Windows 10 or Windows 11
  • x64 system

Building

  • Visual Studio 2022 or newer with the Desktop development with C++ workload
  • CMake 3.24 or newer
  • Inno Setup 6 only when building the installer

Building from source

Build the application:

./scripts/build.ps1

Output:

dist/win-x64/AudioRoleSync.exe

Build both release packages:

./scripts/build-release.ps1

Outputs for v0.0.1:

dist/AudioRoleSync-v0.0.1-win-x64-portable.zip
dist/AudioRoleSync-v0.0.1-win-x64-setup.exe

The Release configuration statically links the MSVC runtime and enables link-time optimization, dead-code elimination, and identical COMDAT folding.

Project structure

.github/workflows/   GitHub Actions build and release workflows
docs/                Demo video and documentation assets
installer/           Inno Setup definition
resources/           Application icon and Windows resources
scripts/             Local build and packaging scripts
src/                 Native application source

Limitations

  • v0.0.1 synchronizes playback devices only. Microphone and recording defaults are not modified.
  • The default-endpoint write operation relies on the undocumented Windows IPolicyConfig interface.
  • Only x64 builds are currently provided.

Privacy

AudioRoleSync does not collect or transmit data. It does not make network requests and contains no telemetry.

Contributing

Issues and pull requests are welcome. For behavioral changes, please keep the project focused on a small native tray utility and avoid introducing runtime frameworks or unnecessary background work.

License

Licensed under the MIT License.

About

Tiny native Windows tray utility that keeps the default communications playback device in sync with the current default output.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages