Turn the volume all the way down without muting. On most Android phones you are now at step one of about fifteen, and step one is not quiet. It is a fixed fraction of full scale. If that fraction is louder than the room you are in, you have exactly two options the system will give you: too loud, or silent.
This comes up constantly, and the usual answers are wrong in an interesting way. It is not a broken speaker, it is not a setting anyone has hidden from you, and it is not something a factory reset repairs. It is a design decision, and once you can see where the decision lives, it becomes obvious why some fixes work, why some cannot work, and why one particular category of sound is beyond reach for everybody.
What a volume step actually is
Android does not store your volume as a loudness. It stores an index, a small whole number, usually running from zero to about fifteen for media on a phone. Somewhere below that index there is a curve that turns it into a gain, a multiplier applied to the audio samples as they are mixed.
Two things follow from that, and they explain almost everything.
The first is that the bottom of the range is a deliberate value, not a natural limit. Index one maps to some specific fraction of full scale. That fraction was chosen by the platform and adjusted by whoever built your phone, and it was chosen with a set of assumptions about where phones get used. A floor that makes sense on a bus is not a floor that makes sense next to a sleeping child.
The second is that the range is fixed at both ends. Index zero is mute. There is no index below one that is quieter but audible, because the scale simply does not have one. When people say the lowest setting is too loud, they are describing the gap between index zero and index one, and that gap is a cliff.
Why more steps is a different problem from a lower floor
Several device makers ship a way to subdivide the volume range more finely. Samsung's Sound Assistant is the best known, and there have been others on LG and elsewhere. These are real features and they solve a real complaint, which is that the jump from one step to the next is too coarse and the level you actually want falls between two stops.
That is worth separating from the question this page is about. Finer resolution and a lower floor are not the same request. Both of those features work through Android's own stream volume, the same index and the same curve. If what you need is to land between step two and step three, more steps is exactly the right tool and you should use it, because it is built in and costs nothing.
If what you need is to get underneath the whole range, that has to happen somewhere else in the system. Which means it is worth knowing what the system actually looks like.
Where your audio actually goes
Every sound on an Android device passes through a service called AudioFlinger, which combines audio from every running app and hands the result to the audio hardware. The important and generally unknown fact is that AudioFlinger does not have one path. It has several, and they behave differently.
The main one is the mixer thread. It is where media playback, ringtones, notifications and alarms are combined. It supports an effect chain, which is a place where audio processing can be inserted into the mixed signal.
Alongside it there is a fast mixer, a deliberately minimal low-latency path. It carries keyboard clicks, interface tap sounds, the short sounds apps play through the system sound pool, and low-latency game audio. It skips the effect chain on purpose, because effects add delay and avoiding delay is the entire reason that path exists.
| Path | What it carries | Effect chain |
|---|---|---|
| Mixer thread | Media, ringtones, notifications, alarms | Yes |
| Fast mixer | Keyboard clicks, interface taps, system sound pool, low-latency game audio | Bypassed by design |
| Direct or offloaded output | Compressed audio handed straight to a hardware decoder | Usually not |
| Telephony | The cellular voice path | Varies by handset |
This table is the reason for one of the most frustrating experiences people report. If your complaint is that the keyboard click is too loud, and you have tried every app and every setting and nothing touched it, you were not doing it wrong. Those sounds travel a path that skips audio processing, and no app attenuating through the effect chain can reach them, ever. That is worth knowing before you spend another evening on it. The keyboard sound is usually adjustable separately in the system's own sound settings, and that is the place to look.
The one place an app can stand
Android gives applications a way to attach an audio effect to a specific audio session. Session zero is special: it is the mixed output of the entire device, the point after AudioFlinger has combined every app's audio and before the result reaches the audio hardware.
An effect attached there is not adjusting anyone's volume setting. It is multiplying the already mixed signal by a gain of its own. That is a different layer from the volume index, which is why it is not bound by where the index bottoms out.
The specific effect that makes this practical is DynamicsProcessing, available from Android 9 onwards. It is normally used for compression and equalisation, with a chain of stages. If you disable every stage and use only its input gain, it stops being a dynamics processor and becomes a clean, flat attenuator applied to everything on that path.
There is an older effect called LoudnessEnhancer that some apps fall back to on devices where the newer one fails to initialise. It is worth knowing that it was designed to make audio louder, and support for negative gain is left to the device maker. On a phone that falls back to it, attenuation may simply not happen. This is one of the real sources of device-to-device variation in this area.
How far down, and how you can check it yourself
Input gain on DynamicsProcessing is specified in decibels. In the Android source, with every processing stage disabled, that value is converted from decibels to a linear multiplier and applied across the signal. The conversion is the ordinary one:
linear = 10 ^ (dB / 20)
So minus 30 decibels is a multiplier of about 0.0316, which is roughly three per cent of the original amplitude, applied flat across the whole frequency range. That is not a perceptual estimate or a marketing figure, it is what the arithmetic in the platform does with the number.
If you want to verify a claim like this on your own device rather than take anyone's word for it, there is a method that settles it. Dump the audio server's state while audio is playing:
adb shell dumpsys media.audio_flinger
Look at the effect chains. You will see each effect's identifier, whether it is enabled, and crucially which session it is bound to. Session zero is the global output mix; any other number is one specific app's session. An app that genuinely processes everything must appear there. An app that only repaints a slider will not.
One honest warning about that method, learned the hard way. The dump proves that an effect is attached and enabled. It does not report the effect's gain. With attenuation active, the track gain columns can still read zero, because those columns describe a different thing. So the dump answers "is this real and is it global" and never "how deep". Measuring depth needs an actual signal comparison: fix the system volume, play a fixed tone, record the output the same way three times with nothing running and then with each thing you want to compare, and take the difference in RMS between the recordings. Anything short of that is a reading of an app's own user interface.
What this does not solve
An honest account of a mechanism has to include where it stops. Four boundaries matter.
Keyboard and interface sounds
Unreachable, permanently, for anything working this way. They travel the low-latency path described above. Adjust them in the system's own sound settings instead.
Calls vary by handset
App calls such as WhatsApp are attenuated along with everything else, because that audio is an ordinary app playing through the mixed output. Regular phone calls are not. Cellular voice is carried on a separate output that runs no audio effects at all, which was read directly from the system audio engine during a live call, so this is a limit of Android rather than a per-device difference.
Fixed-volume outputs
Some connections hand the phone's audio to another device that controls its own level, which is common with cars over USB and with some docks. When the receiving device sets the volume, the phone is no longer the thing deciding it, and nothing on the phone will change what you hear.
Device makers can change the parts
All of the above describes standard Android. Manufacturers customise audio processing, and an effect from the system or another app can take precedence over one from an ordinary application. That is why anyone telling you a volume tool works on every device is telling you something they cannot know.
Where this leads
This article describes the mechanism, not a product, because the mechanism is the useful part and it stays true whatever anyone builds on it. That said, I wrote it while building on it. Granular Volume is a floating dial that applies exactly this: a flat attenuator on the device's mixed output, seven steps from 0 to minus 30 decibels, plus the ordinary volume range above the device minimum for anyone whose physical buttons have failed.
It is open source under GPL-3.0, weighs 2.7 MB, and requests no internet permission at all, which means it has no way to send anything anywhere. That last part is not a promise in a policy document, it is something you can confirm by looking at the installed package.
Free, with no ads, no account and no tracking, on both stores. The source is on GitHub under GPL-3.0.
Questions people actually ask
- Why is Android's lowest volume still too loud?
- Because the lowest step is not silence, it is a fixed fraction of full scale chosen by the platform and the device maker. The volume index maps onto a gain curve that stops at a defined floor, and nothing in the normal volume path goes below it.
- Do apps that add more volume steps fix this?
- They solve a different problem, which is coarse resolution between steps. That is genuinely useful when the level you want falls between two stops. It is a separate question from where the bottom of the range sits, because both work through the same stream volume.
- Why can nothing lower the keyboard and touch sounds?
- They are played through Android's low-latency output path, which deliberately skips post-processing because effects add delay. An app attenuating on the mixed output cannot reach sounds that never pass through it. This is architectural, not an app limitation.
- How can an app go below the system minimum at all?
- By working at a different layer: an audio effect attached to session zero, the mixed output of the whole device, after the mixer and before the hardware. A gain applied there is independent of where the volume slider bottoms out.
- Does this work on every device?
- No, and anyone claiming otherwise is guessing. The mechanism is standard Android, but manufacturers substitute their own processing, regular phone calls are out of reach entirely, and some outputs have their level set by the receiving device rather than the phone.
- Does it need root or a computer?
- No. The effect API is a normal part of Android from version 9 onwards. It needs permission to draw over other apps and standard audio permissions, and works without root, without ADB and without a computer.