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.
GitHub does not render repository MP4 files inline inside README pages, so the demo opens as a normal video when clicked.
- 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.
Download the latest build from Releases.
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.
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.
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
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.
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.
- Windows 10 or Windows 11
- x64 system
- 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
Build the application:
./scripts/build.ps1Output:
dist/win-x64/AudioRoleSync.exe
Build both release packages:
./scripts/build-release.ps1Outputs 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.
.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
- v0.0.1 synchronizes playback devices only. Microphone and recording defaults are not modified.
- The default-endpoint write operation relies on the undocumented Windows
IPolicyConfiginterface. - Only x64 builds are currently provided.
AudioRoleSync does not collect or transmit data. It does not make network requests and contains no telemetry.
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.
Licensed under the MIT License.
