[pulseaudio-discuss] Per-app flat volume adjustment is highly unintuitive, if mathematically consistent.

Jud Craft craftjml at gmail.com
Tue May 26 17:47:41 PDT 2009


Long post coming, I apologize ahead of time.  I really do appreciate
you taking the time to explain it, even if I am a little frustrated
(and you may be as well if I drag this thread on for much longer).

First, I'm not sure what you mean by "reference volume" and "virtual
volume".  My "Internal Audio" card has one volume, the Output Volume
in g-v-c.  Let me be clear about the puzzle I am facing, and you can
tell me if I misunderstand.

This example has two applications, one of which does not have a
pre-set volume in Pulse.  (For the both-apps-have-a-volume case, see
below).  Let's say I have _one_ application running, App A.  The
volume of the app is 80%, and thus my Output Volume on the main sink
is 80%.  If I launch a new App B that has never been seen before,
Pulse will set B to the current volume (80%).

What happens to App A is where we differ.  I assumed that since I want
A to be only 80% as loud as anything else, that since B is set to 80%,
A must become quieter, to be only as 80% loud as B.  Thus A will be
scaled down to 56%, or whatever.

You say, however, that App A is not "80% as loud as everything else",
but that when I change only one running app, PulseAudio assumes I am
only changing the Output Volume, but not the relative volume of App A.
 Thus, Output Volume is 80%, but A is 100% of that, and B will be too,
so they will both be at 80%.

Is that correct?

Now, I find that hard to grasp.  When I want my music to be quieter
and I see a music stream slider, and I turn that down, that's what I
want to turn down.  Nothing else.  Turning down the music does not
mean I want _everything_ else on my machine that I will launch for the
*first time* hereafter to be quieter too.  (I'm not saying you've hit
a usability problem yet, I'm just saying my expectation).




On Tue, May 26, 2009 at 5:47 PM, Lennart Poettering
<lennart at poettering.net> wrote:
> If you have one stream A at linear volume factor X and one B at linear
> volume factor Y with X < Y, then the device will be configured to Y
> and internally the data from B will be passed through untouched and
> the one from A will be attenuated with the factor (X/Y). That is
> completely different from what you wrote above.
>

That sounds weird.  If X is 0.75 (and thus my main system volume is
75%), and I launch Y (which has a previous volume of 0.8), then the
main system volume will be set to 0.8 (to the loudest app), Y will be
0.8 (untouched), and X will be, to your formula, (0.75/0.8 = 0.9375?).
 What?  That can't be right (0.93 and 0.8), so you must have meant
0.93 and 1.0.

But, everything jumped from 0.75 : 0.8 to 0.93 : 1.0.  I want the
sound to be 75% as loud as everything else, but it's only 75% as loud
relative to App B.  Why is it now 93% as loud as everything else?

That _only_ makes sense if you assume that secretly, the "real volume"
of my machine is 100%, but you've hidden everything from me.  That may
in fact be what you mean by "virtual volume", but I must admit that
it's quite bewildering.

Calculating App A relative to (whatever app I have running at the
time) rather than some constant (the current fixed volume, if such a
thing still exists) is a little bizarre to me.

> Now, I must admit that this all is a bit hard to grasp. And thus not
> exactly the definition of easy to use. We had a couple of discussions
> on this very ML about this. So far noone came up with a way to fix
> this in a way that would be completely convincing.
>
> I think the core problem is that it is impossible to figure out what
> the user actually wants. When he increases a volume of a stream he
> might A) want it a bit louder then whatever else is currently playing
> and would be pissed off if the other stream would get louder at the
> same time or B) want it a bit louder because everything that's playing
> is just too silent and he would be pissed off if only one stream would
> get louder and not all.

I think you might be thinking too hard.  When I increase the volume of
my system, I expect everything to get louder.  When I increase the
slider of a program, I merely expect that one program to get louder.
I don't expect everything else to get louder too, and I don't expect
everything else to get quieter.  Nothing else should chang except that
one program.

Why would I expect anything else?  That makes no sense.  If I wanted
those Apps to be quieter, I would bring their sliders down.

Windows Vista doesn't do this, really.  When I increase the volume of
one App, it doesn't touch any of my other Apps (unlike Pulse) -- it
doesn't even bring them up, even if increasing one App changes the
system volume.  The only time Vista touches all Apps is when I adjust
the main output device volume - the only time it should, since
changing the main volume should change everything (like Pulse).

And in Vista, changing one app doesn't change the main system volume
-- and more importantly, I can SEE that it doesn't.  The "main volume"
isn't suddenly some nebulous value that means "the current volume
value of the loudest app".

Behind the scenes, maybe Pulse's algorithm is exactly like Vista, but
because it has abstracted away what the actual volume of my output
device is, I can't tell, and the only user facing UI (the main volume
meter) behaves alternately in two different ways.  Vista definitely
doesn't do -that-.

(I don't mean to hold Vista as a gold standard, as I do have problems
with their volume scaling too, but I believe it to be more consistent.
 I always know what the main volume of the system is.  An App is never
abstractedly substituted for the system volume, even if it's the only
thing I'm doing.)  Have I understood the dilemma?



More information about the pulseaudio-discuss mailing list