Makes your keyboard's volume controls adjust your SteelSeries GameDAC or GameHub when the headset is in use—and Windows volume when it isn't.
Download · Build from source · Diagnostics
VolumeRelay is a tiny background utility for Windows 11. When a recognized SteelSeries GameDAC or GameHub is connected and its physical audio endpoint is the default output, your keyboard's Volume Up, Volume Down, and Mute controls adjust the hardware directly. In every other case, the keys keep their normal Windows behavior.
GameDAC connected + default output -> GameDAC hardware volume
GameDAC connected + another output -> Windows volume
GameDAC disconnected -> Windows volume
There is no window, tray icon, service, or bundled runtime. VolumeRelay uses native Windows APIs, starts with your user account, and stays idle until Windows or the hardware reports a change. SteelSeries GG is not required.
- Routes standard keyboard volume controls to the GameDAC only when appropriate.
- Keeps the physical GameDAC knob working and tracks changes made with it.
- Falls back to normal Windows volume immediately if the device disconnects, stops being the default output, or rejects a command.
- Installs and updates from one executable without administrator rights or a reboot.
- Appears in Settings > Apps > Installed apps and includes a self-uninstaller.
- Uses native C++ and Win32 APIs with no external runtime dependencies.
| Device | Product IDs | Status |
|---|---|---|
| SteelSeries Arctis Nova Pro Wireless GameDAC | 0x12e0, 0x12e5, 0x225d |
Verified on real hardware (0x12e0) |
| SteelSeries GameDAC Gen 2 | 0x12cb, 0x12cd (Xbox) |
Experimental; not hardware verified |
| SteelSeries Arctis Pro + original GameDAC | 0x1280 |
Experimental; not hardware verified |
| SteelSeries Arctis Nova Elite GameHub (Input 1) | 0x2244 |
Experimental; not hardware verified |
All entries use SteelSeries USB vendor ID 0x1038. The matching physical render endpoint must be the Windows default output. SteelSeries Sonar virtual endpoints are intentionally excluded.
The experimental entries are best-effort implementations based on public protocol data, not claims of confirmed compatibility. Their device IDs, interfaces, and report layouts have automated coverage, but they still need tests on the actual hardware. VolumeRelay labels them as unverified in --devices and --diagnostics output.
VolumeRelay works with keyboards, media keypads, and knobs that send the standard Windows Volume Up, Volume Down, and Mute keys. The AULA F75 Pro knob has been tested directly.
Other media controls are left untouched. Support for more hardware families can be added without changing the Windows audio, keyboard, or installer code.
- Download
VolumeRelay.exefrom the latest release. - Double-click it.
You can also install from PowerShell:
.\VolumeRelay.exe --installVolumeRelay copies itself to:
%LOCALAPPDATA%\Programs\VolumeRelay\VolumeRelay.exe
It then registers per-user startup, launches the background process, and adds itself to Installed apps. No administrator rights are required.
An installation-success message confirms that VolumeRelay is running. For scripts or unattended setup, suppress dialogs with:
.\VolumeRelay.exe --install --quietDownload and run a newer VolumeRelay.exe. It stops the installed version, replaces the executable, preserves the last tracked hardware volume, and restarts automatically. A message confirms the installed version after the update.
Use Settings > Apps > Installed apps > VolumeRelay > Uninstall, or run:
& "$env:LOCALAPPDATA\Programs\VolumeRelay\VolumeRelay.exe" --uninstallThe uninstaller stops VolumeRelay and removes its executable, startup entry, Installed Apps registration, and saved state.
Run these commands from PowerShell or a terminal:
| Command | Purpose |
|---|---|
.\VolumeRelay.exe --devices |
List interfaces for supported hardware targets. |
.\VolumeRelay.exe --monitor |
Watch hardware reports while turning the GameDAC knob. |
.\VolumeRelay.exe --status |
Request the GameDAC status report. |
.\VolumeRelay.exe --get-volume |
Read the current volume when the firmware supplies it. |
.\VolumeRelay.exe --set-volume 50 |
Set GameDAC hardware volume to 50%. |
.\VolumeRelay.exe --diagnostics |
Show device, routing, installation, and startup state. |
Press Ctrl+C to stop --monitor. For protocol details, evidence, and verification status, see docs/steelseries-protocol.md.
You do not need the full Visual Studio IDE. Install only:
- CMake 3.24 or newer.
- Visual Studio Build Tools with the Desktop development with C++ workload and a Windows SDK.
From PowerShell in the repository root:
cmake -S . -B build -A x64 -DBUILD_TESTING=ON
cmake --build build --config Release --parallel
ctest --test-dir build -C Release --output-on-failureThe finished application is:
build\Release\VolumeRelay.exe
Run it with --run to test the background process without installing it, or double-click it to test the normal installation flow.
- One hidden Win32 message loop.
- One blocking, event-driven input thread per connected hardware target.
- Core Audio notifications instead of output-device polling.
- Global volume keys registered only while hardware routing is active.
- One named mutex and exit event for single-instance control and upgrades.
- Per-user files and registry entries only.
- The GameDAC does not reliably return its current station volume on request. VolumeRelay saves the last confirmed hardware value and restores it after startup or reconnect.
- Hardware mute uses volume zero and restores the previous audible level because no separate GameDAC station-mute command is known.
- Volume changes made while VolumeRelay is not running may be replaced by its last saved value at the next connection.
--get-volumedepends on firmware responses;--monitoris the reliable way to observe physical-knob changes.- GameDAC Gen 2, original GameDAC, and Nova Elite GameHub support is experimental and has not been verified on real hardware by this project.
- Nova Elite PID
0x2246(Inputs 2 and 3) is not enabled because the available protocol source does not establish hardware control for it.
Hardware support lives behind the small devices::Driver interface in src/device.h. Closely related SteelSeries devices are data-driven profiles in src/devices/steelseries_protocol.cpp; a different hardware family gets its own adapter under src/devices and one entry in the compile-time registry in src/device_manager.cpp.
Each adapter owns device discovery, output-name matching, volume commands, and optional diagnostics. The shared app code handles media keys, default-output changes, per-device saved volume, installation, and fallback to Windows. Add protocol and output-matching tests alongside the adapter before enabling it in the registry.
Pushing a version tag such as v0.1.0 builds and tests the project, creates a SHA-256 checksum and provenance attestation, and attaches the unsigned executable and checksum to the matching GitHub Release. No repository secrets or external services are required. See docs/releasing.md for release commands.
