Revive player: FFmpeg gapless engine, SQLite library, foobar queue, Last.fm scrobbling + login #1

Merged
pecheny merged 2 commits from feature/gapless-ffmpeg-player into main 2026-07-04 14:16:47 +00:00
Owner

Rebuilds the skeleton into a working local-file music player.

Playback

  • FFmpeg (libav*) decode → canonical PCM feeding a single AVAudioPlayerNode for true gapless across formats (flac/mp3/opus/ogg/m4a/aac). AAC priming handled via both ffmpeg edit-lists and Apple iTunSMPB. Verified gapless by recording real mixer output (6.000s continuous, sample-accurate for FLAC).
  • Lean audio-only FFmpeg xcframeworks (device + simulator) built by scripts/build-ffmpeg.sh, imported as the CFFmpeg module.

Library

  • SQLite (FTS5 unicode61) for instant, case- and diacritic-insensitive, any-language search.
  • Embedded album-art extraction (attached_pic + Ogg base64), albums grid + album detail UI.

Queue

  • foobar2000-style queue: a queued track switches context to its own album position.

Last.fm

  • Sign-in flow (Settings tab): username/password exchanged for a session key, persisted; password never stored.
  • SQLite-backed offline scrobble queue, retried until accepted (is_scrobbled), plus now-playing.

UI

  • Tabs: Albums / Songs / Search / Settings; iOS 26 tabViewBottomAccessory mini player above the tab bar; synced now-playing timers.

22 unit tests (queue semantics, Unicode search, scrobble queue) pass.

🤖 Generated with Claude Code

Rebuilds the skeleton into a working local-file music player. ## Playback - FFmpeg (libav*) decode → canonical PCM feeding a single AVAudioPlayerNode for true gapless across formats (flac/mp3/opus/ogg/m4a/aac). AAC priming handled via both ffmpeg edit-lists and Apple iTunSMPB. Verified gapless by recording real mixer output (6.000s continuous, sample-accurate for FLAC). - Lean audio-only FFmpeg xcframeworks (device + simulator) built by scripts/build-ffmpeg.sh, imported as the CFFmpeg module. ## Library - SQLite (FTS5 unicode61) for instant, case- and diacritic-insensitive, any-language search. - Embedded album-art extraction (attached_pic + Ogg base64), albums grid + album detail UI. ## Queue - foobar2000-style queue: a queued track switches context to its own album position. ## Last.fm - Sign-in flow (Settings tab): username/password exchanged for a session key, persisted; password never stored. - SQLite-backed offline scrobble queue, retried until accepted (is_scrobbled), plus now-playing. ## UI - Tabs: Albums / Songs / Search / Settings; iOS 26 tabViewBottomAccessory mini player above the tab bar; synced now-playing timers. 22 unit tests (queue semantics, Unicode search, scrobble queue) pass. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
Author
Owner

mentioned in commit e9a722b3a3

mentioned in commit e9a722b3a3d07008533376441e61623ba52a739b
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
pecheny/muon-player!1
No description provided.