[pulseaudio-discuss] Per (sink input, sink) volume control / routing

Andreas Hartmetz ahartmetz at gmail.com
Mon Feb 19 16:21:42 UTC 2018


Am Montag, 19. Februar 2018, 17:05:27 CET schrieben Sie:
> On 02/19/2018 06:46 PM, Andreas Hartmetz wrote:
> > Hello!
> > 
> > I am currently developing an audio system for an automotive
> > customer,
> > based on PulseAudio where PulseAudio is applicable. It is part of
> > the
> > requirements that the volume of every input channel (sink input) to
> > every output channel (sink) can be configured separately. There are
> > good reasons for this, for example there can be two backseat info-
> > tainment "terminals" which could send their audio to a headphone for
> > each, or to the speakers in the whole car. The user-exposed volume
> > controls will of course present a simplified vew, but for factory
> > configuration, the described control is needed, and volume levels
> > are
> > expected to change at runtime in response to some external events.
> > 
> > The problem is that PulseAudio does not support that. It could
> > almost
> > be "hacked" by using one module-combine-sink for every sink input,
> > which at least allows sending a stream to an arbitrary collection of
> > sinks. But it does not support volume control at all.
> > 
> > So:
> > - Is there a way that I didn't think of  to piece together the
> > 
> >   desired volume control using  existing modules and/or other
> >   configuration? I don't want to resort to anything really weird
> >   like creating lots of "loopback" devices using local sockets or
> >   something like that (also for latency reasons), and running
> >   multiple server instances also won't do it due to PA requiring to
> >   open devices exclusively. Also, any hacky solution is not allowed
> >   to significantly increase (or worse, hide from PA so it can't be
> >   compensated) latency.
> > 
> > - If not, what do you think would be the best way to do it? I'm
> > 
> >   thinking of a potential "module-crossbar" that I would need to
> >   write, which allows matrix-style (n, m) volume control, i.e.
> >   set_volume(sink_input_index, sink_index, volume).
> 
> Volume for each sink-input can configured separately:
> 

Thanks, but...

Note sure who is misunderstanding who.
I did not mean per sink-input, I meant per *tuple* (sink input, sink).
The volume is a property of the connection between sink input and sink.
If in your example, the loopback represents the application stream,
you misunderstood me. If in your example, the loopback is somehow
specific to the connection between sink input and sink, sitting in
the middle of a more complicated routing graph, I misunderstood you.

> $ pactl list sink-inputs
> Sink Input #0
>         Driver: module-loopback.c
>         Owner Module: 4
>         Client: n/a
>         Sink: 0
>         Sample Specification: s16le 2ch 96000Hz
>         Channel Map: front-left,front-right
>         Format: pcm, format.sample_format = "\"s16le\""  format.rate =
> "96000"  format.channels = "2"  format.channel_map =
> "\"front-left,front-right\"" Corked: no
>         Mute: no
>         Volume: front-left: 65536 / 100% / 0.00 dB,   front-right:
> 65536 / 100% / 0.00 dB balance 0.00
>         Buffer Latency: 133657 usec
>         Sink Latency: 56936 usec
>         Resample method: trivial
>         Properties:
>                 media.role = "abstract"
>                 media.name = "Loopback from Null Input"
>                 media.icon_name = "audio-input-microphone"
> $ pactl set-sink-input-volume 0 32768
> $ pactl list sink-inputs
> Sink Input #0
>         Driver: module-loopback.c
>         Owner Module: 4
>         Client: n/a
>         Sink: 0
>         Sample Specification: s16le 2ch 96000Hz
>         Channel Map: front-left,front-right
>         Format: pcm, format.sample_format = "\"s16le\""  format.rate =
> "96000"  format.channels = "2"  format.channel_map =
> "\"front-left,front-right\"" Corked: no
>         Mute: no
>         Volume: front-left: 32768 /  50% / -18.06 dB,   front-right:
> 32768 /  50% / -18.06 dB balance 0.00
>         Buffer Latency: 133593 usec
>         Sink Latency: 20936 usec
>         Resample method: trivial
>         Properties:
>                 media.role = "abstract"
>                 media.name = "Loopback from Null Input"
>                 media.icon_name = "audio-input-microphone"
> 
> > Thanks in advance!
> > 
> > Andreas Hartmetz
> > 
> > 
> > _______________________________________________
> > pulseaudio-discuss mailing list
> > pulseaudio-discuss at lists.freedesktop.org
> > https://lists.freedesktop.org/mailman/listinfo/pulseaudio-discuss
> 
> --
> Raman






More information about the pulseaudio-discuss mailing list