SoundDesk

Windows tray utility

A different volume for every app, in one click.

Chrome at 30%, Teams at 70%, Spotify at 20%. Instead of opening the volume mixer every time, one profile puts it all back. Two clicks from the tray menu, or one slider in the panel.

Windows 10 · 11No installer, a single executableOutgoing traffic off by default

The window the tray icon opens. Every value here can also be changed straight from the menu.

What it does

What you used the volume mixer for, in two clicks from the tray.

01

Per-app volume and mute

Groups the sessions making sound right now by application. An app that runs many processes, like Chrome, is still one row.

02

A different output device per app

The game on the speakers, Discord on the headset. The default output can be switched from the menu too, and a profile saves the device along with the volumes.

03

Kept when the app is closed and reopened

Remembers each app's volume and puts it back when that app starts playing again. A device unplugged and plugged back in, or a wake from sleep, applies the profile again too.

04

The microphone in the same hand

The most urgent button in a meeting. CtrlAltK mutes and unmutes the microphone.

05

The panel

Editing profiles, changing shortcuts, writing automation rules - all of it in the window. There is never a reason to hand-edit the settings file.

06

Three things leave, no more

Automatic updates, anonymous usage reports and developer notices are all there is. only automatic updates are on by default, and a fetched file has its signature checked before you are asked whether to install it. The panel listens on 127.0.0.1 only, and it opens only with a token minted fresh on every run.

Profiles

When the situation changes, every app volume should change with it.

Three come built in, and the current state can be saved as a new one at any time. Switching automatically - on an app starting, a device being plugged in, or the time of day - is off by default.

The built-in profiles
ProfilesMasterPer-app settings
Work72%Chrome 30% · Teams 70% · Spotify 20%
Gaming80%Discord 65% · Spotify 15% · browser muted
Meeting60%Teams 80% · Zoom 80% · Chrome 20% · Spotify muted

Shortcuts

When your hands are already on the keyboard.

Every one can be changed, and if another program already holds the combination you are told, instead of it failing quietly.

  • CtrlAlt↑ Master up
  • CtrlAlt↓ Master down
  • CtrlAltM Mute
  • CtrlAltK Mute the microphone
  • CtrlAltS Panel
  • CtrlAlt1–3 Switch profile

Per-app routing

A path Windows never documented - checked before it is used.

measured

"this app on the headset" has no public API. The internal interface the Windows Settings app uses, Windows.Media.Internal.AudioPolicyConfig has to be called instead, and both its interface id and its vtable layout differ from build to build. SoundDesk does not guess at them.

The dangerous first call is made in a separate process, so the tray survives a crash, and after an application has actually been moved it is read back with Get; only when the same device comes back is it promoted to "verified". If the read-back disagrees, the feature switches itself off and opens the Windows settings page.

What the verdict means
StateEvidence
verifiedA process was really moved and read back with a matching endpoint id. If nothing is playing, the self-test makes itself a session with a silent stream and checks against itself
probableNothing could be made to read back - only that activating the factory and calling through the vtable did not crash
unsupportedThe self-test failed, or the call succeeded and Windows did not apply it → you are pointed at the settings page

On Windows 10 22H2, build 19045, verified measured The verdict is stored with the build number and re-checked when Windows updates

Security

Safe to run straight out of the downloads folder.

These are the problems a portable executable actually runs into. Not an abstract checklist: each line has code and a test behind it.

ThreatWhat is done about it
DLL hijacking
A forged DLL planted next to the exe
System DLLs are loaded only by System32 absolute path. At startup the exe's own folder and the working directory are taken out of the search path
Mutex squatting
Another session takes the name first and blocks the launch
The single-instance object lives in the Local\ namespace
Injection through the settings file An endpoint id reaches a COM call only after passing a regular-expression check
Log forgery
A newline in a process name inserting a fake log line
App and device names have control characters stripped and a length limit applied
An unquoted auto-start path The Run value is always an absolute path in quotes, and only HKCU is used
Tampering with the panel
Another program on the same PC, or a web page
127.0.0.1 only, plus a fresh 256-bit token per run and a Host and Origin check. The token becomes an HttpOnly cookie on the first load and leaves the address bar

1270 tests · 82% coverage Including a live test that plants a forged DLL and checks that it is blocked Code signed as PROJECTTEAMFORYOU · check the publisher name before you run it

Privacy

Three things leave this PC, and here is what they are.

Application names and session information are handled on this PC, and the settings are one JSON file. Three features reach the internet - automatic updates, anonymous usage reports and developer notices. The phone remote is off until you turn it on, and then shows application names only to the phones you paired, on the same private network. only automatic updates are on by default: it asks whether a newer build exists, fetches it if so, and then asks whether to install it. It sends the running version and the language, never the install id, and it can be switched off in the panel. The other two stay quiet until you turn them on.

Settings file%APPDATA%\SoundDesk\config.json
Log%APPDATA%\SoundDesk\sounddesk.log
Automatic updatesOn by default — once per launch, only the running version and language. The install id is not sent. A new build is fetched, Windows is asked whether it is signed by PROJECTTEAMFORYOU, and installing it takes a click.
Anonymous usage reportOff by default — when on, once a day: a random install id, the version, the Windows build, the language, and three counts
Developer noticesOff by default — when on, only the running version and language
Never sent, at allApplication names · device names · file paths · the Windows account name
APIs usedIMMDeviceEnumerator · IAudioSessionManager2 · ISimpleAudioVolume · IPolicyConfig · AudioPolicyConfig
Auto-startHKCU\Software\Microsoft\Windows\CurrentVersion\Run (optional)

Self-test

Ask the app itself whether it works on your PC.

Runs each of its own features against the real audio stack, one at a time, and puts back what it touched. Nothing that would make a sound is done at all — the master volume is proved by writing back the value it already has, which exercises the call path and nothing else.

CommandWhat it checks
--selftest-audio Devices · master · microphone · per-app volume, mute and routing · profiles · global shortcuts. If no app is playing, routing is checked against a silent session of its own
--selftest-panel Whether the packaged executable really serves the panel
--report Devices, sessions and profiles as JSON

Result on this PC

OK  Per-app volume (firefox.exe 100% → 42% → restored)
OK  Per-app mute
OK  Per-app output routing (firefox.exe → ASUS VZ279 → restored)
OK  Default device switching · profiles · global shortcuts
—   Microphone (no input device on this PC)

11 passed, 0 failed, 2 skipped — Windows 10 22H2 build 19045

Anywhere

In your language, on your PC.

The same settings at home and at work, read in the language you use, called from a macro when you need it.

01

12 languages

Follows the Windows display language. You can also pick one yourself, and when you do, the panel and the tray menu change on the spot without restarting.

한국어 · English · 日本語 · 简体中文 · 繁體中文 · Español · Português · Français · Deutsch · Русский · Italiano · Tiếng Việt

02

The same settings at home and at work

Export profiles, shortcuts and rules as one file and import it on another PC. Devices are matched by name — the same headset has a different id on each PC, so copying the file alone would make the routing quietly disappear. Any device this PC does not have is named for you.

03

Call it from a macro

Use it straight from a Stream Deck button or a single line of AutoHotkey. It works whether the tray is running or not, and does not raise a second icon. Exit code 0 if something changed, 1 if nothing matched.

SoundDesk.exe --set-app chrome.exe=25
SoundDesk.exe --profile Gaming
SoundDesk.exe --list apps

Install

One file. No installer.

SoundDesk.exe anywhere you like and run it, and an icon appears in the tray. Python is not needed.

Download SoundDesk.exe Get the zip

22.1 MB · code signedexe SHA-256zip SHA-256

If your browser or your IT policy blocks executables, take the zip. The file inside is the same one, and there is a hash for each.

See it again

Your browser may block this as a suspicious download. That means few people have downloaded it yet, not that anything is wrong with the file. In Chrome, open the downloads list, click ⋮ and choose Keep; if Windows blocks it, choose More info → Run. The two checks that actually verify it: that the publisher name is PROJECTTEAMFORYOU, and that the SHA-256 above matches the file you received. The warning goes away as more people download it.

Windows 10 1803 or laterA single executableNo administrator rightsSHA-256 included

Changelog

What changed, and when.

Every time is Korean Standard Time (KST). The full record is in the changelog file in the repository.

  1. v1.7.0 Latest

    • Phone remote. An Android phone on the same Wi-Fi (SoundDesk Remote) controls volume, mute, output devices and profiles. Off by default; once on, only phones you paired with a QR code can connect, and only from inside a private network.
    • The privacy policy and the terms of use are published in twelve languages.
  2. v1.6.0

    • Automatic updates. A new build is fetched when one appears, and you are asked whether to install it. On by default, and it can be switched off in the settings.
    • A fetched file has to pass both the published hash and the signature, and the signature is checked once more at the moment it is installed.
  3. v1.5.0

    • The level of the sound being made right now, drawn under master, the microphone and every app that is playing.
    • A global shortcut that names one app. Mute one program mid-meeting without opening the panel.
    • Automatic lowering — when the chosen app makes a sound the rest are turned down, and put back when it goes quiet.
  4. v1.4.0

    • Available as an executable and as a zip. The bytes inside are the same and each has its own hash.
    • The app knows its own address — open it from the tray menu or from About in the panel.
    • One typeface across the landing page for Korean and Latin alike, and the files went from 870KB to 225KB.
  5. v1.3.0

    • A profile can now say “this app follows the default device”.
    • This page is published in twelve languages.