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?