# ALSA monitor config file for PipeWire version 0.4.1 #
#
# Copy and edit this file in /etc/pipewire/media-session.d/
# for system-wide changes or in
# ~/.config/pipewire/media-session.d/ for local changes.

properties = {
    # Create a JACK device. This is not enabled by default because
    # it requires that the PipeWire JACK replacement libraries are
    # not used by the session manager, in order to be able to
    # connect to the real JACK server.
    #alsa.jack-device = false

    # Reserve devices.
    #alsa.reserve = true
}

rules = [
    # An array of matches/actions to evaluate.
    {
        # Rules for matching a device or node. Each dictionary in this array
        # specifies the property to match as key and a string or regex match
        # as value. A successful match requires all dictionary keys (i.e.
        # properties) to match.
        #
        # Actions are are executed for the object if at least one successful
        # match exists.
        #
        # Regular expressions are prefixed with the ~ (tilde) character,
        # otherwise a standard string comparison is used.
        # The special value "null" matches against empty properties.
        matches = [
            {
                # This matches all cards. These are regular expressions
                # so "." matches one character and ".*" matches many.
                device.name = "~alsa_card.*"
            }
        ]
        actions = {
            # Actions can update properties on the matched object.
            update-props = {
                # Use ALSA-Card-Profile devices. They use UCM or
                # the profile configuration to configure the device
                # and mixer settings.
                api.alsa.use-acp = true

                # Use UCM instead of profile when available. Can be
                # disabled to skip trying to use the UCM profile.
                #api.alsa.use-ucm = true

                # Don't use the hardware mixer for volume control. It
                # will only use software volume. The mixer is still used
                # to mute unused paths based on the selected port.
                api.alsa.soft-mixer = true

                # Ignore decibel settings of the driver. Can be used to
                # work around buggy drivers that report wrong values.
                #api.alsa.ignore-dB = false

                # The profile set to use for the device. Usually this is
                # "default.conf" but can be changed with a udev rule
                # or here.
                #device.profile-set = "profileset-name.conf"

                # The default active profile. Is by default set to "Off".
                #device.profile = "default profile name"

                # Automatically select the best profile. This is the
                # highest priority available profile. This is disabled
                # here and instead implemented in the session manager
                # where it can save and load previous preferences.
                api.acp.auto-profile = false

                # Automatically switch to the highest priority available
                # port. This is disabled here and implemented in the
                # session manager instead.
                api.acp.auto-port = false

                # Other properties can be set here.
                #device.nick = "My Device"
            }
        }
    }
    {
        matches = [
            {
                # Matches all sources. These are regular expressions
                # so "." matches one character and ".*" matches many.
                node.name = "~alsa_input.*"
            }
            {
                # Matches all sinks.
                node.name = "~alsa_output.*"
            }
        ]
        actions = {
            update-props = {
                #node.nick                       = "My Node"
                #node.nick                       = null
                #priority.driver                 = 100
                #priority.session                = 100
                node.pause-on-idle               = false
                #resample.quality                = 4
                #channelmix.normalize            = false
                #channelmix.mix-lfe              = false
                #audio.channels                  = 2
                #audio.format                    = "S16LE"
                #audio.rate                      = 44100
                #audio.position                  = "FL,FR"
                #session.suspend-timeout-seconds = 5            # 0 disables suspend
                #monitor.channel-volumes         = false

                #latency.internal.rate = 0            # internal latency in samples
                #latency.internal.ns   = 0            # internal latency in nanoseconds

                #api.alsa.period-size   = 1024
                api.alsa.headroom      = 1024
                #api.alsa.start-delay   = 0
                #api.alsa.disable-mmap  = false
                #api.alsa.disable-batch = false
                #api.alsa.use-chmap     = false
                #iec958.codecs          = [ PCM DTS AC3 MPEG MPEG2-AAC EAC3 TrueHD DTS-HD ]
            }
        }
    }
]
