Steam

Steam

Không đủ lượt đánh giá
Developers, fix your volume sliders!
Bởi God, owner of the Universe
Most games' volume sliders are broken. The sliders' top 30% do almost nothing. This is baffling, because 1) it is so obvious that something is wrong, and 2) it is child's-play for a programmer to fix this.

Here's a TL;DR of this article, with visualization: https://i.imgur.com/J6WA6eo.png

Morpheus (Matrix): "You've felt it your entire life, that there's something wrong with the world. You don't know what it is, but it's there, like a splinter in your mind, driving you mad."

That's what I have to think of, given the situation. There seem to be holes in reality where something is just inexplicably wrong and refuses to change. (Too low FOV (field of view) is another one of those examples.)
   
Giải thưởng
Yêu thích
Đã yêu thích
Bỏ thích
Most volume sliders behave wrong.
Whether the volume controls are sliders or buttons - we're talking about a range of values from minimum to maximum. Let's use decimal numbers from 0 to 1 here. We could also use 0%-100%, but expressing it like that would get a little in the way of the math later.

A proper volume control would work like this: 0 is silent, 1 is full volume, and if a user feels that they need to change the volume setting, they should be able to estimate the new setting they need, e.g. reduce down to 3/4 (0.75) if it's just a bit too loud, down to half (0.5) if it's a lot too loud, and 0.25 if it's supposed to be near quiet.

But most volume controls in games - and even in many applications, e.g. soundcloud.com, youtube.com, Steam's store - do not behave like this. They are ... broken. That is the proper term. If you reduce the volume from 1 to 0.75, you will effect almost no change. If you go down to 0.5, the change is very noticeable, but it is much too weak. And when you're moving around near 0.25, you finally have volume control power at your fingertips.

The power of volume change of those broken sliders accelerates the closer you get to complete silence, it drastically depends on where on the scale the user is moving the slider around.
Why do they behave wrong?
Again, the closer to 0 the user sets the volume control, the more power they seem to have at their fingertips. It "accelerates" towards 0. Why is that?

If you multiply a number by 0, the result is 0. If you multiply a number by 1, the result is the number.

So, at 1, we have all of the original identity. At 0, we have absolutely lost the original identity. The closer to 0 we get, the more this absolute power takes over, while 1 has no power at all.

If you change the volume from 100% to 90%, you have reduced the volume of what you heard by 10%. But if you change it from 20% to 10%, the relative change (Which is what matters, not the absolute value. More on that later. But clearly: Why do you change the volume setting? Because you want it to be different. Therefore, you care about the resulting difference.) is already 50%! So, if the user moves the slider by absolute distance X, at the high volumes this has a much weaker perceived effect than at the low volumes. Clearly, we have an acceleration here, and the explanation is indeed the absolute power of 0 that takes over.
How can they be fixed?
Let's say the values set by the user range from 0 to 1, where 0 is silence and 1 is full volume, and let's say that the sound system's output (from quiet to the neighbors knocking) ranges from 0 to 1, too. We can't just map the slider directly to the sound system output, or we get the broken behavior. We need to change the value first. How? Simple.

vSound = Math.pow(vSlider, Math.E); // raise slider value to power of Euler's number (~2.7)

We need to raise the slider value to the power of a positive number. Because e.g. 0.5x0.5 (That's 0.5 to the power of 2.) is 0.25, so if the user would reduce the slider from full to half volume (which we now know doesn't nearly have the desired change-power), the actual value they are setting is 0.25 instead of the too loud 0.5, and e.g. 0.8x0.8 is 0.64, so the slight change in volume desired when sliding that small bit down to 0.8, would now be amplified and therefore have kind of the desired effect. (Raising the input value to a power of less than 1 would have the exact opposite of the desired effect, it would expand the "dead" range near the top.)

Which value should be used? This might seem to be a matter of taste, but I believe it is not. First, I experimented with 2 (so, the input value would just be multiplied by itself), which improved things, but the improvement seemed too weak to me. The slider would still be kinda weak near the top and too fast at the bottom. I tried 4 (e.g. 0.5 x 0.5 x 0.5 x 0.5), but that was much too strong: Near the top, the slider would be much too powerful, near the bottom the volume would change almost not at all, and the middle setting would be much too quiet. I tried 3, which seemed almost ideal, but still too strong.

Then I remembered Euler's Number[en.wikipedia.org], the constant e which is approximately 2.71828 and is used for a symmetrical change in connection with the exponential/logarithm functions, and 2.7 indeed seems to hit the sweet spot. And, who would have thunk that, "my formula" happens to cause almost the same curve as the officially recommended decibel formula. But it's easier to remember (which is relevant in this global predicament of "Everybody does it wrong!"), and it causes actual silence once the slider gets to zero, so it's more comfortable for the user and also for the developer who doesn't have to add an explicit mute button.
That formula was created "because of the non-linearity of human hearing" which isn't actually the cause, no matter how often people repeat this meme: Most things we perceive are measured by relations. If you have a big pile of things (e.g. apples or little boxes) in your room and want to get the feeling that the amount has lessened, taking just 1 away is insufficient, it needs to be a much higher amount (e.g. 20, depending on pile size) - but if you only have a few of those things left (Pile is small.), then taking 1 away is enough to give you the impression that it's now indeed less. Or think about adding salt to your food: The difference between 10 or 11 spoons is little, but the difference between 1 or 2 spoons is experienced as profound, even though the absolute change is the exact same. But you know. Once people have chosen their mentors, they have chosen their truth.

So, with 2.7 you have power at the top, achieve something like "half volume" around the middle, and have plenty of resolution in the quiet ranges, so approaching the Black Hole that zero is can be done smoothly. How this feels depends a little on the overall volume dimensions we're talking about in the first place, of course, but 2.7 seems to be the golden choice to satisfy most needs.

And it's child's-play to implement in a program these days, it also doesn't even add calculation time: Only when the volume setting is changed, the calculation has to be made, which is in the options menu, not in the game where every cycle counts.

Euler's number might even be the objectively correct choice: If you would get 100% interest on your bank account, then after a year you'd double your money -> 2. If you get 50% interest for the first half of the year and again for the second, then you'll end up with 2.25 times your original money. With 25% for each quarter added to your account, it's 2.44140625. And if we crank up the resolution of these intervals infinitely, we get Euler's number, which is 2.718281828459045ETC. Since our goal is to increase the volume by larger slices the more volume we already have ... yeah. I can't really put it into words, but it does seem related. But again, I derived 2.7 by ear, plus it aligns extremely closely with the official decibel formula for volume.
But why does nobody do it?
If you don't like rambling, you probably want to skip this section.

The existence and prevalence of the volume slider problem is really baffling, given how screamingly obvious it is, and how easy it is to fix. Hence the Matrix quote in the article's intro, because whatever bits of human psyche, development practice, society effects etc. happened to randomly gather, forming and then perpetuating this annoyance, this swamp that keeps the developers' minds submerged, the Black Hole that resists enlightenment, ... - it's significant enough to warrant science to investigate what's going on. This is proper Ph.D. thesis material, even if gaming weren't a billion dollar industry, because it's a significant phenomenon, it's playing out in plain view of everybody. It's a special-mention candidate because it affects many people on everyday life level. He/she who solves this conundrum, accepted by peer-review, is sure to cement their name in a small way in scientific history.

I can only guess what the reasons are. For example:

When Internet folk talk about this, someone usually comes along, raises their index finger, and blesses the audience with the enlightenment that the reason for volume sliders' odd behavior is the non-linearity of human hearing, which isn't just completely wrong, it also translates the discussion to a level where most people don't have knowledge/opinions to contribute, so what can they do but to submit to the supposedly knowing one and the hard-to-digest articles they link. Can't speak out against them due to lack of material, can't disprove their claims due to articles for whose proper understanding you need to study first. Can only move on - or even give in. This might even create new "knowing ones" right away, and they might be just as actually (not) understanding of the matter as the meme perpetuator who brought this to them. This might be a relevant reason that this problem is so persistent, that most developers are deaf to the brokenness of their volume sliders.

Another reason might be the huge amount of things to consider when developing software, and especially if you want to get things done, you need to plan what you want to do and when. You might procrastinate a bit while playing around with the space ship you just implemented, but would you be so in love with the details that you play around with the volume knobs, too? Maybe, but your urge to move on might just make your brain jump blindly through the hoops of the sliders' brokenness. I think coffee might play a role here, too: While it certainly enables a mind to step on the gas more (At least while the high lasts.), it likely causes the brain to automatically cast irrelevant seeming things aside - a person might plain simply become deaf to the slider problem in the grips of the mental acceleration. And who knows, constant coffee use might reinforce this modus operandi. You got there faster, but you drove over people.
4 bình luận
God, owner of the Universe  [tác giả] 5 Thg05, 2023 @ 11:01pm 
Thanks, Mert! Feels good not to be alone in a world of idiots.
Mert 24 Thg02, 2023 @ 3:40pm 
OH MY GOD I THOUGHT I WAS STUPID WHEN I COULDN'T MAKE SOME VOLUME SLIDERS GIVE THE VOLUME I WANTED!!!

Thank you so much for this guide, since this has been a silent pet peeve of mine for a WHILE!
God, owner of the Universe  [tác giả] 14 Thg11, 2016 @ 6:26am 
Thanks a lot, CyberGatekeeper. Appreciated!
LOWSPECLOWLYFE 14 Thg11, 2016 @ 5:34am 
Right on the button, great content, and there is even a graph! I love it.