Provided by: pipewire-bin_1.2.7-1ubuntu5.1_amd64 bug

NAME

       pipewire-props - PipeWire object property reference.

DESCRIPTION

       PipeWire describes and configures audio and video elements with objects of the following main types:

       Node
           Audio or video sink/source endpoint

       Device
           Sound cards, bluetooth devices, cameras, etc. May have multiple nodes.

       Monitor
           Finding devices and handling hotplugging

       Port
           Audio/video endpoint in a node

       Link
           Connection between ports, that transporting audio/video between them.

       Client
           Application connected to PipeWire.

       All objects have properties ('props'), most of which can be set in configuration files or at runtime when
       the object is created.

       Some of the properties are 'common properties' (for example node.description) and can be set on all
       objects of the given type. Other properties control settings of a specific kinds of device or node (ALSA,
       Bluetooth, ...), and have meaning only for those objects.

       Usually, all the properties are configured in the session manager configuration. For how to configure
       them, see the session manager documentation. In minimal PipeWire setups without a session manager, they
       can be configured via context.objects in pipewire.conf(5).

       See also
           WirePlumber configuration

COMMON DEVICE PROPERTIES

       These are common properties for devices.

       device.name # string
           A (unique) name for the device. It can be used by command-line and other tools to identify the
           device.

       device.param.PARAM = { ... } # JSON
           Set value of a device Param to a JSON value when the device is loaded. This works similarly as pw-
           cli(1) set-param command. The PARAM should be replaced with the name of the Param to set, ie. for
           example device.Param.Props = { ... } to set Props.

       device.plugged # integer

           when the device was created.

           As a uint64 in nanoseconds.

       device.nick # string

           a short device nickname

       device.description # string

           localized human readable device one-line description.

           Ex. 'Foobar USB Headset'

       device.serial # string

           Serial number if applicable.

       device.vendor.id # integer

           vendor ID if applicable

       device.vendor.name # string

           vendor name if applicable

       device.product.id # integer

           product name if applicable

       device.product.name # string

           product ID if applicable

       device.class # string

           device class

       device.form-factor # string

           form factor if applicable.

           One of 'internal', 'speaker', 'handset', 'tv', 'webcam', 'microphone', 'headset', 'headphone',
           'hands-free', 'car', 'hifi', 'computer', 'portable'

       device.icon # string

           icon for the device.

           A base64 blob containing PNG image data

       device.icon-name # string

           an XDG icon name for the device.

           Ex. 'sound-card-speakers-usb'

       device.intended-roles # string

           intended use.

           A space separated list of roles (see media.role) this device is particularly well suited for, due to
           latency, quality or form factor.

       device.disabled = false # boolean
           Disable the creation of this device in session manager.

       There are other common device.* properties for technical purposes and not usually user-configurable.

       See also
           Key Names in the API documentation for a full list.

COMMON NODE PROPERTIES

       The properties here apply to general audio or video input/output streams, and other nodes such as sinks
       or sources corresponding to real or virtual devices.

   Identifying Properties
       These contain properties to identify the node or to display the node in a GUI application.

       node.name
           A (unique) name for the node. This is usually set on sink and sources to identify them as targets for
           linking by the session manager.

       node.description
           A human readable description of the node or stream.

       media.name
           A user readable media name, usually the artist and title. These are usually shown in user facing
           applications to inform the user about the current playing media.

       media.title
           A user readable stream title.

       media.artist
           A user readable stream artist

       media.copyright
           User readable stream copyright information

       media.software
           User readable stream generator software information

       media.language
           Stream language in POSIX format. Ex: en_GB

       media.filename
           File name for the stream

       media.icon
           Icon for the media, a base64 blob with PNG image data

       media.icon-name
           An XDG icon name for the media. Ex: audio-x-mp3

       media.comment
           Extra stream comment

       media.date
           Date of the media

       media.format
           User readable stream format information

       object.linger = false
           If the object should outlive its creator.

       device.id
           ID of the device the node belongs to.

   Classifying Properties
       The classifying properties of a node are use for routing the signal to its destination and for
       configuring the settings.

       media.type
           The media type contains a broad category of the media that is being processed by the node. Possible
           values include 'Audio', 'Video', 'Midi'

       media.category
           What kind of processing is done with the media. Possible values include:

           • Playback: media playback.

           • Capture: media capture.

           • Duplex: media capture and playback or media processing in general.

           • Monitor: a media monitor application. Does not actively change media data but monitors activity.

           • Manager: Will manage the media graph.

       media.role
           The Use case of the media. Possible values include:

           • Movie: Movie playback with audio and video.

           • Music: Music listening.

           • Camera: Recording video from a camera.

           • Screen: Recording or sharing the desktop screen.

           • Communication: VOIP or other video chat application.

           • Game: Game.

           • Notification: System notification sounds.

           • DSP: Audio or Video filters and effect processing.

           • Production: Professional audio processing and production.

           • Accessibility: Audio and Visual aid for accessibility.

           • Test: Test program.

       media.class
           The media class is to classify the stream function. Possible values include:

           • Video/Source: a producer of video, like a webcam.

           • Video/Sink: a consumer of video, like a display window.

           • Audio/Source: a source of audio samples like a microphone.

           • Audio/Sink: a sink for audio samples, like an audio card.

           • Audio/Duplex: a node that is both a sink and a source.

           • Stream/Output/Audio: a playback stream.

           • Stream/Input/Audio: a capture stream.

           The  session  manager  assigns  special meaning to the nodes based on the media.class. Sink or Source
           classes are used as targets for Stream classes, etc..

   Scheduling Properties
       node.latency = 1024/48000
           Sets a suggested latency on the node as a fraction. This is just a suggestion, the graph will try  to
           configure  this  latency  or less for the graph. It is however possible that the graph is forced to a
           higher latency.

       node.lock-quantum = false
           When this node is active, the quantum of the graph is locked and not allowed to change automatically.
           It can still be changed forcibly with metadata or when a node forces a quantum.

           JACK clients use this property to avoid unexpected quantum changes.

       node.force-quantum = INTEGER
           While the node is active, force a quantum in the graph. The last  node  to  be  activated  with  this
           property wins.

           A value of 0 unforces the quantum.

       node.rate = RATE
           Suggest  a  rate  (samplerate)  for  the graph. The suggested rate will only be applied when doing so
           would not cause interruptions (devices are idle) and when the rate is in the list of allowed rates in
           the server.

       node.lock-rate = false
           When the node is active, the rate of the graph will not change automatically. It is still possible to
           force a rate change with metadata or with a node property.

       node.force-rate = RATE
           When the node is active, force a specific sample rate on the graph. The last node  to  activate  with
           this property wins.

           A RATE of 0 means to force the rate in node.rate denominator.

       node.always-process = false
           When  the node is active, it will always be joined with a driver node, even when nothing is linked to
           the node. Setting this property to true also implies node.want-driver = true.

           This is the default for JACK nodes, that always need their process callback called.

       node.want-driver = true
           The node wants to be linked to a driver so that it can start processing.  This  is  the  default  for
           streams and filters since 0.3.51. Nodes that are not linked to anything will still be set to the idle
           state, unless node.always-process is set to true.

       node.pause-on-idle = false

       node.suspend-on-idle = false
           When  the  node  is  not linked anymore, it becomes idle. Normally idle nodes keep processing and are
           suspended by the session manager after some timeout. It is possible to immediately pause a node  when
           idle with this property.

           When  the  session  manager  does  not  suspend  nodes  (or  when  there  is no session manager), the
           node.suspend-on-idle property can be used instead.

       node.loop.name = null

       node.loop.class = data.rt
           Add the node to a specific loop name or loop class. By default the node is added to the data.rt  loop
           class. You can make more specific data loops and then assign the nodes to those.

           Other  well  known  names  are  main-loop.0  and  the  main  node.loop.class which runs the node data
           processing in the main loop.

       priority.driver # integer
           The priority of choosing this device as the driver in the graph. The  driver  is  selected  from  all
           linked devices by selecting the device with the highest priority.

           Normally,  the  session  manager assigns higher priority to sources so that they become the driver in
           the graph. The reason for this is that adaptive resampling should be done on the  sinks  rather  than
           the source to avoid signal distortion when capturing audio.

       clock.name # string
           The  name of the clock. This name is auto generated from the card index and stream direction. Devices
           with the same clock name will not use a resampler to align the clocks.  This  can  be  used  to  link
           devices together with a shared word clock.

           In  Pro  Audio  mode, nodes from the same device are assumed to have the same clock and no resampling
           will happen when linked together. So, linking a capture port to a playback  port  will  not  use  any
           adaptive resampling in Pro Audio mode.

           In  Non Pro Audio profile, no such assumption is made and adaptive resampling is done in all cases by
           default. This can also be disabled by setting the same clock.name on the nodes.

   Session Manager Properties
       node.autoconnect = true
           Instructs the session manager to automatically connect this node to some other node, usually  a  sink
           or source.

       node.exclusive = false
           If this node wants to be linked exclusively to the sink/source.

       node.target = <node.name|object.id>
           Where this node should be linked to. This can be a node.name or an object.id of a node. This property
           is  deprecated,  the  target.object  property  should  be  used  instead,  which uses the more unique
           object.serial as a possible target.

       target.object = <node.name|object.serial>
           Where the node should link to, this can be a node.name or an object.serial.

       node.dont-reconnect = false
           When the node has a target configured and the target is destroyed, destroy the  node  as  well.  This
           property also inhibits that the node is moved to another sink/source.

           Note  that  if  a  stream  should  appear/disappear  in  sync  with  the  target,  a  session manager
           (WirePlumber) script should be written instead.

       node.passive = false
           This is a passive node and so it should not keep sinks/sources busy. This property makes the  session
           manager  create  passive  links  to the sink/sources. If the node is not otherwise linked (via a non-
           passive link), the node and the sink it is linked to are idle (and eventually suspended).

           This is used for filter nodes that sit in front of sinks/sources and need to  suspend  together  with
           the sink/source.

       node.link-group = ID
           Add  the node to a certain link group. Nodes from the same link group are not automatically linked to
           each other by the session manager. And example is a coupled stream where you don't want the output to
           link to the input streams, making a useless loop.

       stream.dont-remix = false
           Instruct the session manager to not remix the channels of  a  stream.  Normally  the  stream  channel
           configuration is changed to match the sink/source it is connected to. With this property set to true,
           the  stream will keep its original channel layout and the session manager will link matching channels
           with the sink.

       priority.session # integer
           The priority for selecting this node as the default source or sink.

   Format Properties
       Streams and also most device nodes can be configured in a certain format with properties.

       audio.rate = RATE
           Forces a samplerate on the node.

       audio.channels = INTEGER
           The number of audio channels to use. Must be a value between 1 and 64.

       audio.format = FORMAT
           Forces an audio format on the node. This is the format used internally in the node because the  graph
           processing format is always float 32.

           Valid formats include: S16, S32, F32, F64, S16LE, S16BE, ...

       audio.allowed-rates
           An array of allowed samplerates for the node. ex. '[ 44100 48000 ]'

   Other Properties
       node.param.PARAM = { ... } # JSON
           Set  value  of  a  node  Param to a JSON value when the device is loaded. This works similarly as pw-
           cli(1) set-param command. The PARAM should be replaced with the name of the Param  to  set,  ie.  for
           example node.param.Props = { ... } to set Props.

       node.disabled = false # boolean
           Disable the creation of this node in session manager.

AUDIO ADAPTER PROPERTIES

       Most  audio  nodes (ALSA, Bluetooth, audio streams from applications, ...) have common properties for the
       audio adapter. The adapter performs sample format, sample rate and channel mixing operations.

       All properties listed below are node properties.

   Merger Parameters
       The merger is used as the input for a sink device node or a capture stream. It takes the various channels
       and merges them into a single stream for further processing.

       The merger will also provide the monitor ports of the input channels and can apply a software  volume  on
       the monitor signal.

       monitor.channel-volumes = false
           The  volume of the input channels is applied to the volume of the monitor ports. Normally the monitor
           ports expose the raw unmodified signal on the input ports.

   Resampler Parameters
       Source, sinks, capture and playback streams contain a high quality adaptive resampler. It uses sinc based
       resampling with linear interpolation of filter banks to perform arbitrary resample factors. The resampler
       is activated in the following cases:

       • The hardware of a device node does not support the graph samplerate. Resampling  will  occur  from  the
         graph samplerate to the hardware samplerate.

       • The  hardware  clock  of  a  device  does  not  run  at  the same speed as the graph clock and adaptive
         resampling is required to match the clocks.

       • A stream does not have the same samplerate as the graph and needs to be resampled.

       • An application wants to activate adaptive resampling in a stream to make it match some other clock.

       PipeWire performs most of the sample conversions and resampling in the client (Or  in  the  case  of  the
       PulseAudio  server,  in  the  pipewire-pulse  server  that  creates  the  streams).  This ensures all the
       conversions are offloaded to the clients and the server can deal with one single format  for  performance
       reasons.

       Below is an explanation of the options that can be tuned in the sample converter.

       resample.quality = 4
           The quality of the resampler. from 0 to 14, the default is 4.

           Increasing  the  quality will result in better cutoff and less aliasing at the expense of (much) more
           CPU consumption. The default quality of 4 has been selected as a good compromise between quality  and
           performance with no artifacts that are well below the audible range.

           See Infinite Wave for a comparison of the performance.

       resample.disable = false
           Disable  the  resampler  entirely.  The  node  will only be able to negotiate with the graph when the
           samplerates are compatible.

   Channel Mixer Parameters
       Source, sinks, capture and playback streams can apply channel mixing on the incoming signal.

       Normally the channel mixer is not used for devices, the device channels are usually exposed as they  are.
       This policy is usually enforced by the session manager, so we refer to its documentation there.

       Playback and capture streams are usually configured to the channel layout of the sink/source they connect
       to and will thus perform channel mixing.

       The  channel mixer also implements a software volume. This volume adjustment is performed on the original
       channel layout. ex: A stereo playback stream that is up-mixed to  5.1  has  2  a  left  an  right  volume
       control.

       channelmix.disable = false
           Disables  the  channel  mixer  completely.  The  stream  will  only  be  able  to  link to compatible
           sources/sinks with the exact same channel layout.

       channelmix.min-volume = 0.0

       channelmix.max-volume = 10.0
           Gives the min and max volume values allowed. Any volume that is set will be clamped to these values.

       channelmix.normalize = false
           Makes sure that during such mixing & resampling original 0 dB level is preserved, so  nothing  sounds
           wildly quieter/louder.

           While  this  options  prevents  clipping,  it  can in some cases produce too low volume. Increase the
           volume in that case or disable normalization.

       channelmix.lock-volumes = false
           Completely disable volume or mute changes. Defaults to false.

       channelmix.mix-lfe = true
           Mixes the low frequency effect channel into the front center or stereo pair. This might  enhance  the
           dynamic range of the signal if there is no subwoofer and the speakers can reproduce the low frequency
           signal.

       channelmix.upmix = true
           Enables  up-mixing  of  the front center (FC) when the target has a FC channel. The sum of the stereo
           channels is used and an optional lowpass filter can be used (see channelmix.fc-cutoff).

           Also enabled up-mixing of LFE when channelmix.lfe-cutoff is set to something  else  than  0  and  the
           target has an LFE channel. The LFE channel is produced by adding the stereo channels.

           If  channelmix.upmix  is true, the up-mixing of the rear channels is also enabled and controlled with
           the channelmix-upmix-method property.

       channelmix.upmix-method = psd
           3 methods are provided to produce the rear channels in a surround sound:

           1.  none. No rear channels are produced.

           2.  simple. Front channels are copied to the rear. This is fast but can produce phasing effects.

           3.  psd. The rear channels as produced from the front left and right ambient  sound  (the  difference
               between  the channels). A delay and optional phase shift are added to the rear signal to make the
               sound bigger.

       channelmix.lfe-cutoff = 150
           Apply a lowpass filter to the low frequency effects. The value is expressed in Hz. Typical subwoofers
           have a cutoff at around 150 and 200. The default value of 0 disables the feature.

       channelmix.fc-cutoff = 12000
           Apply a lowpass filter to the front center frequency. The value is expressed in Hz.

           Since the front center contains the dialogs, a typical cutoff frequency is 12000 Hz.

           This option is only active when the up-mix is enabled.

       channelmix.rear-delay = 12.0
           Apply a delay in milliseconds when up-mixing the rear channels. This improves specialization  of  the
           sound. A typical delay of 12 milliseconds is the default.

           This is only active when the psd up-mix method is used.

       channelmix.stereo-widen = 0.0
           Subtracts  some  of  the front center signal from the stereo channels. This moves the dialogs more to
           the center speaker and leaves the ambient sound in the stereo channels.

           This is only active when up-mix is enabled and a Front Center channel is mixed.

       channelmix.hilbert-taps = 0
           This option will apply a 90 degree phase shift to the rear channels to improve  specialization.  Taps
           needs  to  be  between  15  and  255 with more accurate results (and more CPU consumption) for higher
           values.

           This is only active when the psd up-mix method is used.

       dither.noise = 0
           This option will add N bits of random data to the signal. When no  dither.method  is  specified,  the
           random  data  will flip between [-(1<<(N-1)), 0] every 1024 samples. With a dither.method, the dither
           noise is amplified with 1<<(N-1) bits.

           This can be used to keep some amplifiers alive during silent periods. One or two  bits  of  noise  is
           usually  enough,  otherwise  the  noise  will  become  audible.  This  is  usually used together with
           session.suspend-timeout-seconds to disable suspend in the session manager.

           Note that PipeWire uses floating point operations with 24  bits  precission  for  all  of  the  audio
           processing.  Conversion  to  24  bits  integer  sample  formats is lossless and conversion to 32 bits
           integer sample formats are simply padded with 0 bits at the end. This means that the dither noise  is
           always only in the 24 most significant bits.

       dither.method = none
           Optional dithering can be done on the quantized output signal.

           There are 6 modes available:

           1.  none No dithering is done.

           2.  rectangular  Dithering with a rectangular noise distribution. This adds random bits in the [-0.5,
               0.5] range to the signal with even distribution.

           3.  triangular Dithering with a triangular noise distribution. This add random  bits  in  the  [-1.0,
               1.0] range to the signal with triangular distribution around 0.0.

           4.  triangular-hf Dithering with a sloped triangular noise distribution.

           5.  wannamaker3  Additional noise shaping is performed on the sloped triangular dithering to move the
               noise to the more inaudible range. This is using  the  'F-Weighted'  noise  filter  described  by
               Wannamaker.

           6.  shaped5  Additional  noise  shaping is performed on the triangular dithering to move the noise to
               the more inaudible range. This is using the Lipshitz filter.

           Dithering is only useful for conversion to a format with less than  24  bits  and  will  be  disabled
           otherwise.

   Debug Parameters
       debug.wav-path = ''
           Make the stream to also write the raw samples to a WAV file for debugging purposes.

   Other Parameters
       These control low-level technical features:

       clock.quantum-limit
           See pipewire.conf(5)

       resample.peaks = false # boolean
           Instead  of  actually  resampling,  produce  peak amplitude values as output. This is used for volume
           monitoring, where it is set as a property of the 'recording' stream.

       resample.prefill = false # boolean
           Prefill resampler buffers with silence. This affects the initial samples produced by the resampler.

       adapter.auto-port-config = null # JSON
           If specified, configure the ports of the node when it is created, instead  of  leaving  that  to  the
           session manager to do. This is useful (only) for minimal configurations without a session manager.

           Value is SPA JSON of the form:

           {
               mode = "none",          # "none", "passthrough", "convert", "dsp"
               monitor = false,        # boolean
               control = false,        # boolean
               position = "preserve"   # "unknown", "aux", "preserve"
           }

            See spa_param_port_config for the meaning.

ALSA PROPERTIES

   Monitor properties
       alsa.use-acp # boolean
           Use ALSA Card Profiles (ACP) for device configuration.

       alsa.udev.expose-busy # boolean
           Expose  the  ALSA  card even if it is busy/in use. Default false. This can be useful when some of the
           PCMs are in use by other applications but the other free PCMs should still be exposed.

   Device properties
       api.alsa.path # string
           ALSA device path as can be used in snd_pcm_open() and snd_ctl_open().

       api.alsa.use-ucm = true # boolean
           When ACP is enabled and a UCM configuration is available for a device, by default it is used  instead
           of the ACP profiles. This option allows you to disable this and use the ACP profiles instead.

           This option does nothing if api.alsa.use-acp is set to false.

       api.alsa.soft-mixer = false # boolean
           Setting  this  option to true will disable the hardware mixer for volume control and mute. All volume
           handling will then use software volume and mute, leaving the hardware mixer untouched.  The  hardware
           mixer will still be used to mute unused audio paths in the device.

       api.alsa.ignore-dB = false # boolean
           Setting  this  option to true will ignore the decibel setting configured by the driver. Use this when
           the driver reports wrong settings.

       device.profile-set # string
           This option can be used to select a  custom  ACP  profile-set  name  for  the  device.  This  can  be
           configured  in  UDev  rules,  but it can also be specified here. The default is to use 'default.conf'
           unless there is a matching udev rule.

       device.profile # string
           The initial active profile name. The default is to start from the 'Off' profile and then let  session
           manager select the best profile based on its policy.

       api.acp.auto-profile = true # boolean
           Automatically  select  the best profile for the device. The session manager usually disables this, as
           it handles this task instead. This can be  enabled  in  custom  configurations  without  the  session
           manager handling this.

       api.acp.auto-port = true # boolean
           Automatically  select  the  highest priority port that is available ('port' is a PulseAudio/ACP term,
           the equivalent of a 'Route' in PipeWire). The session manager usually disables this,  as  it  handles
           this  task instead. This can be enabled in custom configurations without the session manager handling
           this.

       api.acp.probe-rate # integer
           Sets the samplerate used for probing the ALSA devices and collecting the profiles and ports.

       api.acp.pro-channels # integer
           Sets the number of channels to use when probing the 'Pro Audio' profile. Normally, the maximum amount
           of channels will be used but with this setting this can be reduced, which can make it possible to use
           other samplerates on some devices.

   Node properties
       audio.channels # integer
           The number of audio channels to open the device with. Defaults depends on the profile of the device.

       audio.rate # integer
           The audio rate to open the device with. Default is 0, which means to open the device with a  rate  as
           close to the graph rate as possible.

       audio.format # string
           The  audio  format to open the device in. By default this is 'UNKNOWN', which will open the device in
           the best possible bits (32/24/16/8..). You can force a format like S16_LE or S32_LE.

       audio.position # JSON array of strings
           The audio position of the channels in the device. This is auto detected based on the profile. You can
           configure an array of channel positions, like '[ FL, FR ]'.

       audio.allowed-rates # JSON array of integers
           The allowed audio rates to open the device with. Default is '[ ]', which  means  the  device  can  be
           opened in any supported rate.

           Only  rates from the array will be used to open the device. When the graph is running with a rate not
           listed in the allowed-rates, the resampler will be used to resample to the nearest allowed rate.

       api.alsa.period-size # integer
           The period size to open the device in. By default this is 0,  which  will  open  the  device  in  the
           default period size to minimize latency.

       api.alsa.period-num # integer
           The  amount  of  periods  to  use  in the device. By default this is 0, which means to use as many as
           possible.

       api.alsa.headroom # integer
           The amount of extra space to keep in  the  ringbuffer.  The  default  is  0.  Higher  values  can  be
           configured when the device read and write pointers are not accurately reported.

       api.alsa.start-delay = 0 # integer
           Some  devices  need  some  time  before they can report accurate hardware pointer positions. In those
           cases, an extra start delay can be added to compensate for this startup delay. This sets the  startup
           delay in samples.

       api.alsa.disable-mmap = false # boolean
           Disable  mmap operation of the device and use the ALSA read/write API instead. Default is false, mmap
           is preferred.

       api.alsa.disable-batch # boolean
           Ignore the ALSA batch flag. If the batch flag is set, ALSA will need an extra period  to  update  the
           read/write pointers. Ignore this flag from ALSA can reduce the latency. Default is false.

       api.alsa.use-chmap # boolean
           Use  the  driver  provided  channel map. Default is true when using UCM, false otherwise because many
           driver don't report this correctly.

       api.alsa.multi-rate # boolean
           Allow devices from the same card to be opened in multiple sample rates. Default is true.  Some  older
           drivers  did  not properly advertise the capabilities of the device and only really supported opening
           the device in one rate.

       api.alsa.htimestamp = false # boolean
           Use ALSA htimestamps in scheduling, instead of the  system  clock.  Some  ALSA  drivers  produce  bad
           timestamps,  so  this  is not enabled by default and will be disabled at runtime if it looks like the
           ALSA timestamps are bad.

       api.alsa.htimestamp.max-errors # integer
           Specify the number of consecutive errors before htimestamp is  disabled.  Setting  this  to  0  makes
           htimestamp never get disabled.

       api.alsa.disable-tsched = false # boolean
           Disable  timer-based  scheduling,  and  use  IRQ for scheduling instead. The 'Pro Audio' profile will
           usually enable this setting, if it is expected it works on the hardware.

       api.alsa.auto-link = false # boolean
           Link follower PCM devices to the driver PCM device when using IRQ-based scheduling. The  'Pro  Audio'
           profile will usually enable this setting, if it is expected it works on the hardware.

       latency.internal.rate # integer
           Static set the device systemic latency, in samples at playback rate.

       latency.internal.ns # integer
           Static set the device systemic latency, in nanoseconds.

       api.alsa.path # string
           UNDOCUMENTED

       api.alsa.open.ucm # boolean
           Open device using UCM.

       api.alsa.bind-ctls # boolean
           UNDOCUMENTED

       iec958.codecs # JSON array of string
           Enable  only  specific  IEC958 codecs. This can be used to disable some codecs the hardware supports.
           Available values: PCM, AC3, DTS, MPEG, MPEG2-AAC, EAC3, TRUEHD, DTSHD

BLUETOOTH PROPERTIES

   Monitor properties
       The following are settings for the Bluetooth device monitor, not device or node properties:

       bluez5.roles = [ a2dp_sink a2dp_source bap_sink bap_source bap_bcast_sink bap_bcast_source hfp_hf  hfp_ag
       ] # JSON array of string
           Enabled roles.

           Currently  some headsets (Sony WH-1000XM3) are not working with both hsp_ag and hfp_ag enabled, so by
           default we enable only HFP.

           Supported roles:

           • hsp_hs (HSP Headset),

           • hsp_ag (HSP Audio Gateway),

           • hfp_hf (HFP Hands-Free),

           • hfp_ag (HFP Audio Gateway)

           • a2dp_sink (A2DP Audio Sink)

           • a2dp_source (A2DP Audio Source)

           • bap_sink (LE Audio Basic Audio Profile Sink)

           • bap_source (LE Audio Basic Audio Profile Source)

           • bap_bcast_sink (LE Audio Basic Audio Profile Broadcast Sink)

           • bap_bcast_source (LE Audio Basic Audio Profile Broadcast Source)

       bluez5.codecs # JSON array of string
           Enabled A2DP codecs (default: all). Possible  values:  sbc,  sbc_xq,  aac,  aac_eld,  aptx,  aptx_hd,
           aptx_ll,  aptx_ll_duplex,  faststream,  faststream_duplex,  lc3plus_h3,  ldac,  opus_05,  opus_05_51,
           opus_05_71, opus_05_duplex, opus_05_pro, opus_g, lc3.

       bluez5.default.rate # integer
           Default audio rate.

       bluez5.default.channels # integer
           Default audio channels.

       bluez5.hfphsp-backend # integer
           HFP/HSP backend (default: native). Available values: any, none, hsphfpd, ofono, native

       bluez5.hfphsp-backend-native-modem # string

       bluez5.dummy-avrcp player # boolean
           Register dummy AVRCP player. Some devices have wrongly functioning volume  or  playback  controls  if
           this is not enabled. Default: false

       bluez5.enable-sbc-xq # boolean
           Override device quirk list and enable SBC-XQ for devices for which it is disabled.

       bluez5.enable-msbc # boolean
           Override device quirk list and enable MSBC for devices for which it is disabled.

       bluez5.enable-hw-volume # boolean
           Override device quirk list and enable hardware volume fo devices for which it is disabled.

       bluez5.hw-offload-sco # boolean
           HFP/HSP hardware offload SCO support (default: false).

           This  feature  requires  a  custom  configuration that routes SCO audio to ALSA nodes, in a platform-
           specific way. See tests/examples/bt-pinephone.lua in WirePlumber for an example. Do not  enable  this
           setting if you don't know what all this means, as it won't work.

       bluez5.a2dp.opus.pro.channels = 3 # integer
           PipeWire Opus Pro audio profile channel count.

       bluez5.a2dp.opus.pro.coupled-streams = 1 # integer
           PipeWire Opus Pro audio profile coupled stream count.

       bluez5.a2dp.opus.pro.locations = 'FL,FR,LFE' # string
           PipeWire Opus Pro audio profile audio channel locations.

       bluez5.a2dp.opus.pro.max-bitrate = 600000 # integer
           PipeWire Opus Pro audio profile max bitrate.

       bluez5.a2dp.opus.pro.frame-dms = 50 # integer
           PipeWire Opus Pro audio profile frame duration (1/10 ms).

       bluez5.a2dp.opus.pro.bidi.channels = 1 # integer
           PipeWire Opus Pro audio profile duplex channels.

       bluez5.a2dp.opus.pro.bidi.coupled-streams = 0 # integer
           PipeWire Opus Pro audio profile duplex coupled stream count.

       bluez5.a2dp.opus.pro.bidi.locations = 'FC' # string
           PipeWire Opus Pro audio profile duplex coupled channel locations.

       bluez5.a2dp.opus.pro.bidi.max-bitrate = 160000 # integer
           PipeWire Opus Pro audio profile duplex max bitrate.

       bluez5.a2dp.opus.pro.bidi.frame-dms = 400 # integer
           PipeWire Opus Pro audio profile duplex frame duration (1/10 ms).

       bluez5.bcast_source.config = [] # JSON
           Example:

           bluez5.bcast_source.config = [
             {
               "broadcast_code": "Børne House",
               "encryption: false,
               "bis": [
                 { # BIS configuration
                   "qos_preset": "16_2_1", # QOS preset name from table Table 6.4 from BAP_v1.0.1.
                   "audio_channel_allocation": 1, # audio channel allocation configuration for the BIS
                   "metadata": [ # metadata configurations for the BIS
                      { "type": 1, "value": [ 1, 1 ] }
                   ]
                 }
               ]
             }
           ]

   Device properties
       bluez5.auto-connect # boolean
           Auto-connect devices on start up. Disabled by default if the property is not specified.

       bluez5.hw-volume = [ hfp_ag hsp_ag a2dp_source ] # JSON array of string
           Profiles for which to enable hardware volume control.

       bluez5.profile # string
           Initial device profile. This usually has no effect as the session manager overrides it.

       bluez5.a2dp.ldac.quality = 'auto' # string
           LDAC encoding quality Available values:

           • auto (Adaptive Bitrate, default)

           • hq (High Quality, 990/909kbps)

           • sq (Standard Quality, 660/606kbps)

           • mq (Mobile use Quality, 330/303kbps)

       bluez5.a2dp.aac.bitratemode = 0 # integer
           AAC variable bitrate mode. Available values: 0 (cbr, default), 1-5 (quality level)

       bluez5.a2dp.opus.pro.application = 'audio' # string
           PipeWire Opus Pro Audio encoding mode: audio, voip, lowdelay

       bluez5.a2dp.opus.pro.bidi.application = 'audio' # string
           PipeWire Opus Pro Audio duplex encoding mode: audio, voip, lowdelay

       bluez5.bap.cig = 'auto' # integer, or 'auto'
           Set CIG ID for BAP unicast streams of the device.

   Node properties
       bluez5.media-source-role # string
           Media source role for Bluetooth clients connecting to this instance. Available values:

           • playback: playing stream to speakers

           • input: appear as source node.

PORT PROPERTIES

       Port  properties  are  usually  not  directly  configurable via PipeWire configuration files, as they are
       determined by applications creating them. Below are some port properties may interesting for users:

       port.name # string

           port name

       port.alias # string

           port alias

       See also
           Key Names in the API documentation for a full list.

LINK PROPERTIES

       Link properties are usually not directly configurable via  PipeWire  configuration  files,  as  they  are
       determined by applications creating them.

       See also
           Key Names in the API documentation for a full list.

CLIENT PROPERTIES

       Client  properties  are  usually  not directly configurable via PipeWire configuration files, as they are
       determined by the application connecting to PipeWire. Clients are however affected  by  the  settings  in
       pipewire.conf(5) and session manager settings.

       Note
           Only the properties pipewire.* are safe to use for security purposes such as identifying applications
           and their capabilities, as clients can set and change other properties freely.

       Below are some client properties may interesting for users.

       application.name # string

           application keys

           application name. Ex: 'Totem Music Player'

       application.process.id # integer

           process id (pid)

       pipewire.sec.pid # integer
           Client pid, set by protocol.

           Note that for PulseAudio applications, this is the PID of the pipewire-pulse process.

       See also
           Key Names in the API documentation for a full list.

RUNTIME SETTINGS

       Objects  such  as  devices  and nodes also have parameters that can be modified after the object has been
       created. For example, the active device profile, channel volumes, and so on.

       For some objects, the parameters also allow changing some of the properties. The settings  of  most  ALSA
       and virtual device parameters can be configured also at runtime.

       These  settings are available in device parameter called Props in its params field. They can be seen e.g.
       using pw-dump <id> for an ALSA device:

       {
       ...
             "Props": [
               {
                 ...
                 "params": [
                     "audio.channels",
                     2,
                     "audio.rate",
                     0,
                     "audio.format",
                     "UNKNOWN",
                     "audio.position",
                     "[ FL, FR ]",
                     "audio.allowed-rates",
                     "[  ]",
                     "api.alsa.period-size",
                     0,
                     "api.alsa.period-num",
                     0,
                     "api.alsa.headroom",
                     0,
                     "api.alsa.start-delay",
                     0,
                     "api.alsa.disable-mmap",
                     false,
                     "api.alsa.disable-batch",
                     false,
                     "api.alsa.use-chmap",
                     false,
                     "api.alsa.multi-rate",
                     true,
                     "latency.internal.rate",
                     0,
                     "latency.internal.ns",
                     0,
                     "clock.name",
                     "api.alsa.c-1"
                   ]
                 }
       ...

       They generally have the same names and meaning as the corresponding properties.

       One or more params can be changed using pw-cli(1):

       pw-cli s <id> Props '{ params = [ "api.alsa.headroom" 1024 ] }'

        These settings are not saved and need to be reapplied for each session manager restart.

ALSA CARD PROFILES

       The sound card profiles ('Analog stereo', 'Analog stereo duplex', ...) except 'Pro Audio' come  from  two
       sources:

       • UCM:  ALSA  Use  Case Manager: the profile configuration system from ALSA. See https://github.com/alsa-
         project/alsa-ucm-conf/

       • ACP   ('Alsa   Card   Profiles'):   Pulseaudio's   profile   system    ported    to    PipeWire.    See
         https://www.freedesktop.org/wiki/Software/PulseAudio/Backends/ALSA/Profiles/

       See the above links on how to configure these systems.

       For ACP, PipeWire looks for the profile configuration files under

       • ~/.config/alsa-card-profile

       • /etc/alsa-card-profile

       • /usr/share/alsa-card-profile/mixer`.

       The  path  and profile-set files are in subdirectories paths and profile-sets of these directories. It is
       possible to override individual files locally by putting a modified copy into the ACP  directories  under
       ~/.config or /etc.

OTHER OBJECT TYPES

       Technically, PipeWire objects is what are manipulated by applications using the PipeWire API.

       The  list  of  object types that are usually 'exported' (i.e. appear in pw-dump(1) output) is larger than
       considered above:

       • Node

       • Device

       • Port

       • Link

       • Client

       • Metadata

       • Module

       • Profiler

       • SecurityContext

       Monitors do not appear in this list; they are not usually exported, and technically also Device  objects.
       They are considered above as a separate object type because they have configurable properties.

       Metadata objects are what is manipulated with pw-metadata(1)

       Modules can be loaded in configuration files, or by PipeWire applications.

       The Profiler and SecurityContext objects only provide corresponding PipeWire APIs.

INDEX

   Monitor properties
       • alsa.udev.expose-busy

       • alsa.use-acp

       • bluez5.a2dp.opus.pro.bidi.channels

       • bluez5.a2dp.opus.pro.bidi.coupled-streams

       • bluez5.a2dp.opus.pro.bidi.frame-dms

       • bluez5.a2dp.opus.pro.bidi.locations

       • bluez5.a2dp.opus.pro.bidi.max-bitrate

       • bluez5.a2dp.opus.pro.channels

       • bluez5.a2dp.opus.pro.coupled-streams

       • bluez5.a2dp.opus.pro.frame-dms

       • bluez5.a2dp.opus.pro.locations

       • bluez5.a2dp.opus.pro.max-bitrate

       • bluez5.bcast_source.config

       • bluez5.codecs

       • bluez5.default.channels

       • bluez5.default.rate

       • bluez5.dummy-avrcp

       • bluez5.enable-hw-volume

       • bluez5.enable-msbc

       • bluez5.enable-sbc-xq

       • bluez5.hfphsp-backend

       • bluez5.hfphsp-backend-native-modem

       • bluez5.hw-offload-sco

       • bluez5.roles

   Device properties
       • api.acp.auto-port

       • api.acp.auto-profile

       • api.acp.pro-channels

       • api.acp.probe-rate

       • api.alsa.ignore-dB

       • api.alsa.path

       • api.alsa.soft-mixer

       • api.alsa.use-ucm

       • bluez5.a2dp.aac.bitratemode

       • bluez5.a2dp.ldac.quality

       • bluez5.a2dp.opus.pro.application

       • bluez5.a2dp.opus.pro.bidi.application

       • bluez5.auto-connect

       • bluez5.bap.cig

       • bluez5.hw-volume

       • bluez5.profile

       • device.class

       • device.description

       • device.disabled

       • device.form-factor

       • device.icon

       • device.icon-name

       • device.intended-roles

       • device.name

       • device.nick

       • device.param.PARAM

       • device.plugged

       • device.product.id

       • device.product.name

       • device.profile

       • device.profile-set

       • device.serial

       • device.vendor.id

       • device.vendor.name

   Node properties
       • adapter.auto-port-config

       • api.alsa.auto-link

       • api.alsa.bind-ctls

       • api.alsa.disable-batch

       • api.alsa.disable-mmap

       • api.alsa.disable-tsched

       • api.alsa.headroom

       • api.alsa.htimestamp

       • api.alsa.htimestamp.max-errors

       • api.alsa.multi-rate

       • api.alsa.open.ucm

       • api.alsa.path

       • api.alsa.period-num

       • api.alsa.period-size

       • api.alsa.start-delay

       • api.alsa.use-chmap

       • audio.allowed-rates

       • audio.channels

       • audio.format

       • audio.position

       • audio.rate

       • bluez5.media-source-role

       • channelmix.disable

       • channelmix.fc-cutoff

       • channelmix.hilbert-taps

       • channelmix.lfe-cutoff

       • channelmix.lock-volumes

       • channelmix.max-volume

       • channelmix.min-volume

       • channelmix.mix-lfe

       • channelmix.normalize

       • channelmix.rear-delay

       • channelmix.stereo-widen

       • channelmix.upmix

       • channelmix.upmix-method

       • clock.name

       • clock.quantum-limit

       • debug.wav-path

       • device.id

       • dither.method

       • dither.noise

       • iec958.codecs

       • latency.internal.ns

       • latency.internal.rate

       • media.artist

       • media.category

       • media.class

       • media.comment

       • media.copyright

       • media.date

       • media.filename

       • media.format

       • media.icon

       • media.icon-name

       • media.language

       • media.name

       • media.role

       • media.software

       • media.title

       • media.type

       • monitor.channel-volumes

       • node.always-process

       • node.autoconnect

       • node.description

       • node.disabled

       • node.dont-reconnect

       • node.exclusive

       • node.force-quantum

       • node.force-rate

       • node.latency

       • node.link-group

       • node.lock-quantum

       • node.lock-rate

       • node.loop.class

       • node.loop.name

       • node.name

       • node.param.PARAM

       • node.passive

       • node.pause-on-idle

       • node.rate

       • node.suspend-on-idle

       • node.target

       • node.want-driver

       • object.linger

       • priority.driver

       • priority.session

       • resample.disable

       • resample.peaks

       • resample.prefill

       • resample.quality

       • stream.dont-remix

       • target.object

   Port properties
       • port.alias

       • port.name

   Client properties
       • application.name

       • application.process.id

       • pipewire.sec.pid

AUTHORS

       The  PipeWire Developers <https://gitlab.freedesktop.org/pipewire/pipewire/issues>; PipeWire is available
       from <https://pipewire.org>

SEE ALSO

       pipewire.conf(5)

PipeWire                                              1.2.7                                    pipewire-props(7)