For a while I’ve disliked how high the minimum volume on Android is sometimes. Been searching on ways to fix it and most of the solutions I found required proprietary apps. But then I found this blog post from 2019 which was a pretty good solution to the volume thing. This involves modifying the files that define the volume curve (root is needed).

The relevant part is this:

On a recent-ish version of Android, the two files you want to mess with are:

  • /vendor/etc/audio_policy_volumes.xml, which defines what type of audio stream (media, phone calls, earbuds, bluetooth, etc.) uses what type of audio curve.

  • /vendor/etc/default_volume_tables.xml, which defines the default audio curves referenced in the previous file.

If you’ve never modified files on Android, I highly recommend plugging your device to a computer, enabling USB debugging and connecting through adb. You will likely need to remount the filesystem, as it’s in read-only mode by default:

$ adb shell  
$ su  
$ mount -o remount,rw /system  

I don’t really care about anything else than media volume, so here is the curve I ended up with. It goes very low and gives you more control at low volume, while still being quite loud at maximum volume. You will need to experiment with your device though, as DACs are all different.

<reference name="DEFAULT_MEDIA_VOLUME_CURVE">  
<!-- Default Media reference Volume Curve -->  
    <point>1,-9000</point>  
    <point>10,-8000</point>  
    <point>20,-7000</point>  
    <point>30,-6000</point>  
    <point>40,-4000</point>  
    <point>60,-3000</point>  
    <point>100,-2000</point>  
</reference>  

For reference, the scale goes from -9600 to 0, 0 being the loudest sound your device can produce.

As all things Android, if you are not building your own images, this will get erased next time you update your device. Don’t forget to backup the files you modify, as audio curves are easy to screw up!


In my case I only needed to modify /vendor/etc/default_volume_tables.xml.

On my device the curve from the post was a bit too low (first three volume steps were almost unhearable) so after messing around with it I found a more sane one for mine. Gonna leave that here too in case it’s useful:

<reference name="DEFAULT_MEDIA_VOLUME_CURVE">  
<!-- Default Media reference Volume Curve -->  
	<point>1,-8000</point>  
	<point>5,-7500</point>  
	<point>10,-7000</point>  
	<point>20,-6000</point>  
	<point>40,-4000</point>  
	<point>60,-3000</point>  
	<point>100,-2000</point>  
</reference>  

(Again, this can be different for each device)

Have a great day :D

  • Tarquinn2049@lemmy.world
    link
    fedilink
    English
    arrow-up
    7
    arrow-down
    1
    ·
    8 hours ago

    I just grab an app that lets it increment by amounts other than 10%. Not as good, but doesn’t need root. If I gotta change the volume by alot, I drag the bar. Otherwise I just leave the button at 1% increments. Cuz yeah, my volume is like 1% to 5% most of the time, until I need to watch a youtube video, then it’s like 70%… then the next thing I do on my phone after the youtube video renders me temporarily deaf and everyone within a mile glares at me… and I turn my volume back down to 5% or less again.

    Not sure why every single other thing on the phone uses a different standard for volume than video does… just a new loudness war I guess.

  • Ephera@lemmy.ml
    link
    fedilink
    English
    arrow-up
    1
    ·
    8 hours ago

    Ah, neat. My phone speakers are far too silent, so I’ll have to fiddle with this in the other direction.