← Projects

Bones — a precise offline music player

An offline hi-fi player for Android that shows what the audio path really does and learns what you actually listen to.

growingfunplanted tended

Role
product, design, development
Period
2026 — ongoing
Stack
Kotlin, Media3, Jetpack Compose, Android
→
Live

What it changed

  • The indicator caught the player itself cutting 24-bit FLAC to 16 bits; fixed in the next version, output is now float
  • Bit-perfect USB output on Android 14+, with a plain-language report on what happens to the sound
  • 300+ automated tests, screenshots of every screen included

The problem

I listen to my own files — FLAC, MP3, rips I made years ago. Players for that either look like they were built in 2012 or quietly resample everything and don’t say so. None of them would tell me what actually reaches my headphones.

The constraint

Android decides a lot about the sound and admits little: the output format, the Bluetooth codec, whether a USB DAC gets the original bits. The player can only show what the system reports. Anything it has to work out by itself must be marked as an estimate, and what it cannot know it must not invent.

What was built

An offline player around one idea: be honest about the sound. A tap on the audio path opens a report in plain language — what is played, what Android does to it, how to make it cleaner. Around that: crossfade, an equalizer, folders as a library, Android Auto, lyrics, themes, and a “wave” that learns from what you skip and what you play to the end.

What it changed

The honesty paid off right away: the indicator showed that the player itself was losing bits. The next version fixed it. Friends install it from the landing page, and their phones keep finding cases no emulator would.

What I’d do differently

Start with the audio path report, not with the library. Everything else in the player turned out to be a way to keep that report true.

Русская версия →