Skip to content

v3.4.0.0 — Major Audio Visualizer Performance & Stability Release

Choose a tag to compare

@AresX0 AresX0 released this 08 Feb 08:32
· 88 commits to main since this release

v3.4.0.0 — Major Release (February 8, 2026)

Performance & Memory Leak Fixes

  • Fixed SKMaskFilter native resource leak — 20 locations leaked ~1400 native objects/sec in Klingon, ~660 in Federation, ~352 in Jedi. All now use using var for automatic disposal.
  • Fixed dispatcher priority inversion — Changed fullscreen spectrum data dispatch from Send to Input priority, preventing keyboard input starvation.
  • Thread-safe frame-skip guard — Replaced bool with Interlocked.CompareExchange to prevent race conditions between NAudio thread and UI thread.
  • Fixed dispatch pile-up freeze — Guard reset moved to finally block so it can never get permanently stuck.

Mode Switching Fixes

  • Fixed Federation/Jedi/TimeLord/Milkdrop fullscreen switching — Mode changes now force immediate InvalidateVisual() instead of waiting for next timer tick.
  • Fault-tolerant cleanup — CleanupModeResources wrapped in try/catch so mode always changes even if cleanup throws.
  • Fixed global animation phase reset — Removed _animationPhase = 0 from TimeLord cleanup (was causing stuttering in all modes).
  • Protected externally driven visualizer — OnUnloaded now skips cleanup for fullscreen visualizers that are still loaded.

Render Crash Recovery

  • Exception-safe GPU rendering — OnSkiaPaintSurface renderer dispatch wrapped in try/catch to prevent WPF from permanently stopping re-renders.
  • Error indicator — Shows red error text instead of freezing on last frame if a mode crashes.

Previous Fixes Included

  • Centralized CleanupModeResources for all 22 modes
  • GPU bitmap disposal on unload (DisposeGpuResources)
  • Matrix column list trimming
  • Milkdrop/TimeLord null-guard on feedback buffer .Copy()