dwww Home | Manual pages | Find package

libpipew...ne-stream(7) Miscellaneous Information Manuallibpipew...ne-stream(7)

NAME
       libpipewire-module-combine-stream - Combine Stream

DESCRIPTION
       The combine stream can make:

       • a new virtual sink that forwards audio to other sinks

       • a new virtual source that combines audio from other sources

       The  sources  and  sink  that  need to be combined can be selected using
       generic match rules. This makes it possible to combine static  nodes  or
       nodes based on certain properties.

MODULE NAME
       libpipewire-module-combine-stream

MODULE OPTIONS
       • node.name: a unique name for the stream

       • node.description: a human readable name for the stream

       • combine.mode = capture | playback | sink | source, default sink

       • combine.latency-compensate:   use   delay   buffers  to  match  stream
         latencies

       • combine.on-demand-streams: use metadata to create streams on demand

       • combine.props = {}: properties to be passed to the sink/source

       • stream.props = {}: properties to be passed to the streams

       • stream.rules = {}:  rules  for  matching  streams,  use  create-stream
         actions

GENERAL OPTIONS
       Options with well-known behavior.

       • remote.name

       • audio.channels

       • audio.position

       • media.name

       • node.latency

       • node.name

       • node.description

       • node.group

       • node.virtual

       • media.class

STREAM OPTIONS
       • audio.position:  Set  the  stream  channel map. By default this is the
         same channel map as the combine stream.

       • combine.audio.position: map the combine audio positions to the  stream
         positions.  combine  input  channels  are  mapped one-by-one to stream
         output channels.

EXAMPLE CONFIGURATION
       # ~/.config/pipewire/pipewire.conf.d/my-combine-stream-1.conf

       context.modules = [
       {   name = libpipewire-module-combine-stream
           args = {
               combine.mode = sink
               node.name = "combine_sink"
               node.description = "My Combine Sink"
               combine.latency-compensate = false
               combine.props = {
                   audio.position = [ FL FR ]
               }
               stream.props = {
               }
               stream.rules = [
                   {
                       matches = [
                           # any of the items in matches needs to match, if one does,
                           # actions are emitted.
                           {
                               # all keys must match the value. ! negates. ~ starts regex.
                               #node.name = "~alsa_input.*"
                               media.class = "Audio/Sink"
                           }
                       ]
                       actions = {
                           create-stream = {
                               #combine.audio.position = [ FL FR ]
                               #audio.position = [ FL FR ]
                           }
                       }
                   }
               ]
           }
       }
       ]

       Below is an example configuration that makes a 5.1  virtual  audio  sink
       from 3 separate stereo sinks.

       # ~/.config/pipewire/pipewire.conf.d/my-combine-stream-2.conf

       context.modules = [
       {   name = libpipewire-module-combine-stream
           args = {
               combine.mode = sink
               node.name = "combine_sink_5_1"
               node.description = "My 5.1 Combine Sink"
               combine.latency-compensate = false
               combine.props = {
                   audio.position = [ FL FR FC LFE SL SR ]
               }
               stream.props = {
                       stream.dont-remix = true      # link matching channels without remixing
               }
               stream.rules = [
                   {   matches = [
                           {   media.class = "Audio/Sink"
                               node.name = "alsa_output.usb-Topping_E30-00.analog-stereo"
                           } ]
                       actions = { create-stream = {
                               combine.audio.position = [ FL FR ]
                               audio.position = [ FL FR ]
                       } } }
                   {   matches = [
                           {   media.class = "Audio/Sink"
                               node.name = "alsa_output.usb-BEHRINGER_UMC404HD_192k-00.pro-output-0"
                           } ]
                       actions = { create-stream = {
                               combine.audio.position = [ FC LFE ]
                               audio.position = [ AUX0 AUX1 ]
                       } } }
                   {   matches = [
                           {   media.class = "Audio/Sink"
                               node.name = "alsa_output.pci-0000_00_1b.0.analog-stereo"
                           } ]
                       actions = { create-stream = {
                               combine.audio.position = [ SL SR ]
                               audio.position = [ FL FR ]
                       } } }
               ]
           }
       }
       ]

       Below  is an example configuration that makes a 4.0 virtual audio source
       from 2 separate stereo sources.

       # ~/.config/pipewire/pipewire.conf.d/my-combine-stream-3.conf

       context.modules = [
       {   name = libpipewire-module-combine-stream
           args = {
               combine.mode = source
               node.name = "combine_source_4_0"
               node.description = "My 4.0 Combine Source"
               combine.props = {
                   audio.position = [ FL FR SL SR ]
               }
               stream.props = {
                       stream.dont-remix = true
               }
               stream.rules = [
                   {   matches = [
                           {   media.class = "Audio/Source"
                               node.name = "alsa_input.usb-046d_HD_Pro_Webcam_C920_09D53E1F-02.analog-stereo"
                           } ]
                       actions = { create-stream = {
                               audio.position = [ FL FR ]
                               combine.audio.position = [ FL FR ]
                       } } }
                   {   matches = [
                           {   media.class = "Audio/Source"
                               node.name = "alsa_input.usb-046d_0821_9534DE90-00.analog-stereo"
                           } ]
                       actions = { create-stream = {
                               audio.position = [ FL FR ]
                               combine.audio.position = [ SL SR ]
                       } } }
               ]
           }
       }
       ]

PipeWire                             1.4.2              libpipew...ne-stream(7)

Generated by dwww version 1.16 on Sat Oct 3 11:23:09 CEST 2026.