FazBrowse GitHub Viewer | Trending |
URL:
| Home
Tools: [Download Repo ZIP]   [Original HTTPS Page]

SarKurd/VolumeRelay: Lightweight Windows 11 volume-control utility that routes keyboard media keys and knobs to SteelSeries GameDAC/GameHub hardware. Supports Arctis Nova Pro Wireless, with experimental GameDAC Gen 2, original GameDAC, and Nova Elite support · GitHub

Latest commit

 

History

3 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

VolumeRelay

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.

Features

  • 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.

Supported devices

Audio hardware

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.

Keyboards and controls

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.

Install

  1. Download VolumeRelay.exe from the latest release.
  2. Double-click it.

You can also install from PowerShell:

.\VolumeRelay.exe --install

VolumeRelay 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 --quiet

Upgrade

Download 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.

Uninstall

Use Settings > Apps > Installed apps > VolumeRelay > Uninstall, or run:

& "$env:LOCALAPPDATA\Programs\VolumeRelay\VolumeRelay.exe" --uninstall

The uninstaller stops VolumeRelay and removes its executable, startup entry, Installed Apps registration, and saved state.

Diagnostics

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.

Build from source

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-failure

The 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.

How it stays lightweight

  • 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.

Known limitations

  • 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-volume depends on firmware responses; --monitor is 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.

Adding another hardware target

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.

Releases

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.

About

Lightweight Windows 11 volume-control utility that routes keyboard media keys and knobs to SteelSeries GameDAC/GameHub hardware. Supports Arctis Nova Pro Wireless, with experimental GameDAC Gen 2, original GameDAC, and Nova Elite support

Resources

Stars

2 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages


Back | FazBrowse Home | New Git URL