Skip to content

Releases: achuthanmukundan00/temper-player

v0.1.0 — Peak-Locked Phase Vocoder Pitch Engine

Choose a tag to compare

@achuthanmukundan00 achuthanmukundan00 released this 12 Jun 17:55

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: isFrozen was stuck true after pause, silently
    dropping every visual frame on the next track. Now explicitly cleared on play().
  • Pitch-shifted playback on certain sample rates: the audio graph connected
    playerNode → mainMixer with format: 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

Choose a tag to compare

@achuthanmukundan00 achuthanmukundan00 released this 23 May 15:36

✨ 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) and play.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