Files
quadcast-mute-sync/README.md
T
mangavalkandClaude Opus 5.5 3128ccd207 Mute HyperX QuadCast S at logon and sync Windows mute to it
Sets the mic's own hardware mute (USB Audio SET_CUR mute on feature
unit 6, via IDeviceTopology/IAudioMute) when it appears, and follows its
05 10 xx HID mute reports to keep the Windows endpoint mute in step.
Includes build/install/uninstall scripts and a read-only HID listener.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-01 23:10:45 +01:00

3.7 KiB

quadcast-mute-sync

Makes a HyperX QuadCast S start muted on the mic itself (light off) every time you log in to Windows, and keeps the Windows microphone mute in step with the mic's tap-to-mute button.

HyperX NGENUITY has no "start muted" option, and the QuadCast S always powers up live. This small background app fixes both.

What it does

When Mic (hardware) Windows mic mute
You log in / the mic is plugged in muted on
You tap the mic to unmute live off
You tap the mic to mute muted on

The sync is one-way, from the mic to Windows. Changing mute in Windows doesn't change the mic.

Install

Requirements: Windows 10/11, a QuadCast S. No admin rights, no extra runtimes (it builds with the C# compiler that ships with Windows' .NET Framework 4).

powershell -ExecutionPolicy Bypass -File .\install.ps1

This builds bin\QuadCastMuteSync.exe, copies it to %USERPROFILE%\QuadCastMuteSync, registers a per-user logon task named QuadCastMuteSync, and starts it right away. Pass -InstallDir <folder> to install somewhere else.

Uninstall:

powershell -ExecutionPolicy Bypass -File .\uninstall.ps1

Command line

QuadCastMuteSync.exe run       # background mode (what the logon task runs)
QuadCastMuteSync.exe mute      # mute mic + Windows now
QuadCastMuteSync.exe unmute    # unmute mic + Windows now
QuadCastMuteSync.exe status    # show Windows mute and the KS mute nodes

run writes a short log to log.txt next to the exe. It waits for the mic if it isn't connected yet, and mutes it again whenever it is reconnected, since the mic powers up live.

How it works

Found by capturing the NGENUITY software with USBPcap + Wireshark while toggling mute.

The QuadCast S shows up as two USB devices:

Device Role
03F0:0294 USB Audio device (the microphone)
03F0:028C Controller: RGB, plus a vendor HID collection that reports mute

Muting the mic. NGENUITY sends a standard USB Audio Class request to the audio device:

bmRequestType 0x21  bRequest 0x01 (SET_CUR)
wValue 0x0100 (MUTE_CONTROL, channel 0)  wIndex 0x0600 (feature unit 6, interface 0)
data 01 = mute, 00 = unmute

The mic's firmware treats this like a tap, so the light changes too. Windows' usbaudio driver exposes that feature unit as a KS Mute node (.../00020006), so the app sets it through Core Audio IDeviceTopology → IAudioMute. No driver, WinUSB or admin rights needed. The Windows endpoint mute (IAudioEndpointVolume) is a separate software mute, which is why Windows mute and the mic button normally don't follow each other.

Reading the mic's state. Every mute change, from a tap or from software, makes the controller send an 8-byte input report on its vendor collection (usage page 0xFFFF):

05 10 01 ...   mic is live
05 10 00 ...   mic is muted

The app blocks on reads from that collection and sets the Windows endpoint mute to match.

Limitations

  • Only tested on the QuadCast S (03F0:0294 / 03F0:028C). The QuadCast 2 uses a different protocol.
  • The KS node id /00020006 is what Windows assigned on the test machine. If status lists different ids for you, pass the right suffix: QuadCastMuteSync.exe run /000200xx.
  • If the mic shows up under a name without "QuadCast", the audio endpoint won't be found.
  • After sleep/resume the mic usually keeps its state. If it comes back live, it's because the device re-enumerated, and the app mutes it again.

Tools

tools/hidlisten.ps1 is a read-only listener that prints every input report from HyperX (VID 03F0) HID interfaces. It's useful for checking the mute reports on another unit or model.

powershell -ExecutionPolicy Bypass -File .\tools\hidlisten.ps1 -Seconds 30