[pulseaudio-discuss] limits on maximum device volume?

Lennart Poettering lennart at poettering.net
Fri Apr 24 17:53:30 PDT 2009

On Fri, 24.04.09 17:14, pl bossart (bossart.nospam at gmail.com) wrote:

> Hi,
> I have been playing with flat volumes in 0.9.15. Nice functionality.
> But it seems nothing prevents an application from setting the volume
> to the max any longer. Is there a way to specify that the master
> volume should only change within predefined limits? That would be
> useful to avoid losing your hearing with a headset or waking up your
> neighbors at night.

Saved stream volumes are applied relative to the 'reference' volume of
the sink you play your stuff on. That reference volume is the one you
can control in the 'Sinks' tab of pavucontrol.  If you change the
volume of a stream (i.e. in the 'Playback' tab of pavucontrol) this
might have feedback on the visible volume of the sink, but won't move
the reference volume.

What this boils down to is: 

  If you change the volume of a stream, you just change the volume of
  that one stream for now and for the future. It won't have any effect
  on the volume of *other* existing or future streams.

  If you change the volume of a sink, you change the volume of all
  streams on it at the same time for now and for the future. It will
  have a direct effect on existing or future streams.

Or with other words:

If you changed the volume of your music and then have been surprised
that the volume of your event sounds didn't change too then you
apparently changed the stream volume but should have changed the sink

This dichotomy between is sink and stream volume is admittedly hard to
understand. Even technical folks are surprised by this, although most
folks admit that this behaviour does make a lot of sense.

I am not sure what way could lead out of this. 

On one hand people are annoyed if they turn up the volume of their
movie and then are shocked that the 'You've got mail' sound blasts out
of the speakers, too. On the other hand the same folks are annoyed if
they turn up their music because it's too faint and then wonder why
that 'You've got mail' sound is still so darn faint. In the first case
what they wanted was changing the stream volume but changed the sink
volume and in the second case they wanted to thange the sink volume
but changed the stream volume. That's why just sticking to "we only
expose the sink volume in the UI" or sticking ot "we only expose the
stream volume in the UI" doesn't cut it and will annoy at least half
of the people.

It's hard to be smarter than the user in figuring out what he really

The only viable solution I am seeing here is to not strictly base the
decision of the volumes for new streams on the saved and configured
volume factors but instead also base them on the actual signals in
question. i.e. we'd follow the current algorithms, but transparently
add some limits to it: we'd make sure that the perceived loudness of
an event sound never exceeds the perceived loudness of the currently
played music by some specific factor.

And actually I already thought quite a bit about how to best get
loudness logic into PA. For music files that include Replay Gain we
could just beef up gst to pass that to us in a stream property. For
event sounds we could obviously precalculate the Replay Gain when the
sample is cached. For everything else we could implement some Replay
Gain-like algorithm that would continously calculate some Replay
Gain-like value with a moving window or so. Of course for such streams
the statistical processing part of Replay Gain would have to be
replaced. And I wonder how expensive and necessary the loudness filter
that Replay Gain uses would be CPU-wise if we really should apply it
to all streams we have passing through PA.

If we'd have the Replay Gain value for all streams this would be
immensly useful, not just for the event sound vs. music volume policy,
but also as help implementing DRC to avoid clipping when mixing. The
fact that PA is designed for long hw playback buffers is pretty good
for implementing DRC, too.

Unfortunately my todo list is already more than full. Not going to
happen tomorrow. Unless of course someone wants to pick this up! Alwas
happy to take patches!


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

More information about the pulseaudio-discuss mailing list