English · 한국어
A neon audio utility that controls real Windows playback devices directly, auto-switches on game launch, and offers a global-hotkey HUD — a Tauri v2 + React + Rust reimplementation.
This is a Tauri-based native desktop rebuild of an earlier Python (CustomTkinter) prototype.
Instead of Python/pycaw, the audio backend calls WASAPI / Core Audio COM directly from Rust via the windows crate,
while the UI reproduces the same cyberpunk neon / glassmorphism design in React + TypeScript.
Floating HUD overlay shown on a device switch:
- Real Windows audio control — enumerate render devices with
IMMDeviceEnumerator, volume/mute viaIAudioEndpointVolume, and switch the default device for both the Console and Communications roles through the undocumented COM interfaceIPolicyConfig::SetDefaultEndpoint. - Live peak meters — poll
IAudioMeterInformationevery 100 ms and visualize it as a neon gradient bar on each device card. - Global background hotkey — register an OS-level shortcut (default
Ctrl+Shift+A) withtauri-plugin-global-shortcutto cycle the active device and show the HUD without stealing focus. - Game auto-routing engine — a
sysinfo-based background thread scans processes every 2 seconds and auto-switches to the mapped device when a registered game launches. - Floating HUD overlay — a borderless, transparent, always-on-top window that fades in/out at the bottom-right.
glow-audio/
├─ src/ # React + TypeScript frontend
│ ├─ App.tsx # Main UI (Devices / Profiles / Settings tabs)
│ ├─ Hud.tsx # Floating HUD overlay component
│ ├─ api.ts # Typed wrappers around the Rust commands
│ ├─ main.tsx # Routes main vs HUD via the ?view=hud query
│ └─ styles.css # Neon / glassmorphism theme
└─ src-tauri/ # Rust backend
└─ src/
├─ audio.rs # WASAPI/COM audio engine + IPolicyConfig definition
├─ monitor.rs # Process monitor + auto-routing thread
└─ lib.rs # Commands, global hotkey, HUD, settings persistence
Settings and profiles are stored in the OS app-config directory
(%APPDATA%\com.kernullist.glowaudio\) as glow_settings.json / glow_profiles.json.
- Node.js + npm
- Rust (stable, MSVC target) + Visual Studio C++ Build Tools
- WebView2 runtime (bundled with Windows 11)
npm install # frontend dependencies
npm run tauri dev # dev mode (HMR + Rust hot-rebuild)
npm run tauri build # release build (standalone exe + installers)
⚠️ During development, always launch withnpm run tauri dev. Running the debug exe (src-tauri/target/debug/glow-audio.exe) on its own fails to reach the Vite dev server (localhost:1420) and shows a connection-refused page. To get a double-clickable standalone executable, build it withtauri build(see the script below).
A PowerShell script that handles the cargo PATH, checks prerequisites, and prints the produced artifact paths.
.\build.ps1 # full build: standalone exe + installers (msi/nsis)
.\build.ps1 -NoBundle # standalone exe only (skip installers, faster)
.\build.ps1 -SkipInstall # skip npm installArtifacts:
- Standalone exe:
src-tauri/target/release/glow-audio.exe - Installers:
src-tauri/target/release/bundle/{msi,nsis}/
npm aliases are also available: npm run app:build (full), npm run app:exe (exe only), npm run app:dev (dev).
- Default global hotkey:
Ctrl+Shift+A— cycle the active device + show the HUD popup. - Changeable in the
Global Settingstab using a format likeCtrl+Alt+S(modifier + key, joined by+).