Skip to content

feat: visualizer waveform, outline rework, and interaction fixes - #36

Merged
lstebner merged 3 commits into
mainfrom
feat/visualizer-waveform
Jul 16, 2026
Merged

feat: visualizer waveform, outline rework, and interaction fixes#36
lstebner merged 3 commits into
mainfrom
feat/visualizer-waveform

Conversation

@lstebner

@lstebner lstebner commented Jul 16, 2026

Copy link
Copy Markdown
Owner

Summary

  • Adds a third visualizer style: Waveform — five standing-wave lines, one per frequency band group (sub-bass → treble), animated with irrational speed ratios so their interference stays jagged and non-repeating
  • Lines are color-coded using color-of-sound theory (red/orange/green/blue/violet) on dark and light themes; colored themes (mint, grape, lemon) spread five hues ±60° around their accent for a cohesive palette
  • Theme detection switched from accent saturation to background saturation, correctly classifying grape (previously misidentified as light theme)
  • Reworks the Outline visualizer: replaces per-FFT-band spike tips with five smoothly blended frequency-group sectors, plus three superimposed polar standing waves (sin(3α), sin(5α), sin(7α)) at irrational time ratios for a continuously shifting warbly shape
  • Fixes Space bar not toggling play/pause when the visualizer is open (a focused button underneath was intercepting it)
  • Fixes Equalizer popover rendering beneath the visualizer (z-index raised from 100 → 120)
  • On the Rust side: AnalysisSource now publishes a 512-sample PCM waveform buffer alongside FFT bands in a single VisualizerPayload event; the standalone rms.rs module is removed (its logic was already subsumed by AnalysisSource)

Test plan

  • Open visualizer → switch between Bars, Outline, Waveform styles
  • Waveform: confirm five lines visible, each a distinct color matching the active theme; wave amplitude reaches just past the album art edge
  • Waveform: lines freeze when paused, resume cleanly on play
  • Outline: confirm smooth warbly deformation with whole sectors breathing together; ghost trails from the decay look intentional
  • Switch themes while visualizer is open — confirm each theme produces distinct colors
  • Press Space while visualizer is open — confirm play/pause toggles
  • Open Equalizer while visualizer is open — confirm it renders on top
Screencast.from.2026-07-15.23-00-12.mp4

🤖 Generated with Claude Code

lstebner and others added 3 commits July 15, 2026 22:47
Adds a third visualizer style ("Waveform") alongside bars and outline.

Five standing-wave lines, one per frequency band group (sub-bass → treble),
animate with irrational speed ratios so their interference stays jagged and
non-repeating. Lines are color-coded per the color-of-sound spectrum on dark
and light themes; colored themes (mint, grape, lemon) instead spread five
hues ±60° around their accent color for a cohesive, theme-matched palette.
Theme detection uses background saturation rather than accent saturation,
which correctly classifies grape (previously misidentified as light theme).

On the Rust side, AnalysisSource now maintains a 512-sample PCM waveform
buffer alongside the existing FFT bands, publishing both in a single
VisualizerPayload event. The standalone rms.rs module is removed; its logic
was already subsumed by AnalysisSource.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Replaces per-FFT-band spike tips with five smoothly blended frequency-group
sectors so whole arcs of the circle breathe together (matching the waveform
line groupings). Three superimposed polar standing waves — sin(3α), sin(5α),
sin(7α) — driven at irrational time ratios (0.5, 0.73, 0.43 Hz) add a
continuously shifting warbly deformation that never settles into a repeating
pattern. Sector boundaries use cosine interpolation to stay smooth.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Space bar now always toggles play/pause while the visualizer is open,
bypassing the native-button-activation check that previously let whatever
button had focus underneath intercept the keypress.

Equalizer popover z-index raised from 100 to 120 (preset list from 101 to
121) so it renders above the visualizer panel (z-index 100) when opened
from the transport bar.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
@lstebner
lstebner enabled auto-merge (squash) July 16, 2026 06:02
@lstebner
lstebner merged commit cc794e4 into main Jul 16, 2026
2 checks passed
@lstebner
lstebner deleted the feat/visualizer-waveform branch July 16, 2026 06:03
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant