* feat(playback): global speed with three strategies
Add Settings → Audio and player-bar controls for global playback speed
(speed with auto pitch correction as default, varispeed, manual pitch shift).
Time-stretch runs on a background worker; Orbit sessions force 1.0× passthrough.
* fix(playback): align seekbar, seek, and progress on content timeline
Unify UI timebase across varispeed and preserve strategies: full-track
duration, speed-scaled progress for DSP paths, and content-timeline seeks
without varispeed scaling. Reset the sample counter after seek so clicks
land correctly; restart playback on strategy/enable changes instead of
fragile hot-switching.
* fix(ui): anchor playback speed popover like volume controls
Replace the centered EQ-style modal with a player-bar popover (outside
click, Escape, reposition on scroll). Show compact controls in the bar
and overflow menu; keep strategy hints and labels in Settings only.
* docs(release): CHANGELOG and credits for playback speed (PR #852)
* docs(changelog): add playback speed entry for PR #852
* fix(clippy): simplify raw_counter_samples branch for CI
Collapse duplicate if branches flagged by clippy::if-same-then-else.
* fix(ui): wheel on pitch slider adjusts pitch in speed popover
In compact player-bar controls, scroll over the pitch row changes pitch;
elsewhere in the panel changes speed. Stop propagation so overflow menu
wheel does not tweak volume.
* fix(playback): address PR #852 review and drop ineffective dynamic imports
Translate playback-rate strings for de/fr/es/zh/nb/nl/ro; restamp sample
counter on live preserve-path speed changes; use neutral rate atomics for
radio progress; static-import playerStore in playListenSession (move preview
volume sync to previewPlayerVolumeSync side-effect module).
* fix(i18n): translate playback-rate strategy labels in all locales
Replace leftover English Varispeed/Pitch strings in ru and other non-en
settings blocks so popover strategy buttons and hints read natively.
* fix(i18n): refine German varispeed label to "Tonhöhe folgt dem Tempo"
---------
Co-authored-by: Psychotoxical <171614930+Psychotoxical@users.noreply.github.com>
111 of 122 top-level src/utils/ files move into 16 topic folders (audio,
cache, cover, share, server, playback, playlist, deviceSync, waveform,
mix, format, export, changelog, ui, perf, componentHelpers). True
singletons with no cluster stay at the utils/ root.
Pure file-move: a path-aware codemod rewrote 539 relative-import
specifiers across 275 files; no logic touched. The hot-path coverage
gate list (.github/frontend-hot-path-files.txt) is updated to the new
paths for the 11 gated utils files — a mechanical consequence of the
move, not a CI change. tsc is green.