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>
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
/00020006is what Windows assigned on the test machine. Ifstatuslists 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