Android's volume slider has a floor, and on a lot of devices that floor is louder than it should be. The first step above mute is a fixed fraction of the device's maximum output, not a fixed loudness, so a phone or tablet with a loud maximum can leave you with "off" and "too loud" as your only two options.
This is a common enough complaint that there's a small ecosystem of apps claiming to fix it. Most of them don't, and the reason why is a genuinely interesting piece of Android audio API trivia. This post is about the one approach that actually works, why the popular alternative doesn't, and a separate engineering problem I hit while making the app that implements it buildable reproducibly for F-Droid.
I'm the author of Granular Volume, a small open source Android app that does exactly this. Everything below is drawn from actually shipping it.
Here is the whole thing in one take, if you would rather see it than read it. Android's own slider reaches its floor, then the dial keeps going below it, and the audio drops with every step on screen:
Why "more volume steps" doesn't lower the floor








