I built myself a tiny app because my Sound Blaster X3 volume knob wasn't talking to Windows

Giving the Sound Blaster X3 volume knob an on-screen display

I’ve got a Sound Blaster X3 with a physical volume knob on it, and for ages, turning it did nothing I could see. The audio volume would change, sure, but Windows’ on-screen volume display never showed up. Same problem with Creative’s mixer software.

Kinda annoying when you want to confirm what just happened. So with the help of my friend Claude, I built a little app to show it.

It’s called X3 Vol OSD, previously Vol OSD, and it sits in the system tray until the X3’s volume changes. Then a small overlay appears with the volume level, styled to look like the Windows volume display.

Version 2.0 brings it back to that fairly simple job. Getting there involved removing a feature I’d spent quite a bit of time trying to make work.

What it actually does

The X3’s knob changes the sound card’s volume directly, but that doesn’t bring up Windows’ usual volume display. X3 Vol OSD listens for those changes through Windows’ Core Audio API and draws its own overlay.

The earlier version showed the overlay for changes across all active playback devices. This version filters those notifications to the device selected under Knob device, including the X3’s linked Speakers and SPDIF Out outputs. Changing the volume on an unrelated output won’t bring it up.

On first run, it tries to find the X3 automatically, preferring SPDIF Out (Sound Blaster X3). You can change the selection in Settings if needed.

There’s one detail worth explaining: the app watches the device’s volume, rather than detecting your hand turning the knob. If Creative’s mixer or another app changes that same device’s volume, the overlay can appear then too.

The number it shows is the X3’s volume. If you’re listening through a different device, it won’t necessarily tell you how loud that output is.

Where I got a bit carried away

The original version also had a feature that let the knob control Windows’ default playback device. The idea was that if you were listening through something else, turning the X3’s knob could still adjust what you were hearing.

That turned out to be more complicated than I’d expected.

Audio software can link volume controls together. FxSound, for example, can mirror volume changes between its virtual device and the hardware it’s using. The X3 also has linked outputs of its own, so a change on Speakers can show up on SPDIF Out too.

In an early attempt, the app moved the knob’s device back towards the middle of its range so it could keep detecting movement at either end. What looked like a harmless adjustment made its way through FxSound to the real output. Audibly.

I removed that behaviour and added safeguards around the relay, but version 2.0 goes further: the relay is gone altogether.

The app now reads volume changes and displays them. It never writes system volume. The knob still does whatever the X3 and its driver normally do, and the app shows the result.

I have to say, that’s a much more sensible place for a tiny volume display app to end up. I wanted to see what happened when I turned a knob. I’d managed to give myself a considerably bigger problem along the way.

Making it look how you want

Clicking the tray icon opens Settings, where you can change the overlay’s position, size and how long it stays visible. There are light and dark themes, or you can have it follow Windows.

You can also set the background, text and volume bar colours separately for each theme, and have the bar follow your Windows accent colour. There’s a Preview button so you can check the result without repeatedly reaching for the knob.

If you want it running whenever you sign in, there’s a Start with Windows option too.

Trying it out

The source and build instructions are on GitHub. The project can produce a per-user installer or a single portable executable. Both standard builds need the .NET 8 Desktop Runtime for x64 Windows.

If you’re moving from Vol OSD 1.x, exit the old app first. On its first run, X3 Vol OSD copies your previous settings across if its new settings folder doesn’t already exist. The old knob relay option has been removed, so it won’t carry on controlling another output.

It’s a small thing, but it’s the small thing I needed. Turn the knob, see the volume, get on with whatever I was doing.