[pulseaudio-discuss] RFC: loopback manager

Tanu Kaskinen tanuk at iki.fi
Sat May 25 13:37:54 UTC 2019


I nowadays use module-loopback on a daily basis, and I thought it would
be nice to provide a GUI (in pavucontrol) for configuring loopbacks.
For this I propose we create a new module: module-loopback-manager. The
purpose of that module is to provide a client interface for managing
loopbacks. Without such manager interface it's not possible to create
loopbacks that stay around after reboot. Well, one could add module-
loopback to default.pa, but that doesn't mesh well with dynamic
hardware, and that's not doable from pavucontrol anyway. The new module
would maintain a database of loopbacks, so that they can be recreated
after a reboot.

The client interface would contain functionality for adding and
removing loopbacks, and changing the parameters of existing loopbacks.

A loopback object would have the following attributes (to be shown in
"pactl list loopbacks"):

    Name: The identifier for the loopback.

    Description: A human-friendly description for UI labels.

    Source: The source name. Can also be unset, in which case the
loopback should follow the default source setting.

    Sink: The sink name. Can also be unset, in which case the loopback
should follow the default sink setting.

    Enabled: The user can temporarily disable a loopback without
removing it altogether.

    Running: A boolean that is true when the loopback is running, and
false when the loopback is stopped for whatever reason. The interface
should also provide a human-friendly string explaining why the loopback
is not running (the loopback could be disabled, the sink or source
might not be present at the moment, or the sink or source might be

    Requested latency: The latency that has been requested by the user.

    Current latency: The current actual latency. Might be different
than the requested latency, because the requested latency may be too
low to work.

    Persistent: A boolean indicating whether the loopback will be
restored after restarting PulseAudio. My plan is that loopbacks that
are created through the manager interface are always persistent, and
non-persistent loopbacks are only for loopbacks that are created by
loading module-loopback.

    Source output index: When the loopback is running, it will have a
source output associated with it.

    Sink input index: When the loopback is running, it will have a sink
input associated with it.

    module-loopback index: When the loopback was created by loading
module-loopback, this is the module index.

A maximum latency attribute could be added later, which would prevent
the loopback increasing the latency too much (at the cost of drop-

The pactl interface could look like this:

pactl loopback add [--description=<description>] [--enabled=<enabled>] [--latency-msec=<latency>] <name> <source> <sink>
pactl loopback remove <name>
pactl loopback set-description <name> <description>
pactl loopback set-source <name> <source>
pactl loopback set-sink <name> <sink>
pactl loopback set-enabled <name> <enabled>/toggle
pactl loopback set-latency-msec <name> <latency>

Any thoughts? Would this kind of addition be welcome? If you think that
it's not worth having this feature, please say so, so that I don't
spend too much effort on this.


More information about the pulseaudio-discuss mailing list