v2.0.0-pre1 - native audio + elevated hotkey helper
Pre-release
Pre-release
First pre-release of the v2.0 architecture. Tagged as prerelease so existing v1.x users running the in-app update check are not notified - early-adopter cohort only.
What's new since v1.8.2
Native audio half (Option 2).
- WebView2 muted at the OS level (CoreWebView2.IsMuted=true) on overlay + banner.
- New NativeAudioPlayer (Windows.Media.Playback.MediaPlayer + YoutubeExplode 6.6.0) renders YouTube audio inline within PulseNet-Player.exe.
- Audio is driven by YT IFrame API events (play / pause / seek / station-change all sync). Drift correction at 500ms threshold with 3-second post-kickoff settle.
- Live channels route through HLS via PlayLiveAsync (no drift correction).
- URL-expiry recovery via MediaPlayer.MediaFailed re-resolves the stream through YoutubeExplode (bounded 3 retries / 60s window).
- AudioBridge + LocalAudioStreamServer + AudioBridgeInterop + AudioSessionInterop removed entirely (1254 lines). OBS Window Capture's Capture-Audio-BETA now sees PulseNet-Player.exe audio directly. One Sonar session, one OBS source.
Elevated hotkey helper.
- New separate process PulseNetHotkeyService.exe (raw P/Invoke WH_KEYBOARD_LL).
- Runs elevated, in the user's interactive session, via a per-user Scheduled Task at logon. No UAC prompt at runtime; task created with admin consent at install time.
- Bypasses UIPI restrictions when foreground is a High-IL game / launcher (recent CIG update bumped RSI Launcher and Star Citizen to admin). Also clears Discord-style WH_KEYBOARD_LL restrictions.
- Named-pipe IPC at .\pipe\PulseNetHotkey with explicit ACL for AuthenticatedUserSid. HotkeyClient (IHostedService) in the player connects + sends setKeys + receives hotkey push messages.
- App.xaml.cs arbitrates between the helper and the legacy in-process hook so there's no double-fire.
Click-blocker fix.
- Top of the YT iframe (volume / settings / next-video / channel link) is now unreachable. Those controls were rendered dead by the audio re-route - hiding them prevents confusion.
- Iframe volume pinned to max + unmuted on every onReady so the silent iframe stays in a known-good state.
Packaging.
- Per-machine WiX MSI (Program Files install root, HKLM KeyPath).
- CustomActions install / uninstall the scheduled task as part of the MSI transaction (deferred + no-impersonate, runs as SYSTEM with [LogonUser] substituted in).
- Hardened uninstall: kills helper processes, Wait-Process for OS reap, settle before unregistering. RemoveFiles proceeds cleanly without a reboot.
Known limitations
- Stations 1-17 still wired to the offline thumbnail; only Solaris Classical (Easter egg, dQw4w9WgXcQ) and PulseNet LIVE play actual content.
- Wave Link routing on tester machines not yet verified end-to-end with the new single-source architecture.
- Drag-stick bug (overlay follows cursor when SC has focus + click) has not been re-verified on this branch.
- Console Ctrl+C does not shut down the player (Console.CancelKeyPress not wired in WPF).
How to install
Download PulseNet-Setup.msi and run it. Helper auto-starts on next logon; no manual setup. F9 in launcher / SC / desktop toggles the overlay.
Portable PulseNet-Player.exe is also attached for hot-swap use but does not register the hotkey helper - F9 will only work for non-elevated foregrounds without the MSI install.