A cross-platform audio player for Android, Android Automotive, iOS, and macOS. A single Rust core handles playback everywhere; Flutter builds the interface on top of it, so the app feels native on every platform without four separate codebases fighting each other.
Seeking on a streamed track means fetching the right byte range before you can decode anything — miss that, and a scrub feels broken. The core coordinates range requests, a sparse cache of the bytes already fetched, and decode state so seeking stays responsive even mid-stream.
Background playback would stutter specifically on Android Automotive — not on phones, not consistently, and not for any obvious reason in the audio pipeline itself.
Traced to Android's cgroup scheduler quietly demoting the decode thread's priority once the app moved to the background — starving the exact thread that needed to keep running smoothly.
This is the kind of failure that never shows up in a demo and only surfaces after real driving conditions — the difference between an app that works and one that holds up.
The NowPlayingTab widget was redesigned to cut animation complexity and fix portrait-mode centering — small details that determine whether the screen feels solid or slightly off.
A custom ProgressSlider/BufferedSlider widget handles both live and DVR-style streams, showing buffered range separately from playback position.
A Flutter lyrics editor with a waveform timeline lets lyrics be synced directly against the audio, rather than guessed at with timestamps.
The SongIdScreen was redesigned with animated recording states, giving clear feedback while the app listens for a match.
Metadata isn't hand-entered. A MusicBrainz ETL pipeline built on Prefect and Python handles matching, alongside YouTube video matching and cover art resolution — with a Flutter spectrum visualizer as an early piece of the now-playing experience.
Get in touch about licensing the core, a custom build, or bringing it to a new platform.