Best way to create a volume slider

:information_source: Attention Topic was automatically imported from the old Question2Answer platform.
:bust_in_silhouette: Asked By fpicoral

Hey there!

I’m trying to create a volume slider that goes from 0 to 100 but the volume property is in db. Which is the best way to “convert” the values from the slider?

:bust_in_silhouette: Reply From: fpicoral
  1. In script (can’t set this low in the inspector) set the slider min
    value and step to 0.0001
  2. Set the slider max value to 1
  3. On the value changed signal from the slider, set the volume of your
    audio player to log(slider_value) * 20
:bust_in_silhouette: Reply From: Dlean Jeans

There’s an official GDScript function called linear2db and its counterpart db2linear:

print(linear2db(1)) # 0
print(linear2db(0.1)) # -20
:bust_in_silhouette: Reply From: Andrew Wilkes

The thing is that the slider naturally outputs a linear value (0 … 8 in my case) that you want to exponentially increase in terms of negative db. Here is the code that I implemented:

func _on_Volume_value_changed(value):
g.settings.volume = value
var db = -pow(8.0 - value, 1.8)
AudioServer.set_bus_volume_db(0, db)

You can adjust the 1.8 exponent value to change the range of attenuation that you may need.

:bust_in_silhouette: Reply From: Venex2004

A much better way is to use the linear_to_db. You can check out these video if you need more explanation on how to use it.

Make a volume slider in 3 minutes