[pulseaudio-discuss] RFC: New volume functionality for PulseAudio
Alexander E. Patrakov
patrakov at gmail.com
Thu Feb 13 21:49:28 CET 2014
13.02.2014 15:25, Tanu Kaskinen wrote:
> On Wed, 2014-02-12 at 02:14 +0600, Alexander E. Patrakov wrote:
>> 11.02.2014 20:03, Tanu Kaskinen wrote:
>>> * Volume classes. A car manufacturer may want to present only two
>>> volume controls for the user: "system" and "entertainment". A policy
>>> module in PulseAudio should classify streams based on whether their
>>> volume should be controlled by the "system" volume or by the
>>> "entertainment" volume. The volume classification should be separate
>>> from the routing classification (module-stream-restore, among other
>>> problems, doesn't allow separate classification for volume and routing).
>>
>>> * Fine-grained volume UIs that show all application and device
>>> volumes, like pavucontrol. PulseAudio already handles this pretty well.
>> These two points are definitely valid, but not simultaneously. In a car
>> that only allows "system" and "entertainment" volumes, there should be
>> no way to create something non-representable in this model by running a
>> rich mixer application. All mixer applications should show the same set
>> of available volumes. Dumbing down the model must happen in some policy
>> module in PulseAudio. In other words, there should be two incompatible
>> policy modules: one that implements a dumb model with only two volumes
>> applying to all streams according to their system/entertainment class,
>> and one that implements a more-traditional per-stream and per-sink
>> volume model.
> I don't know if we have any actual disagreement here, but just to
> clarify: I think it's fine to have dumbed-down and fine-grained
> interfaces "simultaneously". Yes, the real granularity is decided by a
> policy module in PulseAudio, but applications are free to represent the
> controls as they wish.
My initial wording on different mixer UI coexistence was overly
aggressive, and it did contain a disagreement. However, now I understand
that all that would happen in the cases relevant in practice is limited
to either having duplicate controls that move together, or a mixer
displaying a (possibly empty) subset of all controls if it is running on
a policy module it was not designed to work with. This cannot lead to
any conflicts or ambiguous situations, and thus, in my new opinion, this
is acceptable.
> If there are many streams but only few volume
> classes, there are three ways to do it:
>
> 1) Streams reference the volume class volume control. Applications can
> show per-stream volumes if they want, but the stream volumes won't be
> independent.
This looks logical and useful.
> 2) The volume control reference in streams is null. Applications can't
> show per-stream volumes.
This looks just as logical, but less useful than (1) in the sense that a
purely stream-oriented mixer interface will display an empty set of
controls.
> 3) Streams have independent volumes in cascade with the volume class
> volume.
This invalidates the whole point of having only a few volume classes. If
people want this, they should use a separate volume policy module that
provides such combined model.
I have also reread the API page, and I think that it would be nice to
specify event ordering and/or introduce a Sync event that is fired after
a group of related changes (the idea comes from the SYN_REPORT event in
the input subsystem).
Suppose that there is a mixer interface that wants (independently of any
policy module) to display all volume controls, grouping them into two
tabs: "routing nodes" and "everything else" (just for illustration). To
do so, it would listen for RoutingNodeAddedEvent and
VolumeControlAddedEvent (and the corresponding removals). On getting a
VolumeControlAddedEvent, there is no way to decide on which tab to put
this control. One solution would be to always put it onto the
"everything else" tab, and move it if the corresponding
RoutingNodeAddedEvent is emitted. But that is not flicker-free. With the
Sync event, one would be able to avoid updating the GUI until getting it.
--
Alexander E. Patrakov
More information about the pulseaudio-discuss
mailing list