Repository navigation
Tags
Tags
feat(player): crossfade, preload upgrades, and playback diagnostics Crossfade (Preferences -> Experimental, Off by default): - dual AVQueuePlayer design: the incoming track plays on a second player while the outgoing one fades out with an equal-power 20 Hz ramp over the actual time remaining, so the incoming track peaks exactly at the outgoing track's end. - finishCrossfade promotes the incoming player to primary on ramp completion or on the outgoing item's DidPlayToEndTime, re-subscribing currentItem KVO and the periodic time observer and syncing now-playing, lyrics and scrobble state. - pause, seek, skip, queue edits, clear-queue, and turning crossfade off cancel an in-flight fade; a failed incoming item cancels instead of fading into silence. The volume slider does not fight the ramp. - Duration picker offers Off, 3, 5, 6, 8, 10 and 12 seconds; a positive duration enables crossfade and suppresses gapless preloading. Gapless improvements: - preloaded items now buffer with the system default instead of the 3 s stall-recovery cap; the cap is applied only once the item is current. - when the stream cache completes after a remote preload was queued, swap it for the local file (remote -> local upgrade). - refresh the EQ audio mix at bind only when the bypass state changed, instead of rebuilding a live MTAudioProcessingTap on every transition. - transition diagnostics on Console.app (net.faultables.flo / player) gated behind the Debug setting: preload source, deadline arming, auto-advance, watchdog/fallback, and failure paths. Tests: crossfade duration defaults to off, persists, and drives the enabled state. 307 tests pass.
feat: polish tip jar sheet and persist per-tier tip counts Show per-tier tip-count badges on the tip cards (top-right), recovered from StoreKit transaction history so they survive an app reinstall on the same Apple ID. Celebrate successful tips with a confetti burst and auto-dismiss. Move the Support flo row below About flo in Preferences.
PreviousNext