TomLabs Apps
← All applications

ShowAudioDevice

Tray indicator and one-click switcher for the default playback device

windows tray audio Personal Repository

ShowAudioDevice

A tiny Windows tray utility that shows which playback device is the default — headphones, speakers or a monitor over HDMI/DisplayPort — and lets you switch with one click.

  • Tray icon = current default playback device; hover for the device name.
  • Left click toggles between headphones and speakers (the first device of the other kind).
  • Right click lists every active playback device; the bold one is the default.
  • Reacts instantly to device changes (Core Audio notifications), no polling.
  • Follows the taskbar theme, starts with Windows on request, updates itself.

Command line

The same exe doubles as a headless switcher for hotkeys, AutoHotkey or a Stream Deck (it never interferes with the running tray instance):

ShowAudioDevice --list
ShowAudioDevice --set "USB PnP"
ShowAudioDevice --toggle

--set takes the exact name or a case-insensitive substring; --toggle switches between headphones and speakers like a left click. Exit codes: 0 ok, 1 switching failed, 2 no such device.

Settings

%APPDATA%\ShowAudioDevice\settings.json (created on first start, Edit settings… in the menu):

{
  "headphonePatterns": ["GS3", "headphone", "headset", "earbuds", "buds", "airpods"],
  "monitorPatterns": ["NVIDIA High Definition Audio", "AMD High Definition Audio", "Display Audio", "HDMI", "DisplayPort", "monitor"],
  "notifyOnChange": false,
  "logLevel": "Information",
  "updateChannel": null
}

A device whose name contains any of headphonePatterns (case-insensitive) gets the headphones icon, one matching monitorPatterns the monitor icon, everything else the speaker. Left click toggles headphones ⇄ speakers (a monitor only when no speaker exists). Reload settings applies edits without a restart.

Logs

Daily rolling files in %LOCALAPPDATA%\ShowAudioDevice\logs, 14 days kept; Open log folder in the menu.

Build

dotnet publish src/ShowAudioDevice/ShowAudioDevice.csproj -c Release -r win-x64 -o publish

Produces a single portable ShowAudioDevice.exe. Icons are generated by tools/Make-Icons.ps1.

Releases and updates

azure-pipelines.yml publishes every push to master as a nightly and every v* tag as a stable release to the TomLabs app store through the shared publish-desktop-app.yml template (zip, SHA-256, update.json, optional signature, upload). The app checks https://apps.tomlabs.cz/dl/ShowAudioDevice/<channel>/latest.json on start and every six hours (TomLabs.AutoUpdate); updateFeed in settings.json points it elsewhere, e.g. a local store while developing. appstore.json carries the catalogue metadata.

Changelog

See CHANGELOG.md.

Changelog

All notable changes to ShowAudioDevice, newest first.

1.0.0 — 2026-09-16

Added

  • Switch the default playback device: left-click the tray icon to toggle between headphones and speakers, or pick any active device from the menu.
  • Three device kinds with their own icon: headphones, speakers and monitor (HDMI/DisplayPort audio), matched by headphonePatterns / monitorPatterns in %APPDATA%ShowAudioDevicesettings.json (was hard-coded to GS3).
  • Tray icon follows the taskbar theme (white glyph on a dark taskbar, dark glyph on a light one).
  • Configurable headphone detection: headphonePatterns in %APPDATA%\ShowAudioDevice\settings.json (was hard-coded to GS3).
  • "Start with Windows", optional notification bubble on device change, "Edit settings" / "Reload settings".
  • Daily rolling log in %LOCALAPPDATA%\ShowAudioDevice\logs, level set in settings, "Open log folder" in the menu.
  • About dialog with version, channel and these notes; version also shown in the tray menu.
  • Self-update through TomLabs.AutoUpdate (stable / nightly channel) from the TomLabs app store feed; updateFeed in settings points at another store (local development).
  • Headless command line for hotkeys and Stream Deck: --list, --set <device>, --toggle.

Changed

  • Device changes are picked up from Core Audio notifications instead of polling every second.
  • Portable self-contained single-file build on .NET 10; new application icon.

Fixed

  • Icon handles leaked once per second; tray icon updated from a timer thread.