]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/commitdiff
fix a VERY stupid sound menu bug: use correct scale of decibels. -20dB is 0.1, not...
authorRudolf Polzer <divverent@xonotic.org>
Sat, 10 Mar 2012 17:22:21 +0000 (18:22 +0100)
committerRudolf Polzer <divverent@xonotic.org>
Sat, 10 Mar 2012 17:22:21 +0000 (18:22 +0100)
qcsrc/menu/xonotic/dialog_settings_audio.c
qcsrc/menu/xonotic/slider_decibels.c

index 8e80495321436beaeeeed91eca8447e5ee00cdd5..1f1ee385b219b762945dee382ff2916e355a4286 100644 (file)
@@ -23,14 +23,14 @@ void XonoticAudioSettingsTab_fill(entity me)
        entity e, s, sl;
 
        me.TR(me);
-               s = makeXonoticDecibelsSlider(-20, 0, 0.5, "mastervolume");
+               s = makeXonoticDecibelsSlider(-40, 0, 1, "mastervolume");
                me.TD(me, 1, 1, e = makeXonoticSliderCheckBox(-1000000, 1, s, _("Master:")));
                if(s.value != e.savedValue)
                        e.savedValue = 0; // default
                me.TD(me, 1, 2, s);
        me.TR(me);
                me.TDempty(me, 0.2);
-               s = makeXonoticDecibelsSlider(-20, 0, 0.5, "bgmvolume");
+               s = makeXonoticDecibelsSlider(-40, 0, 1, "bgmvolume");
                makeMulti(s, "snd_channel8volume");
                me.TD(me, 1, 0.8, e = makeXonoticSliderCheckBox(-1000000, 1, s, _("Music:")));
                if(s.value != e.savedValue)
@@ -40,7 +40,7 @@ void XonoticAudioSettingsTab_fill(entity me)
                setDependentStringNotEqual(s, "mastervolume", "0");
        me.TR(me);
                me.TDempty(me, 0.2);
-               s = makeXonoticDecibelsSlider(-20, 0, 0.5, "snd_staticvolume");
+               s = makeXonoticDecibelsSlider(-40, 0, 1, "snd_staticvolume");
                makeMulti(s, "snd_channel9volume");
                me.TD(me, 1, 0.8, e = makeXonoticSliderCheckBox(-1000000, 1, s, ZCTX(_("VOL^Ambient:"))));
                if(s.value != e.savedValue)
@@ -50,7 +50,7 @@ void XonoticAudioSettingsTab_fill(entity me)
                setDependentStringNotEqual(s, "mastervolume", "0");
        me.TR(me);
                me.TDempty(me, 0.2);
-               s = makeXonoticDecibelsSlider(-20, 0, 0.5, "snd_channel0volume");
+               s = makeXonoticDecibelsSlider(-40, 0, 1, "snd_channel0volume");
                me.TD(me, 1, 0.8, e = makeXonoticSliderCheckBox(-1000000, 1, s, _("Info:")));
                if(s.value != e.savedValue)
                        e.savedValue = 0; // default
@@ -59,7 +59,7 @@ void XonoticAudioSettingsTab_fill(entity me)
                setDependentStringNotEqual(s, "mastervolume", "0");
        me.TR(me);
                me.TDempty(me, 0.2);
-               s = makeXonoticDecibelsSlider(-20, 0, 0.5, "snd_channel3volume");
+               s = makeXonoticDecibelsSlider(-40, 0, 1, "snd_channel3volume");
                me.TD(me, 1, 0.8, e = makeXonoticSliderCheckBox(-1000000, 1, s, _("Items:")));
                if(s.value != e.savedValue)
                        e.savedValue = 0; // default
@@ -68,7 +68,7 @@ void XonoticAudioSettingsTab_fill(entity me)
                setDependentStringNotEqual(s, "mastervolume", "0");
        me.TR(me);
                me.TDempty(me, 0.2);
-               s = makeXonoticDecibelsSlider(-20, 0, 0.5, "snd_channel6volume");
+               s = makeXonoticDecibelsSlider(-40, 0, 1, "snd_channel6volume");
                me.TD(me, 1, 0.8, e = makeXonoticSliderCheckBox(-1000000, 1, s, _("Pain:")));
                if(s.value != e.savedValue)
                        e.savedValue = 0; // default
@@ -77,7 +77,7 @@ void XonoticAudioSettingsTab_fill(entity me)
                setDependentStringNotEqual(s, "mastervolume", "0");
        me.TR(me);
                me.TDempty(me, 0.2);
-               s = makeXonoticDecibelsSlider(-20, 0, 0.5, "snd_channel7volume");
+               s = makeXonoticDecibelsSlider(-40, 0, 1, "snd_channel7volume");
                me.TD(me, 1, 0.8, e = makeXonoticSliderCheckBox(-1000000, 1, s, _("Player:")));
                if(s.value != e.savedValue)
                        e.savedValue = 0; // default
@@ -86,7 +86,7 @@ void XonoticAudioSettingsTab_fill(entity me)
                setDependentStringNotEqual(s, "mastervolume", "0");
        me.TR(me);
                me.TDempty(me, 0.2);
-               s = makeXonoticDecibelsSlider(-20, 0, 0.5, "snd_channel4volume");
+               s = makeXonoticDecibelsSlider(-40, 0, 1, "snd_channel4volume");
                me.TD(me, 1, 0.8, e = makeXonoticSliderCheckBox(-1000000, 1, s, _("Shots:")));
                if(s.value != e.savedValue)
                        e.savedValue = 0; // default
@@ -95,7 +95,7 @@ void XonoticAudioSettingsTab_fill(entity me)
                setDependentStringNotEqual(s, "mastervolume", "0");
        me.TR(me);
                me.TDempty(me, 0.2);
-               s = makeXonoticDecibelsSlider(-20, 0, 0.5, "snd_channel2volume");
+               s = makeXonoticDecibelsSlider(-40, 0, 1, "snd_channel2volume");
                me.TD(me, 1, 0.8, e = makeXonoticSliderCheckBox(-1000000, 1, s, _("Voice:")));
                if(s.value != e.savedValue)
                        e.savedValue = 0; // default
@@ -104,7 +104,7 @@ void XonoticAudioSettingsTab_fill(entity me)
                setDependentStringNotEqual(s, "mastervolume", "0");
        me.TR(me);
                me.TDempty(me, 0.2);
-               s = makeXonoticDecibelsSlider(-20, 0, 0.5, "snd_channel1volume");
+               s = makeXonoticDecibelsSlider(-40, 0, 1, "snd_channel1volume");
                makeMulti(s, "snd_channel5volume"); // @!#%'n Tuba
                me.TD(me, 1, 0.8, e = makeXonoticSliderCheckBox(-1000000, 1, s, _("Weapons:")));
                if(s.value != e.savedValue)
index 24edb4cb91b6deef418b7d17053411e4912a578b..729bec00693e28f1707c8c12868cfe90d1bbb974 100644 (file)
@@ -9,6 +9,16 @@ entity makeXonoticDecibelsSlider(float, float, float, string);
 
 #ifdef IMPLEMENTATION
 
+float toDecibelOfSquare(float f)
+{
+       return 20.0 * log10(f);
+}
+
+float fromDecibelOfSquare(float f)
+{
+       return pow(10, f / 20.0);
+}
+
 entity makeXonoticDecibelsSlider(float theValueMin, float theValueMax, float theValueStep, string theCvar)
 {
        entity me;
@@ -24,32 +34,34 @@ void XonoticDecibelsSlider_loadCvars(entity me)
                return;
 
        v = cvar(me.cvarName);
-       if(v >= 0.98)
-               Slider_setValue( me, 0 );
-       else if(v < 0.0005)
-               Slider_setValue( me, -1000000 );
+
+       // snapping
+       if(v > fromDecibelOfSquare(me.valueMax - 0.5 * me.valueStep))
+               Slider_setValue(me, me.valueMax);
+       else if(v < fromDecibelOfSquare(me.valueMin - 0.5 * me.valueStep))
+               Slider_setValue(me, -1000000); // virtually infinite
        else
-               Slider_setValue( me, 0.1 * floor(0.5 + 10.0 * log10(cvar(me.cvarName)) * 10) );
+               Slider_setValue(me, me.valueStep * floor(0.5 + toDecibelOfSquare(v) / me.valueStep) );
 }
 void XonoticDecibelsSlider_saveCvars(entity me)
 {
        if not(me.cvarName)
                return;
 
-       if(me.value >= -0.1)
-               cvar_set(me.cvarName, "1");
-       if(me.value < -33)
+       if(me.value > me.valueMax - 0.5 * me.valueStep)
+               cvar_set(me.cvarName, ftos(fromDecibelOfSquare(me.valueMax)));
+       else if(me.value < me.valueMin - 0.5 * me.valueStep)
                cvar_set(me.cvarName, "0");
        else
-               cvar_set(me.cvarName, ftos(pow(10, me.value / 10)));
+               cvar_set(me.cvarName, ftos(fromDecibelOfSquare(me.value)));
 }
 
 string XonoticDecibelsSlider_valueToText(entity me, float v)
 {
-       if(v < -33)
-               return CTX(_("VOL^OFF"));
-       else if(v >= -0.1)
+       if(v > me.valueMax - 0.5 * me.valueStep)
                return CTX(_("VOL^MAX"));
+       else if(v < me.valueMin - 0.5 * me.valueStep)
+               return CTX(_("VOL^OFF"));
        return sprintf(_("%s dB"), SUPER(XonoticDecibelsSlider).valueToText(me, v));
 }