libpipewire-module-combine-stream - Man Page

Combine Stream

Description

The combine stream can make:

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

General Options

Options with well-known behavior​.

Stream Options

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 ]
                } } }
        ]
    }
}
]

Info

1.6.9 PipeWire