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

Lennart Poettering lennart at poettering.net
Tue May 26 18:40:18 PDT 2009


On Tue, 26.05.09 19:47, Jud Craft (craftjml at gmail.com) wrote:

> 
> 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.

Please read my mail again. I explained the difference between
reference and virtual volume there. I also explained that only the
latter is really visible in the UI. Or at least I tried to explain that.

> 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%).

Not necessarily. Please read again what I wrote about ref vs. virt volumes.

And again, please stop talking about those percentages, they are misleading.

> 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.

Again, please don't mention the percentages. If at all speak about the
linear factors.

So, reading these as linear factors. If X is 0.75 and Y is 0.8, then,
yes, the virtual sink volume and hence the hw volume control is
configured to 0.8, which is then shown in the UI on the volume slider
of the sink. As I said the internally applied volume for stream B will 
then be 1.0, let's call that Y'. The internally applied volume X' for
stream A will be X/Y:

The final output volume of B will be Y' * Y = 1.0 * Y = Y = .8

The final output volume of A will be X' * X = (X/Y) * Y = X = .75

Which is exactly what was requested.

if this is not clear to you, please read my last mail again.

> > 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.

Sure, but RB only shows one volume slider. Which one should it show?
The stream volume? If so users of use case B would be pissed off. The
sink volume? Then the users of use case A would be pissed off.

And don't suggest that we should show both sliders in rb!

> 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

Uh? That's bogus. Are you claiming that if you change a stream volume
of A this might have the effect of changing the volume of a stream B?
That's simply not true. 

> 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).

Vista is broken in this way too. Some apps expose the device volume,
others expose the stream volume.

> 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".

Which is exactly what PA does.

Really, please try to understand what I wrote in my last mail.

PA's flat volume work very much like Vista, with the exception that we
save/restore volumes.

Lennart

-- 
Lennart Poettering                        Red Hat, Inc.
lennart [at] poettering [dot] net
http://0pointer.net/lennart/           GnuPG 0x1A015CC4



More information about the pulseaudio-discuss mailing list