On Sun, 12 Aug 2012 15:01:06 +0000 Fons Adriaensen <fons@linuxaudio.org> wrote:
On Sun, Aug 12, 2012 at 04:00:47PM +0200, Tom Gundersen wrote:
On Sun, Aug 12, 2012 at 3:07 PM, Fons Adriaensen <fons@linuxaudio.org> wrote:
it's just extremely clumsy to use a mixer that way, you'd need ten hands. For it means that whenever you want to adjust a single channnel you may have to adjust *all* others and the master at the same time.
Unlike humans, computers does not have a limited number of hands. This is not a priori a problem.
It's still like trying to start a 10-ton truck in 5th gear. If you do that on your first day on the job you'll be fired, not because your boss likes to show his authority but because you have shown your incompetence. And if a computerized system tries to do that (and maybe it could if it has very fine control over the engine and clutch) then there's clearly something wrong with it.
Things will still work well when (A) happens to contribute nothing (i.e. while it outputs silence). So things will still work well when (A) isn't there at all. *There is no need to change anything at all* when (A) goes away, even if all others have their volume set to lower values.
You have showed that it is unnecessary in one particular (very simple) case. However, you have not showed that it is unnecessary in all cases, so this is not really relevant (had we been talking about a human doing this, you'd have a point of course).
It is never necessary. It it were that would imply that a sound card without any gain controls (equivalent to a fixed 0 dB gain) would fail in some cases. It doesn't. In fact many PRO cards are just like that.
If you have apps A, B, C with volumes a, b, c you can always set the HW gain to unity gain (0dB), and send
s = a * A + b * B + c * C (1)
Let me see if I understand. Capital A, B and C are bare intensities (in watts or logarithmic scale) sent from an app? If those are arbitrarily large, how do you make sure your speaker is not going to blow up?
to the soundcard. What would be the advantage of doing what PA does, which is
* m = maximum of a, b, c) * Set the master to m, * send
s = a/m * A + b/m * B + c/m * C (2)
???
It can only generate trouble, basically you forfeit any headroom the system would have.
So, the intention is to normalize to the loudest app?
So PA will set the master output to -20 dB. Now even if all of these apps are limited to contributing -20 dB (but there is no reason why that should be), the sum of them can be higher, but your soundcard can't handle that.
That clearly would not work. Surely PA would need to adjust the master output to compensate for the number of channels? I don't know these implementation details, but I don't see how your arguments shows that this is impossible in general, just that the algorithm you outlined does not work.
PA could leave some headroom and even adjust that in function of the number of sources. But it could also just leave the master gain alone, and compute (1) above instead of (2). Any advantage you or any user have from using PA 'things just work' would remain the same. But it's a lot simpler and doesn't have the problems (2) has.
-- Leonid Isaev GnuPG key: 0x164B5A6D Fingerprint: C0DF 20D0 C075 C3F1 E1BE 775A A7AE F6CB 164B 5A6D