Skip to content

About

ChatMix for any headset on Windows: game/chat balance, mic noise suppression, compressor and VST plugins, plus SteelSeries Arctis dial support without GG or Sonar

Topics

Resources

Contributing

Security policy

Stars

18 stars

Watchers

0 watching

Forks

Repository files navigation

OpenChatMix icon

OpenChatMix

Lightweight ChatMix for any headset on Windows: balance game and chat, process your microphone, and drive the ChatMix dial of SteelSeries Arctis headsets without SteelSeries GG or Sonar.

Website · English · Українська

OpenChatMix is free and open source. If you'd like to say thanks, you can support it on Ko-fi or through a monobank jar. Entirely optional: bug reports and headset tests help just as much.


ChatMix balances game audio against voice chat with one control: turn it one way and the game gets louder while chat gets quieter, turn it the other way and chat takes over. OpenChatMix brings that to any headset or speakers on Windows, with hotkeys, the mouse wheel or the panel, and adds a microphone chain with noise suppression, a compressor, an equalizer and VST plugins.

On SteelSeries Arctis headsets it goes further. Their hardware ChatMix dial normally only works while SteelSeries GG and Sonar run: several background processes, hundreds of megabytes of RAM and a set of virtual audio devices. OpenChatMix talks to the headset directly over USB HID instead, and also covers its native settings.

The balance is applied as per-app volume in Windows, so the sound keeps going straight to the headset. If you prefer Sonar's way, an optional virtual device mode mixes Game and Chat from two virtual audio cables instead. It is a single native executable that idles at 0% CPU and installs no drivers of its own.

On its own OpenChatMix needs about 4 MB of memory. What you add on top costs its own: the microphone chain and the equalizers a little, VST plugins as much as they need — a plugin with a neural network, such as a voice cleaner, can take hundreds of megabytes.

Mixer panel   Headset settings   Equalizer

Contents

Works with any headset

Any headset, speakers or an unsupported SteelSeries model:

  • The balance is set in the panel, with hotkeys or with the mouse wheel while a key combination is held, and applies to the default output device, whose name the panel shows. A single key works as a hotkey, so a keyboard's volume knob can act as a ChatMix wheel.
  • Game, Chat, Media and Aux groups, ducking, app profiles and the popup work the same way.
  • The microphone chain and, in virtual device mode, the equalizer work with any device.

SteelSeries Arctis: one app instead of SteelSeries GG

SteelSeries headsets from the list below also get the hardware dial and their native settings, so GG and Sonar can stay closed:

  • ChatMix from the dial on the GameDAC, base station or headset.
  • Native headset settings from GG's Engine page: the Engine EQ with its presets and custom curve, microphone volume, sidetone, mic mute LED, gain, volume limiter, display brightness and dimming, lights, auto power-off, wireless and Bluetooth options and battery level, depending on the model. They are stored in the headset itself and stay active while no app runs.
  • Battery beside the app's name on the Mixer tab, in the tray tooltip, as the tray icon at the even balance (in the theme's color, or green to red by its charge) and as a popup when it runs low. Bluetooth headphones show theirs too when Windows gets the level from them. With a second pair connected beside the headset, each gets a line of its own with its connection and battery, and a lit dot marks the one the sound plays on.
  • Only what your model has. The panel shows the settings, the battery and the display options that the connected model supports, and nothing it does not.
  • A Sonar-style mode with two virtual audio devices and a 10-band parametric equalizer, if you want it.

Features

Show all features
  • Hardware dial. The GameDAC / base station dial drives the Game–Chat balance. While OpenChatMix runs, the ChatMix icon is shown on the GameDAC display, so a glance tells you it is active.
  • Volume stays hardware. Only ChatMix reports are used; turning the knob in volume mode keeps working as before, and a popup shows the volume as you turn it. The panel shows which mode the dial is in.
  • Your own volumes stay. ChatMix does not move the app sliders of the Windows volume mixer, so a volume you set for an app yourself keeps working on top of the balance. In virtual device mode the taskbar slider and the volume keys work too, while recordings of the Game and Chat devices (for example in OBS) keep the full level.
  • Game / Chat / Media / Aux groups. Unknown apps follow the Game side, Discord and the Xbox party chat start in Chat (they appear in the group once installed), and Media apps (music, videos) are never touched by ChatMix — like Sonar's Media channel — but have a volume slider of their own. Aux is a second group like it, as Sonar's Aux channel. Both are off until you turn them on in Settings → Audio.
  • A device per group, no virtual cables needed. Settings → Audio → Audio routing lets each group play on its own device, for example Game and Chat on the headset and Media on the speakers. Windows sends the group's apps there (its per-app device, which OpenChatMix clears again when it exits), and ChatMix still balances Game and Chat wherever they play.
  • Manual assignment. Open a group and add any running app, or browse for an .exe, even if it is closed.
  • Native headset settings, shown only for the connected model: the 10-band Engine EQ with the SteelSeries presets (Flat, Bass Boost, Focus, Smiley) and a custom curve (on the Nova Elite and Nova 7 Gen 2 a parametric one: ten filters on a graph, each with its frequency, gain and Q, and on the Nova Elite its type; the Nova 7 Gen 2 gets peaks only, as it whistles with some shelves and passes; on the Nova Elite also the equalizers of the sound over Bluetooth and of the microphone), microphone volume, sidetone, mic mute LED, gain, volume limiter, GameDAC brightness and screen dimming, the line out (speakers, or a stream mix of the main sound, the aux input and the microphone), noise control (off, transparency or ANC), auto power-off, 2.4 GHz mode, Bluetooth options and the battery levels, the base station's spare battery included, depending on the headset.
  • Game presets on the headset itself. Any game preset (built-in or from Sonar) can be put on the headset's own Engine EQ, converted to its ten bands (on the Nova Elite with its own filters, as GG sends them; on the Nova 7 Gen 2 with its shelves and passes as peaks), so it works without virtual devices too.
  • EQ presets as files. Save the current curve, import presets from others, keep backups.
  • Screensaver for the GameDAC display (Nova Pro). While no sound plays, an animation, a clock or your own image or GIF keeps the OLED from burning in. Any sound brings the usual screen back. The Screensaver on/off hotkey keeps it on until you press it again, and Test on the Headset tab shows it for a few seconds. It also runs while SteelSeries GG is open and gives way to GG's own apps for the display (Discord, Now Playing, Spotify, Audio Visualizer) that are switched on: the moment one of them hands GG a message, a track or its animation, even without sound, the screensaver stops drawing over it until GG is done. With the Nova Pro Wireless it can show a Bluetooth icon in a corner while the base station's Bluetooth is on: steady with a device connected, blinking slowly while it waits for one and fast while it pairs.
  • Visualizer for the GameDAC screen (Nova Pro). Bars that follow the sound fill the whole screen while music or a video plays, or for any sound if you like. Music and video are told apart the way Windows knows them: an app that plays tells the media controls of Windows, as players and YouTube in the browser do. Turning the knob shows the usual screen for a moment.
  • 3rd party add-ons for the GameDAC screen (Nova Pro). Programs made for SteelSeries GameSense can show messages and more on the GameDAC while SteelSeries GG is closed. OpenChatMix includes no such programs: you add one you already have by choosing its file, and OpenChatMix starts it and shows what it sends. With a program for Discord, such as the one that comes with GG (gamesense-discord-x64.exe in GG's folder; OpenChatMix knows one by "discord" in its file name), every event gets its own screen, as in GG's Engine: displays with an icon, a heading and the message, the name of who is talking or the channel, or an image, shown once, a number of times or while the event lasts.

The GameDAC screen: Discord add-on screens, the visualizer, Stars and Game of Life

Discord add-on events   One display of a Discord event

  • Virtual device mode (optional). Instead of changing app volumes, mix Game and Chat from two virtual audio cables into the headset, like Sonar does. Chat apps are sent to the Chat cable and all other apps to the Game cable on their own. The cables are switched on and made the Windows defaults only while the mode runs.
  • Microphone chain (optional). Noise suppression, a compressor, a 10-band equalizer and your own VST 2 and VST 3 plugins on the microphone, played into a virtual cable that Discord, OBS or a game use as their microphone — like LightHost, with the effects built in. Microphone and cable levels can be held at 100%. See Microphone.
  • Equalizer for any headset (virtual device mode, optional). A 10-band parametric EQ for Game and for Chat with a response graph like Sonar's, Bass Boost, Voice Clarity, Treble Boost and Smart Volume, built-in presets, your own preset files and the presets of a local SteelSeries GG installation (Sonar's and Engine's). Each channel can also run your own VST 2 and VST 3 plugins, such as a convolver with impulse responses, crossfeed or a loudness plugin, and DeepFilterNet on Chat removes noise from the voices of others. It is off until you turn it on in Settings → Audio.
  • Hotkeys with an on-screen popup (Ctrl + Alt + ← / → / ↓ by default), plus optional hotkeys to mute game, chat, media or aux, to send the sound to the next output device or feed the microphone chain from the next microphone (in the order of the microphone list), and one that turns the GameDAC screensaver on and off. A single key works as well, so a keyboard's volume knob can become a ChatMix wheel. Hotkeys also work without a SteelSeries headset: the balance is then applied to the default output device. With one, the sound that plays on another output meanwhile, such as Bluetooth headphones, gets the balance too.
  • Device priority. Put the connected output devices in your order of preference; optionally the sound moves to the next one when the output disconnects and back when the preferred device reconnects. The Next output device hotkey follows the same order. Disconnected and disabled devices and virtual cables are not listed. Devices you never want to switch to go into Never switch to. Game, Chat, Media and Aux can each get an order of their own as well (see Virtual device mode).
  • Microphone priority. The microphones get a list of their own: when the headset you speak into is switched off or unplugged, the next microphone takes over, and the preferred one comes back with it. The microphone becomes the Windows default (a virtual cable set as the default stays) and, when one is chosen there, the input of the microphone processing. The Next microphone hotkey follows this order.
  • Mouse wheel ChatMix (optional). Hold Ctrl + Win, Alt + Win or Ctrl + Alt + Shift and turn the wheel: up for more chat, down for more game; click the wheel for an even balance. Only that exact combination is taken, so zooming with Ctrl or Ctrl + Alt and the wheel keeps working.
  • Exact balance without a ChatMix headset. With a headset dial the balance keeps to its 12 steps per side, so the app and the GameDAC always agree. Without one, the slider and the arrow keys move it by single percents; the mouse wheel and the hotkeys by 10%.
  • Optional extras, each with its own switch: lower the game while someone talks in chat (ducking), app profiles that set the balance and the Game, Chat, Media, Aux and headset equalizers while an app or a game runs, popups for the ChatMix wheel and for the knob of a GameDAC or base station (the balance, or the volume in volume mode) in the screen corner you choose, a popup when noise control is switched with the headset's button (on the Nova Pro Wireless also on the base station screen), and a low battery popup for wireless headsets (at 15% by default).
  • Material 3 tray panel with an automatic, light or dark theme in soft, pastel colors: the Windows accent (the default), eight presets or any color for Game, and a color of its own for Chat that always stays easy to tell apart from Game. Standard, medium or high contrast, and an Acrylic, Mica or solid background. The whole panel works from the keyboard. Animations run at the monitor's refresh rate, including 144 Hz and 240 Hz screens, and can be reduced. The tray icon shows Game and Chat as two bars that shrink with their level; it can be colored or monochrome, and at the even balance the bars can morph into a square, a ring, an equals sign or, with a wireless headset, its battery lying on its side as in Material 3 Expressive, in the theme's color or from green to red by its charge, and back.
  • Material 3 at the tray icon too: hovering it shows a card with the device, its battery and the balance, and right-clicking opens a Material 3 menu that works with the keyboard as well. Icon buttons in the panel explain themselves in tooltips.
  • How the headset is connected at a glance: the Mixer tab shows it beside the headset's name (USB, 2.4 GHz, Bluetooth, 3.5 mm, HDMI or S/PDIF).
  • Export and import of all settings in one ZIP file, to move them to another PC or keep a copy. An import keeps the previous settings as a backup first.
  • English, Ukrainian and Turkish interface.
  • A short tour on the first start shows what is where; Settings → General → Show the tour opens it again.
  • Starts with Windows, reconnects after sleep, unplugging or SteelSeries GG releasing the headset.
  • Warns once (and in the panel) if SteelSeries GG starts while a SteelSeries headset is connected; the warning can be hidden or turned off, and never appears for other headsets.
  • Updates from GitHub (optional): once a day OpenChatMix asks the project's GitHub releases for a newer version. Install downloads it, checks it against the release's SHA256SUMS.txt and restarts. Turn the check off in Settings → Updates.
  • No telemetry. The update check is the only network access.

Settings   Appearance settings   General settings with the backup of all settings

Hotkey popup   Hotkey popup at the even balance

Supported headsets

The hardware ChatMix dial and the native settings are available on these models; everything else works with any headset.

Headset USB product IDs Status
Arctis Nova Pro Wired (PC, Xbox, v2) 12CB, 12CD, 12FA ✅ Tested
Arctis 7+ / 7P+ / 7X+ / 7+ Destiny 220E, 2212, 2216, 2236 ✅ Tested (Arctis 7+)
Arctis Nova Pro Wireless (PC, Xbox, Xbox white) 12E0, 12E5, 225D ✅ Works, reported by @Katan21 in #5
Arctis Nova 7 / 7 Gen 2 2202, 22A1, 227E ✅ Works, reported by @zer0ed: Nova 7 22A1 (#1), Nova 7 Gen 2 227E (#2); the Gen 2 protocol equalizer works on 22A1 and 227E (#7)
Arctis Nova 7X / Diablo IV / WoW 2206, 2258, 229E, 22AD, 22A4, 22A5, 223A, 22A9, 227A, 22AB Untested — same protocol as Nova 7; 229E, 22A5, 22AD, 22A9 and 22AB use the Gen 2 protocol with the experimental equalizer
Arctis Nova 5 / 5X 2232, 2253, 2264 Untested — Game and Chat may be swapped; the parametric equalizer as HeadsetControl sends it is experimental
Arctis Nova Elite 2244, 2270 ✅ ChatMix dial, battery, settings and output switching work, reported by @liquidshadowfoxx in #6; its own equalizers work, the main one, the Bluetooth one and the microphone's, reported by @Lasfecas in #6
Arctis 7 (2017, 2019) 1260, 12AD Experimental: the battery, whether the headset is on, the six-band equalizer of the dongle's sound chip (only while OpenChatMix runs), microphone volume, sidetone, the mute light, the dongle's light while the headset is off, auto power-off and the dial's position; the dial mixes in the headset, and OpenChatMix gives Game and Chat its two devices, also in virtual device mode without cables. Asked for by @HaYToKoRaZ in #9
Arctis Pro, Arctis Pro + GameDAC 1252, 1280 Experimental: sidetone, lights and the dial's position, as on the Arctis 7
Arctis 9 12C2, 12C4 Experimental: the battery and whether it charges, sidetone, surround sound, the choice of its five equalizer presets (numbered), auto power-off, Bluetooth with the headset and during calls, and the dial's position; Game and Chat on its two devices, as on the Arctis 7
Arctis Pro Wireless 1290 Experimental: the battery, whether the headset is on, sidetone and auto power-off; the base station's knob mixes Game and Chat but cannot be read, so the panel stays in the middle
Arctis 1 Wireless / 1 Xbox / Cyberpunk 2077 / 7X / 7P 12B3, 12B6, 12D0, 12D2, 12D7, 12D5 Experimental: the battery, whether the headset is on, sidetone and auto power-off; on the Arctis 1 Wireless also the microphone volume and the Arctis 7's equalizer; no dial, so the balance comes from the panel and the hotkeys
Arctis Nova 7P / 7P Gen 2 220A, 22A7, 2298 Experimental: as the Nova 7 (on 22A7 and 2298 as the Nova 7 Gen 2), without the sidetone: its dial sets the sidetone in the headset (HeadsetControl #450), so the balance comes from the panel and the hotkeys
Arctis Nova 3 (wired) 12EC Experimental: the six-band equalizer (±6 dB; the bands are numbered, as no description gives their frequencies), microphone volume, sidetone and the mute light; no dial
Arctis Nova 3P / 3X Wireless 2269, 226D Experimental: the battery, whether the headset is on, the parametric equalizer, microphone volume, sidetone, volume limiter and auto power-off; no dial
Arctis Nova 4 / 4X 12F2, 12F6 Experimental, from Linux-Arctis-Manager only: the battery, the dial, the equalizer, microphone volume, sidetone, the mute light, volume limiter and auto power-off
Arctis Nova Pro Omni 2290 Experimental: as the Nova Elite, as SteelSeries describes it
Arctis GameBuds / GameBuds X 230A, 2317 (cases 230C, 231A) Experimental: the battery (the lower of the buds out of the case) and the case's, microphone volume, sidetone, noise control, volume limiter, in-ear detection and the parametric equalizer (peaks only for now); no dial
Arctis 5 (2017, 2019, Dota 2, PUBG) 1250, 12AA, 1251, 12A8 Experimental: the five-band equalizer of its chip (only while OpenChatMix runs) and sidetone; the dial mixes Game and Chat in the headset and is not read; wired, no battery

The Arctis 3 of every year plugs in by a 3.5 mm jack (or Bluetooth) and has nothing to control. The GameBuds' charging case (230C, 231A) is read beside the GameBuds for its battery. The Arctis models from before the Nova follow what HeadsetControl and the Linux kernel's driver document; of them, only the Arctis 9 reports whether it charges. A capture of what SteelSeries GG reads (Wireshark with USBPcap) can add more.

Reports for other models are very welcome — see Troubleshooting for how to collect a log.

Help wanted: data from your headset

Most models above are marked experimental: their support follows public descriptions of the protocol that nobody has checked on that headset yet, so there is no guarantee every function works. If you own one, a log with a line on what worked (Settings → General → Diagnostics → Write a log) already helps a lot. Some things need more: a USB capture of SteelSeries GG or Engine doing them (how to make one).

Headset What a capture would add
Arctis 9 Its own equalizer (no source gives the conversion for its chip), and the names and curves of its five presets, which the app can only number
Arctis 9X Any support at all: it talks to the computer through another SteelSeries channel than plain HID
Arctis Pro + GameDAC (1280) A working connection: the GameDAC has a protocol of its own, described only in part (the units of its equalizer and microphone volume are unknown), so its support here is unverified
Arctis Nova 7 Gen 2 The filter types other than peaks, and the byte order of their frequency
Arctis Pro Wireless The equalizer: what one step of its values is in decibels
Arctis 5 Noise reduction and compression, as Engine set their levels
Arctis 7 Compression, as Engine sets its levels (Off, Low, Medium, High)
Arctis GameBuds The equalizer beyond peaks

Getting started

  1. Download OpenChatMix.exe (or the zip) from the Releases page.
  2. Quit SteelSeries GG completely (tray icon → Exit) and disable it in Task Manager → Startup apps. GG and OpenChatMix cannot control the headset at the same time.
  3. In Settings → System → Sound, choose the headset itself (for example Headphones (Arctis Nova Pro)) as the output device instead of SteelSeries Sonar – Gaming. In Discord and other apps, set the output to Default or to the headset. Prefer Sonar's setup with separate Game and Chat devices? See the virtual device mode guide further down.
  4. Run OpenChatMix.exe. A tray icon with two bars (Game and Chat) appears; click it to open the panel.

The executable is not code-signed, so Windows SmartScreen may ask for confirmation on the first run (More info → Run anyway).

Antivirus warnings. Some antivirus programs distrust new, unsigned executables, especially ones that talk to USB devices, start with Windows and can replace themselves when an update is installed. A warning about OpenChatMix is a false positive. To be sure you have the genuine file, compare Get-FileHash OpenChatMix.exe with SHA256SUMS.txt from the same release, read the source code in this repository, or build it yourself. Please report false positives to your antivirus vendor; for Microsoft Defender use the file submission page.

Quick guide

  • Balance game and chat. On an Arctis with a ChatMix dial, turn it (on the GameDAC, press the knob first to switch it to ChatMix). With any other headset or speakers use Ctrl + Alt + ← / → (↓ centers), the slider on the Mixer tab, or the mouse wheel with a key combination (Settings → Hotkeys → Mouse wheel).
  • Tell it which apps are chat. Mixer → Groups → Chat → Add, then pick Discord, Telegram or any other app. Everything else follows Game. Music and videos that should never change go into Media, anything else you want apart into Aux (turn the groups on in Settings → Audio). The trash icon next to an app takes it out of its group again; in Game it leaves the app out of ChatMix until you add it again.
  • Set each side's volume. The sliders under Game and Chat on the Mixer tab, and under Media and Aux once those groups are on. Windows volumes stay at 100%.
  • Headset settings (Arctis). The Headset tab: equalizer presets and your own curve, microphone, sidetone, gain, display and screensaver. They are stored in the headset itself.
  • Mix like Sonar, with an equalizer (optional). Install two virtual cables and turn on Settings → Audio → Virtual device mode and Equalizer; see Virtual device mode.
  • Clean up your microphone (optional). Install VB-CABLE, turn on Settings → Microphone → Process the microphone and choose CABLE Output as the microphone in Discord; see Microphone.
  • Make it look your way. Settings → Appearance: theme, contrast, Game and Chat colors, the battery's color, background and the tray icon.

Usage

Show the table of actions
Action How
Change the balance GameDAC: press the knob to switch it to ChatMix, then turn it. Other headsets: turn the ChatMix wheel.
Mixer tab: drag the slider, scroll over it, or use ← / →. Double-click centers it.
Hotkeys: Ctrl + Alt + ← more game, Ctrl + Alt + → more chat, Ctrl + Alt + ↓ balanced.
Mouse wheel with the key combination held, once turned on in Settings → Hotkeys → Mouse wheel.
Volume of Game, Chat, Media or Aux Mixer → the slider under Game, Chat, Media or Aux. Its darker fill shows what plays; Windows volumes stay at 100%.
Move an app between groups Mixer → Groups → open a group → Game / Chat / Media / Aux next to the app.
Add an app manually Open a group → Add → pick a running app or Browse .exe.
Remove an app from a group Open the group → the trash icon next to the app. From Chat, Media or Aux it follows Game again; from Game it is left out of ChatMix (its own volume, no group) until Add brings it back. A closed app leaves the list.
Theme, contrast, Game and Chat colors, battery color, background, tray icon Settings → Appearance.
Use the panel from the keyboard Tab / Shift + Tab move between controls, Enter (or Space) presses, the arrows change sliders and values, Esc goes back.
Undo an equalizer change Equalizer or Headset tab: Ctrl + Z; Ctrl + Y or Ctrl + Shift + Z redoes it. Up to 100 steps; in a number field the typing comes first.
Hotkeys, popups and their corner, battery warning Settings → Hotkeys / Notifications.
Write a log for a bug report Settings → General → Diagnostics → Write a log; Open the log folder shows OpenChatMix.log.
Language, startup, the tour Settings → General.
Keep the settings next to the app (portable) Settings → General → Keep settings next to the app.
Let the PC sleep with virtual devices or the processed microphone Settings → General → Let the computer sleep.
Back up the settings or move them to another PC Settings → General → Export saves a ZIP named with the date and time; Import there takes one back and restarts OpenChatMix. The previous settings go to %APPDATA%\OpenChatMix\Backups first (next to OpenChatMix.exe when the settings are kept there), and both buttons open that folder until you pick another one.
Recover the headset Tray menu → Reconnect headset.
Headset settings and EQ Headset tab (shown when a supported headset is connected).
Rename, copy or delete saved headset presets Headset tab → the buttons beside each preset under My presets. Deleted presets go to the Recycle Bin.
Save, import or back up EQ presets Headset tab → Save / Import / Folder. Presets live in %APPDATA%\OpenChatMix\Presets.
Screensaver on the GameDAC Headset tab → Screensaver → pick an animation and the delay; the Screensaver on/off hotkey keeps it on until pressed again.
Line out: speakers or a stream mix Headset tab → Line out (GameDAC); in Streaming set the main sound, aux input and microphone levels.
Virtual device mode, Media and Aux groups, equalizer, ducking Settings → Audio.
Equalizer for Game and Chat Equalizer tab (virtual device mode), once turned on in Settings → Audio.
Microphone processing and VST plugins Settings → Microphone; its equalizer is the Mic channel of the Equalizer tab.
VST plugins on Game, Chat, Media or Aux Equalizer tab (virtual device mode) → the channel → Plugins.
Order of output devices or microphones, switching on disconnect Settings → Devices → Output devices or Microphones; drag a device to its place.
Never switch to a device Settings → Devices → the ⦸ button next to it; ↶ under Never switch to brings it back.
Devices of a channel's own, in an order Settings → Audio → the channel → Plays on → turn off Same as the output; drag the devices, ⦸ keeps the channel off one.
Reorder the microphone effects or plugins Settings → Microphone → drag a step or a plugin by its handle.
Type an exact value Click the value between − and + (EQ frequency, level, Q, preamp, ducking, battery warning), type it (1.5k works for 1500 Hz) and press Enter.
Keep the panel open Pin it with the pin next to the page title; click it again to let the panel hide when it loses focus.
Next output device Settings → Hotkeys → Next output device.
Next microphone for the virtual microphone Settings → Hotkeys → Next microphone (shown while Settings → Microphone processes it).
App profiles (balance and equalizers per app, presets per device) Settings → App profiles → Add.
Visualizer on the GameDAC screen Headset → Visualizer → Show while something plays.
3rd party add-ons for the GameDAC screen Close SteelSeries GG, then Settings → 3rd party add-ons → Add and pick the program, e.g. C:\Program Files\SteelSeries\GG\apps\engine\engineApps\discord\gamesense-discord-x64.exe.

When OpenChatMix exits, every app it lowered plays at its own volume again and the GameDAC dial returns to plain volume control. An app that exits while ChatMix lowers it also starts at its own volume next time.

Headset settings are only sent when you change them in the panel; OpenChatMix never overwrites the headset's settings on its own. On the Nova Pro Wired the current EQ preset and curve, microphone volume, sidetone, gain and ChatMix balance are read from the GameDAC when it connects and after every change; display brightness and screen dimming are not reported by the device, so the panel shows the values last set from OpenChatMix.

When a preset stored on the headset (Flat, Bass Boost, Focus, Smiley) is active, the Headset tab shows its curve; choose Custom to edit the bands. Game presets puts a game preset on the headset as the custom curve. If the current custom curve is not saved yet, it is first kept under My presets.

Virtual device mode

Show the setup and how it works
  1. Install two virtual audio cables. Any virtual audio cables work; this free setup is tested with OpenChatMix:

    Role Cable License
    Game VB-Audio Hi-Fi Cable free for end users
    Chat Virtual Audio Cable Lite free for home use; one cable, 48 kHz / 16-bit
    Alternative for either VB-Audio VB-CABLE free

    Several apps (say Discord and Telegram) can play into VAC Lite at once: Windows mixes them into the single stream the Lite edition allows. VB-CABLE A+B (donationware) works as well. CABLE Input and CABLE In 16ch of the basic VB-CABLE are two inputs of the same cable, so only one of them can be used; it is not picked on its own, choose it in the card. If you process the microphone, keep the basic VB-CABLE for that.

    Then Settings → Audio → Audio routing → enable Virtual device mode. Each channel (Game, Chat and, with their groups on, Media and Aux) has a row; open it to choose its virtual device and where it plays (Same as the output by default, or devices of its own in an order, see below). VB-Audio Hi-Fi Cable, Virtual Audio Cable and VB-CABLE A–D are recognized and assigned on their own, also when they are installed while OpenChatMix runs. The output defaults to the connected headset.

    The SteelSeries Sonar devices that SteelSeries GG installs cannot be used: even with GG closed, Sonar passes their sound to the headset by itself, so everything would be heard twice.

    Virtual device mode settings

  2. With Switch devices with the mode on (the default), the Game and Chat devices are enabled while the mode runs. Game becomes the Windows default output and Chat the default communications device. When the mode is turned off or OpenChatMix exits, the previous defaults come back and both devices are disabled again, so apps fall back to the headset instead of going silent.

  3. With Send apps to their device on (the default), apps in the Chat group play on the Chat device and all other apps on the Game device, as if chosen in Windows' per-app sound settings. Some apps switch only after a restart; apps with their own output setting (Discord, OBS) should use Default. When the mode is turned off or OpenChatMix exits, these apps return to the default device. Turn the option off to choose devices yourself.

A channel's own devices. Turn off Same as the output on a channel's Plays on page, and the channel gets a list like the one in Settings → Devices: it plays on the first device there that is connected and switched on, moves to the next one when that device disconnects or its headset turns off, and comes back when it returns. Click a device to put it first or drag it to another place; ⦸ keeps the channel off a device. Devices the list does not order follow the order of Devices, and with none of its devices left the channel plays on the output. Without virtual devices, each group's device in Audio routing works the same way, with the Windows default in place of the output. Follows #13 by @HaYToKoRaZ.

Media and Aux each need a virtual cable of their own in this mode, for example a third and a fourth VB-Audio or Virtual Audio Cable; which ones is up to you, and neither may be the cable your microphone plays into. Their apps are then sent to them, ChatMix never changes them, their own Windows volume does, and they can play on another output, such as speakers, while Game and Chat stay on the headset. Each gets a channel of its own on the Equalizer tab. Without its device, a group's apps play on the Game side. Apps that play straight to the headset are not affected.

The Arctis 7 (2017, 2019) has Game and Chat devices of its own, mixed by its dial, so here Game and Chat need no virtual cable: by default they play straight on Arctis 7 Game and Arctis 7 Chat, and only Media and Aux take cables. Choose a cable on a channel's page to give that channel the equalizer and plugins; Headset's own device plays it without them. While the sound plays on other headphones, such as a Bluetooth pair, OpenChatMix mixes Game and Chat there itself, and the headset's dial still drives the balance. The dongle stays plugged in while the headset is off, so OpenChatMix asks it every 5 seconds whether the headset is on, and device priority moves the sound to the next device when it is not. Until the dongle of a 2017 model has answered that, two 0% battery replies in a row count as switched off, as the dongle reports 0% then.

The Arctis 7's equalizer (also on the Arctis 1 Wireless; experimental) sits in the sound chip of the dongle, with the six bands SteelSeries Engine showed: 64, 180, 500, 1400, 3900 Hz and 11 kHz, ±12 dB. The chip works nothing out itself: OpenChatMix computes each band's filter and writes it there, as SteelSeries Engine did. The chip keeps nothing, so the equalizer plays only while OpenChatMix runs, which sets it again whenever the headset connects or turns on. It follows SteelSeries' own description and is not yet confirmed on a headset, so try it at a low volume first. Engine's DTS Headphone:X was processing on the computer, and its compression levels are not described anywhere, so neither is here.

OpenChatMix captures what is played on the two devices (WASAPI loopback) and plays it on the output with the ChatMix balance applied, adding about 40 ms of latency. The panel shows what the bridge adds; the device's own delay comes on top (a few milliseconds over USB, far more over Bluetooth).

The Windows volume and mute of the Game device apply to every channel that plays on the same output as Game, so the taskbar slider and the volume keys work as usual while it is the default output. The volume of the Chat device applies to the Chat side only, and those of the Media and Aux devices to Media and Aux. A level above 0 dB, such as the +12 dB of Virtual Audio Cable at 100%, plays at the original level. Apps that record the Game or Chat device themselves, such as OBS, get the sound before ChatMix and the device volume, at full level.

OpenChatMix cannot install a virtual audio device itself: that takes a signed kernel driver, and bundling VB-CABLE with other software needs a distribution agreement with VB-Audio. The open-source virtual audio drivers available today are unsigned and only load in Windows test mode, which requires turning off Secure Boot and is refused by many anti-cheat systems.

Equalizer

Show how the equalizer works

In virtual device mode the Game and Chat audio passes through OpenChatMix, so it can be equalized for any headset, SteelSeries or not. The Equalizer tab has a 10-band parametric EQ for each side, drawn like Sonar's: drag a numbered point to set its frequency and gain, scroll over it to make it wider or narrower (Q), double-click it to reset its gain. The graph stays in view while the band below it is edited. Each band can be a peak, low or high shelf, low or high pass, or notch filter. The preamp lowers the level before boosts, and a soft limiter keeps boosted audio from clipping. The equalizer adds no latency. If you do not need it, turn it off in Settings → Audio; the tab then disappears.

As in Sonar, each side also has one-knob effects that presets leave alone:

  • Bass Boost, Voice Clarity and Treble Boost, up to +12 dB each;
  • Smart Volume (Quiet, Balanced or Loud), which evens out loud and quiet moments: it lowers explosions quickly and raises quiet passages slowly, by up to 9 dB, and leaves silence alone.

Virtual surround is not included; Windows Sonic for Headphones (in the Windows sound settings) works with any headset.

Presets come from three places:

  • built-in presets: Flat, Bass Boost, Footsteps, Treble Boost, V-Shape, Clear Dialog and Night for Game; Flat, Clear Voice, Warm Voice, Less Harsh and Radio for Chat; Flat, Voice Clarity, Broadcast, Bass Cut, Less Nasal and Less Sibilance for the microphone;
  • the game, chat, media and microphone presets of SteelSeries GG, if it is installed: Sonar's, plus Engine's game and microphone presets that Sonar lacks. They are read from GG's local databases and are not shipped with OpenChatMix;
  • your own presets, saved as files in %APPDATA%\OpenChatMix\Presets\Parametric.

The preset menus filter as you type. In an app profile, the Game equalizer menu starts with GG's presets made for that game, under For this game.

An app profile can hold presets of its own for each headset or pair of speakers: choose one under Device, above the profile's equalizers. A device starts with the settings for All devices, and the first change gives it its own (Use the settings for all devices drops them again). Switch to another device while the game runs, and the profile puts on that device's presets, the headset equalizer of a SteelSeries headset included.

Plugins. Below the effects, Game, Chat, Media and Aux each have a Plugins list like the microphone's: any VST 2 (.dll) or VST 3 (.vst3) effect, top to bottom; drag them to reorder and click one to open its window. A convolver with impulse responses, crossfeed, a loudness or a bass plugin you own shapes the sound like a system-wide effects suite, without installing a driver. Plugins run in stereo at the channel's own sample rate, before its volume, so a compressor does not undo the ChatMix balance; when a sound stops they get silence until their latency and reverb tail have played out (at most 3 seconds). The hint above the list shows what they delay the channel by. Nothing is loaded for a channel without plugins; they load with virtual device mode and the equalizer, and their settings are kept in %APPDATA%\OpenChatMix\PluginStates. On Chat, DeepFilterNet-OpenChatMix.dll removes noise from the voices of others: it filters the mix of both sides at 48 kHz and adds about 30 ms. NVIDIA's NVAudioEffects.dll (see Microphone) works there too, at 48 kHz.

Each device keeps its own. The equalizers and plugins of Game, Chat, Media and Aux belong to the headset or speakers they play on (the output of virtual device mode). When another one becomes the output, its own settings come back, or none if it is new, and the plugins of the previous one close. The same headset in another USB port counts as the same one; Bluetooth headphones are known by the record Windows keeps of them, a sound card's jacks by the jack. The hint at the bottom of the tab names the device. Follows #13 by @HaYToKoRaZ.

Microphone

Show the setup and the effects

The microphone chain records your microphone, runs it through the effects and plays the result into a virtual cable. Apps then use the other end of the cable as their microphone.

  1. Install VB-Audio VB-CABLE (free). Its CABLE Input is picked on its own; any other virtual cable can be chosen in the card.
  2. Settings → Microphone → turn on Process the microphone. The Windows default microphone is used unless you choose another one.
  3. In Discord, OBS, the game or Settings → System → Sound, choose CABLE Output as the microphone.

Microphone settings

The effects run at 48 kHz, in blocks of 10 ms. By default the order is the one below; drag the steps under Processing order to change it, for example to run a plugin before the noise suppression:

  • Noise suppression with RNNoise, a small neural network that removes fans, keyboards and room noise while keeping the voice. Strong also closes a gate while RNNoise hears no speech.
  • Equalizer: the same 10-band parametric EQ as for Game and Chat, with presets made for voices (Voice Clarity, Broadcast, Bass Cut, Less Nasal, Less Sibilance) and the microphone presets of a local SteelSeries GG installation.
  • Compressor (Light, Medium, Strong): makes quiet speech louder and loud speech quieter, and keeps the room noise between words down instead of raising it.
  • Plugins: any VST 2 (.dll) or VST 3 (.vst3) effect, top to bottom; drag them to reorder. Click a plugin to open its own window; its settings are kept in %APPDATA%\OpenChatMix\PluginStates. Plugins run on their own thread, as mono; stereo plugins get the microphone on both sides.
  • AI noise suppression (optional): download DeepFilterNet-OpenChatMix.dll and add it under Plugins. It is OpenChatMix's build of DeepFilterNet, a neural network that removes noise more thoroughly than RNNoise, with its DeepFilterNet3 model inside (about 17 MB). Max noise reduction (6–60 dB or unlimited) and Post-filter appear below the plugin list. It adds about 20 ms and takes about 3% of one CPU core; nothing of it is loaded until you add it.
  • NVIDIA noise removal (optional, RTX graphics cards): install NVIDIA's Audio Effects redistributable for your card from NVIDIA's SDK page, then add NVAudioEffects.dll from C:\Program Files\NVIDIA Corporation\NVIDIA Audio Effects SDK under Plugins. It runs NVIDIA's models for noise and room echo (the ones behind NVIDIA Broadcast) on the graphics card; Effect and Strength appear below the plugin list. The model loads in the background within a few seconds, and the sound passes unchanged until then.
  • A limiter at the end keeps the result from clipping.

Each microphone keeps its own noise suppression, equalizer, compressor, order and plugins: another microphone brings back what was set for it, or starts with the defaults.

The chain adds about 30–50 ms of latency, depending on the devices. With Keep levels at 100% on, OpenChatMix sets the microphone and both ends of the cable back to 100% whenever Windows or a call app lowers them; mute stays yours. Windows' own "reduce other sounds during calls" leaves the processed microphone alone, and ducking only ever lowers the Game side of ChatMix.

Listen to the microphone also plays the processed microphone on the current output device, to check the effects and plugins by ear. Only you hear it; other apps still get the microphone through the cable. While it is on, a meter shows the level against 0 dBFS: speech peaking around −12 dB is right, and the peaks should stay below 0 dB.

Device lists show connected, enabled devices only. Turn on a disabled one in Settings → System → Sound → All sound devices. The output and microphone pickers also leave out virtual cables.

Screensaver and visualizer (Arctis Nova Pro)

Show the screensaver and the visualizer

The GameDAC and the Nova Pro Wireless base station have a 128×64 OLED that shows the same screen for hours when nothing plays. The screensaver replaces it after a chosen delay (15 s to 10 min) without sound. Any sound, turning the knob or a change made in OpenChatMix brings the usual screen back at once, so the level meters still show while audio plays. The Screensaver on/off hotkey keeps it on until you press it again, sound or not; turning the knob or a change made in OpenChatMix then shows the usual screen for three seconds.

Visualizer and screensaver settings

  • Stars, Clock (time and date in your Windows regional format, slowly drifting), Game of Life and Screen off.
  • Image or GIF: any GIF, PNG, JPEG or BMP, letterboxed to 128×64 and dithered. Animated GIFs play in real time — bring your own Bad Apple!!. A still image moves by a pixel every half minute. Large files are decoded on the display's own thread at low priority and never block the app; images over 100 megapixels, broken GIF frames and anything that runs out of memory are refused instead of taking OpenChatMix down, and of very long GIFs the first part is played.

Each drawing report takes the GameDAC about 30 ms, so a full-screen animation runs at about 15 frames per second; small moving objects update faster because only the changed area is sent. When OpenChatMix exits or the PC goes to sleep, the display is handed back to the GameDAC.

Visualizer. Headset → Visualizer fills the screen with 32 bars from 20 Hz to 20 kHz, with falling peak marks, while something plays: music and video (an app that tells the media controls of Windows it plays) or any sound. It runs at about 17 to 23 frames a second, as fast as the GameDAC takes them. Turning the knob or a change made in OpenChatMix shows the usual screen for three seconds; a screensaver turned on by the hotkey goes first.

Add-on screens (3rd party add-ons) go over the screensaver, the visualizer or the GameDAC's own screen for as long as they last; then the screen they covered comes back.

How it works

Show the details: HID reports, audio, microphone, GameDAC screen, settings

Headset. OpenChatMix opens the vendor HID interface of the headset and uses these reports:

Headset Direction Report Meaning
Nova Pro (interface 4) PC → device 06 49 01 / 06 49 00 Dial controls ChatMix / volume only
PC → device 06 8D 01 / 06 8D 00 Show / hide the ChatMix icon
PC → device 06 45 gg cc Set the balance (game, chat 0–100)
device → PC 07 45 gg cc Dial turned in ChatMix mode
device → PC 07 25 vv Knob turned in volume mode; vv is the attenuation, 0 the loudest and 56 the quietest (the Nova Elite sends the same)
PC → device 06 20 Query settings: reply 06 20 with gain (byte 4), EQ preset (6), 10 EQ bands (7–16), mic volume (17), sidetone (18) — verified on a Nova Pro Wired
PC → device 06 2E n / 06 33 b1…b10 EQ preset (4 = custom) / custom bands, 0x14 = 0 dB, 0.5 dB steps
PC → device 06 37 06 39 06 27 06 85 06 83 Mic volume, sidetone, gain (1 Low, 2 High), display brightness, screen dimming
PC → device feature 06 93 x y w h … Draw on the 128×64 display: up to 64 columns, height in multiples of 8, pixels column by column
PC → device 06 95 Hand the display back to the GameDAC
Nova Pro Wireless PC → device 06 B0 Status: Bluetooth at power-on (byte 2) and during calls (3), its mode and link (4–5), battery 0–8 (6), spare battery 0–8 (7), transparency level (8), noise control (10: 0 off, 1 transparency, 2 ANC), mute LED (11), auto-off (12), wireless mode (13), headset state (15)
PC → device 06 BD m · 06 B9 n · 06 B2 · 06 B3 Noise control, transparency level 1–10, Bluetooth at power-on, during calls
device → PC 07 B7 hh ss cs · 07 BD m · 07 B9 n Battery event (headset and spare 0–8, state); noise control and transparency changed on the headset
Nova 7 / 7+ / 5X (interface 3) PC → device 00 B0 Status request, polled every 100 ms until dial events arrive, then every 30 s for the battery
device → PC B0 … Status: battery at byte 2 (Nova 5X: 3), 0–100 or 0–4 on older models; game and chat at bytes 4 and 5 (Nova 5X: chat 5, game 6)
device → PC 45 gg cc Dial event (Gen 2 firmware); polling stops once seen
PC → device 00 33 b1…b10 00 Custom EQ bands on the original Nova 7 firmware, 0x14 = 0 dB, 0.5 dB steps
Nova Elite (interface 3, experimental) PC → device 01 8D 01 · 01 49 01 As on the Nova Pro, with report ID 0x01
PC → device 01 B0 Status: Bluetooth at bytes 4–5, battery 0–100 at 6, spare battery at 7, headset link at 14 (08 connected), charging at 15 (02 charging)
device → PC 07 45 gg cc · 07 B7 hh ss cs Dial event; battery event (headset %, spare %, charging state)
PC → device 01 37 01 BF 01 BD 01 B8 01 B9 01 27 01 85 01 83 01 89 01 C1 01 B2 01 B3 Settings (experimental): mic volume, mute LED, noise control (0 off, 1 transparency, 2 ANC), ANC level, transparency level, volume limiter, brightness, dimming, home screen, auto-off, Bluetooth at power-on, during calls; line out and stream mix as on the Nova Pro; 01 09 saves 500 ms later
PC → device feature 01 1B k a… n… f… (1036 bytes) Equalizer (experimental): kind (the index of a built-in preset, 0 Flat to 3 Smiley; 4 custom; 5 a GG game preset), a 6-byte alias, a 61-byte name, then ten filters of frequency (u16 LE), type (1 peak, 2 low pass, 3 high pass, 4 low shelf, 5 high shelf, 6 notch), gain (i8, 0.1 dB) and Q (u16 LE, ×1000); the rest zeros. A band that is off goes as 20001 Hz without gain
PC → device feature 01 1F k a… n… g1…g10 (1036 bytes) Equalizer of the sound over Bluetooth (experimental): kind, alias and name as above, then ten gains of fixed bands (i8, 0.1 dB)
PC → device feature 01 1D k a… n… g1…g10 (1036 bytes) Microphone equalizer: as 01 1F; GG's presets go to slots of their own (Flat 0, Balanced 1, Broadcast High Pitch 2, Broadcast Low Pitch 3, Clarity Low Pitch 4, Clarity High Pitch 5, Deep Voice 6, Less Nasal 7), the custom setting to 8
PC → device 01 38 on level · 01 39 on level Sidetone of the boom and the built-in microphone
PC → device 01 80 Query the display: dimming (byte 2), brightness (3), home screen (5); 01 B0 also holds Bluetooth at power-on (2), during calls (3), transparency (8), noise control (10), mute LED (11), auto-off (12), ANC level (16)
Nova 7 Gen 2 protocol PC → device 00 A7 00 01 name · 00 33 00 f1…f10 · 00 27 Parametric EQ (experimental): the preset name, ten filters of frequency (u16 big-endian; Nova7EqLittleEndian=1 under [ChatMix] in the settings file sends it little-endian, to compare by ear), type (1 peak; the Nova Elite's other types make some bands whistle loudly, so only peaks are sent), gain (signed, 0.1 dB) and Q × 1000 (u16 little-endian), then apply; 00 09 saves
Arctis 7 (interface 5) PC → device 06 24 · 06 18 · 06 14 · 06 33 00 vv · 06 35 01 00 nn · 06 45 m · 06 55 01 02 · 06 51 mm · 06 28 … · 06 09 Experimental, from HeadsetControl, the Linux driver and SteelSeries' description through Linux-Arctis-Manager: the dial's position (the cut of game and chat as signed steps, about −64 silent), the battery in percent (0% while the headset is off), whether the headset is on (03 on, 01 off), microphone volume 0–100, sidetone 0–18 (06 35 alone is off), the mute light (1 steady, 2 breathing), the dongle's light (01 steady while the headset is on, then 02 breathing or 00 dark while it is off), the auto power-off in minutes (0–90), the sound chip's equalizer, save; 31-byte reports, the dial polled every 250 ms, the battery every 5 s. The Arctis Pro and Pro + GameDAC take the same commands, without battery and power-off
Arctis 7 and Arctis 1 Wireless sound chip PC → device 06 28 cc aa vv vv vv vv nn Experimental equalizer of six fixed bands (low shelf 64 Hz Q 1.1; peaks 180, 500, 1400 Hz Q 0.8 and 3900 Hz Q 0.7; high shelf 11 kHz Q 1.1): for each band and channel (cc 3 left, 4 right) the Audio EQ Cookbook biquad at 48 kHz as b0, b1, b2, a0 = 1, −a1, −a2 in float32 big-endian at address band × 16 + 8 + index, then address band × 16 with zero (a band at 0 dB gets only this write, which turns it off); nn counts up from the band's filter number (1, 8, 15, 22, 29, 36; right +42). The chip keeps nothing over a reconnect
Arctis 1, 7X, 7P (interface 3, page FF43) PC → device 06 12 · 06 33 00 vv · 06 35 01 00 nn · 06 53 mm · 06 09 Experimental: status (01 at byte 2 while the headset is off, the battery in percent at 3), microphone volume (Arctis 1 Wireless), sidetone as on the Arctis 7, auto power-off in minutes, save
Arctis 9 (interface 0) PC → device 20 · 06 00 nn · 04 00 ss ss · 90 00 Experimental: status, polled every 250 ms (aa 01 while the headset is on, the battery 64–9a at byte 3, 01 at 4 while it charges, game and chat 0–19 at 9 and 10; 55 or 03 while it is off), sidetone c0 (off) to fd, auto power-off in seconds, save
Arctis Pro Wireless (interface 0) PC → device 41 AA · 40 AA · 39 AA nn · 3C AA nn · 90 AA Experimental: whether the headset is on (02 off, 04 on), the battery 0–4, sidetone 0–9, auto power-off in tens of minutes, save; the replies hold only the value

Audio. The balance is applied with the Windows audio session API on the headset's playback device, so there is no extra audio path and no added latency. IAudioSessionManager2 lists the apps and IChannelAudioVolume lowers them through the per-channel volume of their session, which Windows multiplies with the app's slider in the volume mixer. Windows keeps that volume for the app's next start, so OpenChatMix resets it as soon as the app exits. In virtual device mode loopback capture takes the sound before the Windows volume of the Game and Chat devices, so the bridges read it (IAudioEndpointVolume) and apply it themselves. The screensaver watches the device's peak meter (IAudioMeterInformation). Without virtual devices the group meters also listen to each playing app through a process loopback capture while they show, since a session's own meter counts what the app records too (OBS capturing desktop audio, for example); the capture hears the app's child processes as well, so the lower of the two is the app's own sound. Virtual device mode switches devices and defaults through the IPolicyConfig interface that the Windows sound settings use, and sends apps to the Game or Chat device through IAudioPolicyConfigFactory, the interface behind the per-app device choice in the Windows volume mixer; neither needs administrator rights. The equalizer is a chain of biquad filters computed in double precision. Plugins on Game, Chat, Media and Aux run on the bridge's own MMCSS thread, in blocks of up to 20 ms; the plugin list reaches it without a lock the audio thread could wait on.

Microphone. A WASAPI capture stream of the microphone and a render stream into the cable, both at 48 kHz mono with Windows converting from and to the devices' formats, on an MMCSS "Pro Audio" thread. RNNoise 0.1.1 runs in its native 10 ms frames. VST 3 plugins are hosted on the interfaces of the VST 3 SDK (MIT), VST 2 plugins through their published binary interface; both, with their editor windows, live on a separate thread with a single-threaded COM apartment, as plugin user interfaces expect. The render session opts out of Windows' communications ducking (IAudioSessionControl2::SetDuckingPreference).

GameDAC screen. The screensaver, the visualizer and add-on screens are drawn by a thread of their own through a handle of its own to the GameDAC's HID interface, so drawing never holds up ChatMix commands. The visualizer listens to the headset with WASAPI loopback only while it shows and splits the sound into 32 bands from 20 Hz to 20 kHz with a 4096-point FFT; whether music or video plays comes from the media sessions Windows lists (GlobalSystemMediaTransportControlsSessionManager). To give way to SteelSeries GG's own apps for the display, OpenChatMix watches the I/O of their helper processes while GG runs and the screensaver is on (GetProcessIoCounters): the moment a helper hands GG something to show, the screensaver stops; the regular heartbeat each helper sends is learned and ignored. Add-ons talk to a GameSense receiver on 127.0.0.1 with a free port, whose address goes into %ProgramData%\SteelSeries\SteelSeries Engine 3\coreProps.json while they run and is put back afterwards; requests a web page could send are refused. Add-ons run in a job object, so they end with OpenChatMix.

Settings live in %APPDATA%\OpenChatMix\OpenChatMix.ini. In portable mode (Settings → General → Keep settings next to the app) they live next to the executable instead, with the presets and plugin states; an OpenChatMix.ini placed there by hand does the same.

Building from source

Show how to build it

Requirements: Windows 10 or 11 and Visual Studio 2022 (or the Build Tools) with the Desktop development with C++ workload. The two third-party libraries are part of the repository under third_party/ (see THIRD_PARTY_NOTICES.md).

build.bat                      :: builds build\OpenChatMix.exe
powershell -File package.ps1   :: builds and packages dist\OpenChatMix.exe and the release zip
tools\icongen\build.bat        :: regenerates assets\OpenChatMix.ico from code
tools\preview\build.bat        :: builds build\preview\OpenChatMixPreview.exe (after build.bat)

OpenChatMixPreview.exe shows the real panel with a simulated headset, to look at every page without the hardware: its tray icon's menu picks the model (each family, another headset, speakers or none), the battery, Bluetooth, SteelSeries GG and the update state. It opens no device and changes nothing in Windows; at each start it copies your settings next to itself and keeps its changes there. Started with --screenshots, it keeps the settings already next to it and lists a fixed set of apps, as for the pictures in this README; --headset N starts with the N-th model of its menu.

src/            application (Win32, WASAPI, HID, Direct2D, microphone chain, plugin host)
src/ui/         Material 3 panel, popup and drawing helpers
third_party/    RNNoise and the VST 3 SDK interfaces
assets/         app icon
tools/icongen/  icon generator
tools/preview/  the panel with a simulated headset
tools/drift_sim.cpp  simulation of the audio queue between two device clocks
docs/           screenshots and the design system (docs/design-system.md)

The panel follows a design system based on Material 3 Expressive: spacing, shapes, color roles, type, spring motion and components, described in docs/design-system.md. The tokens are in src/ui/design.h.

Troubleshooting

Collecting a log. Turn on Settings → General → Diagnostics → Write a log and reproduce the problem; Open the log folder shows OpenChatMix.log. (Setting Log=1 in %APPDATA%\OpenChatMix\OpenChatMix.ini while OpenChatMix is closed works too.) The log records every report from the headset. With a SteelSeries headset OpenChatMix does not support yet, the log lists its HID collections and the reports it sends (only read, nothing is sent to it): turn the dial, press its buttons, then attach the log to an issue. If OpenChatMix stops responding while the log is on, it also writes OpenChatMix-hang-<time>.dmp there; please attach that as well.

Show common problems and their fixes
  • The dial does nothing or the volume knob seems dead. Make sure SteelSeries GG / Sonar is not running — the panel shows a warning while it is. Then use Reconnect headset from the tray menu, or unplug and reconnect the headset.
  • An app is not affected. OpenChatMix controls apps that play through the headset (or through the default output when no headset is connected). Check the app's output device.
  • An app plays on the wrong device in virtual device mode. Some apps keep their audio device until they restart. Apps with their own output setting must use Default to follow the Game or Chat device.
  • Native settings on untested models. Settings were taken from the projects below and checked on a Nova Pro Wired; on other models a setting may do nothing or behave differently. Please report it.
  • A hotkey is shown in red. Another app already uses that combination; pick a different one.
  • The screensaver does not start. It waits for the chosen delay without any sound on the headset. Apps that keep a stream open but play silence do not count. SteelSeries GG may draw on the display too while it runs.
  • "Windows did not switch the devices" in virtual device mode. Another app or a policy blocked the change; switch the devices in Settings → System → Sound or turn off Switch devices with the mode.
  • Discord or the game does not hear the processed microphone. Choose CABLE Output (the recording side of the cable in Settings → Microphone) as the input there, not the microphone itself. If Settings → Microphone says there is no cable, install VB-CABLE or choose a cable.
  • Crackling in virtual device mode or on the processed microphone. Turn on the log (below) and play for a few minutes. Lines like bridge: output ran dry … or mic: cable ran dry … mean the output ran out of audio. capture gaps / microphone gaps mean the audio thread woke too late (CPU load, a slow plugin or a driver), and the speed value shows how far apart the devices' clocks are. With no such lines, the crackle comes from elsewhere, e.g. the virtual cable's own buffer (VB-CABLE Control Panel → Max Latency) or a USB hub.
  • The PC does not go to sleep. Windows stays awake while any audio stream is open, and virtual device mode and the microphone processing keep theirs open: powercfg /requests (as administrator) then lists the headset, the microphone and the cables under SYSTEM with An audio stream is currently in use. Turn on Settings → General → Let the computer sleep: the bridges then close their streams a minute after no app plays into the virtual devices, and the microphone processing a minute after no app records the cable (unless you listen to it); the next app that plays or records opens them again, and the very start of its sound may be cut. An app that keeps its own stream open, such as a game or a voice channel, keeps Windows awake as it would without OpenChatMix.
  • The visualizer does not show. With Music and video it shows only while an app tells Windows it plays — its controls then appear in the Windows media flyout next to the volume. Some games and apps do not; choose Any sound for them.
  • An add-on shows nothing. Add-ons run only while SteelSeries GG is closed and a GameDAC with its display is connected; the 3rd party add-ons page says what is missing. Some add-ons read GG's address only when they start: turn Start with OpenChatMix off and on again on the add-on's page.
  • A plugin "could not be loaded". Only 64-bit effect plugins work; instruments and 32-bit plugins do not. For a VST 3 bundle, choose the .vst3 folder's inner file (Contents\x86_64-win\Name.vst3) or the bundle itself.
  • NVIDIA Audio Effects says the model did not load. It needs an NVIDIA RTX card and NVIDIA's Audio Effects redistributable for that card's generation (RTX 20, 30, 40 or 50 series). With the log on, the lines starting with nvafx: name the reason.

Acknowledgements

Apart from RNNoise and the VST 3 SDK interfaces, which are included as marked, and DeepFilterNet in the optional plugin, OpenChatMix contains no code from the projects below, but it would not exist without the protocol details they documented:

  • nova-chatmix-linux by Dymstro — the Nova Pro ChatMix enable (0x49), ChatMix icon (0x8D) and 0x45 report format.
  • HeadsetControl by Sapd and contributors — USB product IDs, status report layouts (ChatMix and battery), equalizer formats and the SteelSeries EQ preset curves for the Arctis Nova 7, 7+ and Nova 5 families and the Nova Pro Wireless, and the commands of the Arctis 1, 7, 9, Pro and Pro Wireless; the Nova Elite captures in HeadsetControl #481.
  • The Linux kernel's hid-steelseries-arctis driver by Christian Mayer, Bastien Nocera and Sriman Achanta — the status replies of the Arctis 1, 7 and 9: whether the headset is on and whether the Arctis 9 charges.
  • Linux-Arctis-Manager by elegos — device definitions and native settings (microphone, sidetone, gain, display, power, wireless, Bluetooth) for the Nova Pro, Nova 7, Nova 5 and Arctis 7+, and the Nova 7 Gen 2 parametric equalizer format.
  • NovaPanel by thibautgnt — the Nova Pro Wireless noise control, transparency and Bluetooth commands and the spare battery in its status (MIT).
  • ggoled by JerwuQu — the Nova Pro OLED drawing protocol (0x93 draw report, 0x95 return to the device's interface), and the Bad Apple demo that inspired the screensaver.
  • The GameSense SDK by SteelSeries — the protocol that 3rd party add-ons speak, as documented there.
  • EarTrumpet by File-New-Project — the layout and interface IDs of IAudioPolicyConfigFactory for per-app playback devices.
  • Robert Bristow-Johnson's Audio EQ Cookbook — the filter formulas of the equalizer.
  • The NVIDIA Maxine Audio Effects SDK — the C API (function and parameter names, MIT) that the optional NVIDIA plugin calls; the SDK itself is NVIDIA's redistributable, installed by the user.
  • RNNoise by Jean-Marc Valin, Xiph.Org and Mozilla — the noise suppression of the microphone chain, included in third_party/rnnoise (BSD 3-clause).
  • DeepFilterNet by Hendrik Schröter — the AI noise suppression and its DeepFilterNet3 model in the optional DeepFilterNet-OpenChatMix.dll (MIT or Apache-2.0), running on tract by Sonos (MIT or Apache-2.0). Built from tools/deepfilter.
  • The VST 3 SDK interfaces by Steinberg Media Technologies, included in third_party/vst3 (MIT). VST is a trademark of Steinberg Media Technologies GmbH.
  • The hid-steelseries Arctis patch series for the Linux kernel — ChatMix parsing for the Nova Pro, Nova 7 Gen 2 events and the Nova 5X byte order.
  • USB captures of the Arctis Nova Pro Wired GameDAC by Swiftlyx (me).
  • Fenderenko — ideas for improving the app.
  • The interface follows Material Design 3; icons come from Segoe Fluent Icons, which ship with Windows.

Disclaimer

OpenChatMix is an independent project and is not affiliated with or endorsed by SteelSeries. SteelSeries, Arctis, GameDAC, Sonar and ChatMix are trademarks of SteelSeries ApS.

OpenChatMix includes no SteelSeries software. A 3rd party add-on is a program you choose and run yourself; OpenChatMix starts the file you picked and understands GameSense, the protocol SteelSeries publishes for programs that talk to its devices.

OpenChatMix is provided as is, without warranty of any kind (see the license). It sends commands to your headset, and those marked experimental follow protocol descriptions without being confirmed on that headset. You use it at your own risk: the author is not liable for any damage to devices, hearing or data. Try experimental features at a low volume first.

License

MIT © 2026 Swiftlyx

About

ChatMix for any headset on Windows: game/chat balance, mic noise suppression, compressor and VST plugins, plus SteelSeries Arctis dial support without GG or Sonar

Topics

Resources

Contributing

Security policy

Stars

18 stars

Watchers

0 watching

Forks

Releases

Sponsor this project

Packages

Contributors

Languages