Releases: achuthanmukundan00/temper-player
Releases · achuthanmukundan00/temper-player
Release list
v0.1.0 — Peak-Locked Phase Vocoder Pitch Engine
Changelog
v0.1.0 — Peak-Locked Phase Vocoder Pitch Engine
🎛️ Pitch shifting — rebuilt from scratch
- Hand-rolled peak-locked phase vocoder in Zig replacing Apple's
AVAudioUnitTimePitch.
The old unit sounded papery and harsh in the high end — like MP3 compression artifacts.
The new engine uses identity phase locking (Laroche–Dolson), transient preservation,
and Kaiser-windowed sinc resampling for transparent pitch shifting across ±1200 cents. - Mathematically transparent at 0 cents — the entire chain is a no-op within
float rounding error (verified at 3.1e-7 max error over 31k samples). - Peak locking keeps harmonics glued together — no phasey/underwater artifacts.
- Transient detection resets phases on attacks — drums stay punchy, not smeared.
- Stereo image preserved — analysis decisions run on the mid signal so L/R never
make conflicting phase choices. - 76× realtime performance on M-series — negligible CPU cost.
🔧 Fixes
- Blackout on track switch:
isFrozenwas stucktrueafter pause, silently
dropping every visual frame on the next track. Now explicitly cleared onplay(). - Pitch-shifted playback on certain sample rates: the audio graph connected
playerNode → mainMixerwithformat: nil, defaulting to the hardware output
rate. 44.1 kHz files on 48 kHz systems played ~147 cents sharp. Now explicitly
connected with the file's real processing format. - Double-flush glitch at EOF: two buffers in flight both triggered EOF drain.
Added generation guard so only the first pump flushes.
⚡ Visualizer
bandCorrelations— per-band (bass/mid/high) Pearson correlation with
goniometer-shared two-pole IIR bandpass filters, replacing the old tripled
wideband correlation value.- Blinking fix: goniometer filter states now properly reset on track change.
- Smoothing pipeline restored to original behavior — 90% visual smoothing
across all published metrics.
Download: TemperPlayer-v0.1.0.dmg below.
Drag to /Applications and launch. macOS may require right-click → Open on first run.
v0.0.1-patch1 - first usable release
✨ What's New
The menu bar UI has been completely reworked to look and feel like a first-class macOS citizen.
- SF Symbols throughout —
backward.fill,play.fill,pause.fill,forward.fill,gobackward.5,goforward.5,music.note.list - San Francisco proportional fonts replace monospaced text everywhere
- Semantic styling —
.foregroundStyle(.primary/.secondary/.tertiary/.quaternary)respects system appearance - Hover animations on transport buttons with smooth transitions
- Progress bar in the menu bar popover
- Status icon toggles between
play.circle.fill(playing) andplay.circle(paused) - Click-outside-to-close on the popover via global event monitor
- Empty state with guidance when no track is loaded
- Same polish applied to CompactPlayerView, SuperCompactPlayerView, TransportBar, and PlayBar
Files Changed
| File | Change |
|---|---|
MenuBarController.swift |
SF Symbol icon, Combine observation, global event monitor, .applicationDefined popover |
MenuBarView.swift |
Complete rewrite — system fonts, SF Symbols, hover states, progress bar |
CompactPlayerView.swift |
System fonts, SF Symbols, semantic colors |
SuperCompactPlayerView.swift |
System fonts, SF Symbols, semantic colors |
TransportBar.swift |
System fonts, SF Symbols, volume speaker icon |
PlayBar.swift |
System font polish |
README.md |
New — badges, features, usage, shortcuts, architecture |