Skip to content

Latest commit

 

History

1 Commit

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Fast Audio Switch

A tiny Windows tray utility for switching the default audio output. You pick which outputs appear, name them yourself, and switch with a single click — no Steam Streaming Speakers or Oculus Virtual Audio Device cluttering the menu unless you asked for them.

One signed executable, about 100 KB, no runtime to install, no registry persistence, no installer.

Русская версия

The tray menu with two chosen outputs    The popup shown after switching

Why

Windows lists every virtual endpoint any app has ever installed. A normal machine ends up with Steam Streaming Speakers, Steam Streaming Microphone, an Oculus virtual device and several HDMI outputs, none of which can be removed, and the two you actually use are buried among them.

This app shows only the outputs you ticked, under names you chose.

Features

  • Left or middle click the tray icon moves to the next output. With two outputs that is simply a toggle.
  • The tray icon tells you what is playing — a coloured badge with your own one or two letters, drawn at run time.
  • A popup confirms the switch, right above the tray. Not a balloon tip: those queue up in the Windows 11 notification centre and arrive too late to be useful.
  • Optional global hotkey, and a --toggle command line for external key binders and stream decks.
  • Pin the icon next to the clock instead of hiding it behind the chevron.
  • Start menu and autostart shortcuts are two checkboxes.
  • English and Russian, switchable in settings, detected from Windows on first run.
  • Portable. It runs from wherever you put it and keeps a plain text FastAudioSwitch.ini next to itself.

The settings window

Install

Download FastAudioSwitch.exe from the latest release, put it in a folder you like, and run it. That is the whole installation. Tick Add to the Start menu and Start with Windows in settings if you want them.

Windows 10 and 11 only. Nothing else is required: the app targets .NET Framework 4.8, which is already part of the operating system.

SmartScreen will warn about an unknown publisher. The binary is signed, but with a certificate that only this project trusts — see Antivirus and code signing.

Build

Needs Windows and either a .NET SDK (its Roslyn compiler is used) or the in-box csc.exe.

.\build\new-signing-cert.ps1   # once: a certificate to sign local builds
.\build\build.ps1              # -> build\out\FastAudioSwitch.exe
.\build\build.ps1 -Run
.\build\build.ps1 -NoSign
.\build\deploy.ps1             # copy to a permanent folder, create shortcuts
.\build\deploy.ps1 -Remove

deploy.ps1 defaults to %LOCALAPPDATA%\Programs\FastAudioSwitch; pass -Destination for anywhere else. Dragging the .exe there in Explorer does the same thing.

Usage

Left or middle click the tray icon Switch to the next output in your list
Right click Menu with your outputs, settings and exit
Global hotkey The same switch, from any application (off by default)
--toggle Switch and exit — for external key binders
--settings Open the settings window
--register / --unregister Create or remove the Start menu and autostart shortcuts

HDMI and TV outputs

Windows only lists an HDMI endpoint while that screen is on and connected. If your TV is missing from the list, switch it on and press Refresh. Once ticked, the output stays in your settings and in the menu even when the screen is off: it greys out, and switching skips over it.

Pinning the icon next to the clock

The icon pinned next to the clock

Windows 11 stores per icon taskbar visibility in HKCU\Control Panel\NotifyIconSettings\<hash of the exe path> as IsPromoted. The Always show the icon next to the clock checkbox writes exactly that, and Explorer picks it up immediately — no restart. Dragging the icon out of the overflow flyout does the same.

Because the key is tied to the executable path, the setting is lost if you move the .exe; just tick the box again. On Windows 10 the same state lives in an undocumented binary blob, so the checkbox is hidden there.

Where things live

Program wherever you put it
Settings FastAudioSwitch.ini next to the .exe, or %APPDATA%\FastAudioSwitch if that folder is read only
Start menu shortcut %APPDATA%\Microsoft\Windows\Start Menu\Programs
Autostart a shortcut in the Startup folder
Registry only HKCU\Control Panel\NotifyIconSettings, the Explorer setting above

To uninstall, delete the folder. The shortcuts come off with the checkboxes or with --unregister.

Antivirus and code signing

Early builds were quarantined twice by Windows Defender as Trojan:Win32/Bearfoos.A!ml — a machine learning false positive. The trigger turned out not to be the file: a signed build ran untouched for minutes, and the detection fired the instant an "Install to system" button was pressed.

A process that copies its own executable into the user profile and registers it for startup is the behavioural definition of a dropper. A self-signed certificate cannot argue with that, because the cloud does not trust it.

So the app does not do it:

  • the .exe never copies itself — deployment is a copy made by deploy.ps1 or by you in Explorer;
  • autostart is a shortcut in the Startup folder, not an HKCU\...\Run value;
  • nothing is written to the registry except the Explorer icon setting;
  • version and publisher metadata are embedded, and every build is signed.

new-signing-cert.ps1 creates a self-signed certificate in the current user's stores and build.ps1 signs each build with it. That removes the "unknown publisher" wording locally and lowers the heuristic score, but it buys no cloud reputation — only a real CA certificate, or a false positive report to Microsoft, does that. Remove the certificate with .\build\new-signing-cert.ps1 -Remove.

Settings file

Plain text, safe to edit by hand:

lang=en
communications=1          # also switch the communications device
toast=1                   # popup when switching
hotkey=1
hotkeyModifiers=3         # 1=Alt, 2=Ctrl, 4=Shift, 8=Win, added together
hotkeyKey=83              # virtual key code, 83 = S
autostart=1               # a record of the Startup shortcut
startmenu=1               # a record of the Start menu shortcut
# device=<endpoint id>|<colour>|<badge>|<name>
device={0.0.0.00000000}.{8ef7dd92-...}|#3B82F6|SP|Speakers
device={0.0.0.00000000}.{65d4c3b2-...}|#F59E0B|TV|Television

Shortcuts and icon pinning are recorded here but the real state is the files and the registry value; the settings window always shows what is actually there.

How it works

File
src/Interop.cs Core Audio interfaces and IPolicyConfig
src/AudioDevices.cs Enumerating endpoints and setting the default
src/Switcher.cs "Next connected output in the list", shared by tray, hotkey and --toggle
src/TrayApp.cs Icon, menu, hotkey, device arrival and removal
src/SettingsForm.cs The settings window
src/IconFactory.cs Icons drawn at run time, no image resources in the .exe
src/SystemIntegration.cs Shortcuts and taskbar icon visibility

Windows has no public API for changing the default audio endpoint. The app uses IPolicyConfig, undocumented but stable since Windows 7, with a fallback to IPolicyConfigVista.

The default is changed for the Console and Multimedia roles; Communications only when the corresponding box is ticked, so a headset can stay the call device while music moves elsewhere.

Licence

MIT — see LICENSE.

About

Tiny Windows tray utility for switching the default audio output. Pick only the outputs you use, name them yourself, switch with one click.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages