- bookworm-backports 1.2.5-1~bpo12+1
- testing 1.2.5-1
- unstable 1.2.5-1
pipewire-devices(7) | Miscellaneous Information Manual | pipewire-devices(7) |
NAME¶
pipewire-devices - pipewire-devices
PipeWire device and node property reference.
DESCRIPTION¶
Audio sinks and sources, cameras, Bluetooth endpoints, and other objects have properties that can be set in configuration files or at runtime.
Some of the properties are 'common object properties' (e.g. such as node.description) and can be set on all types of devices and nodes. Other properties control settings of a specific type of a device (ALSA, Bluetooth, ...).
All the properties are usually 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).
RUNTIME SETTINGS¶
The settings of most ALSA and virtual device parameters can be configured also at runtime.
The settings are available in device Props in the 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"
]
} ...
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.
COMMON NODE PROPERTIES¶
The properties listed in Stream properties apply also to sink or source nodes corresponding to real or virtual devices.
In addition:
priority.driver # integer
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.
priority.session # integer
clock.name # string
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.
node.param.PARAM = JSON # JSON
device.id
COMMON DEVICE PROPERTIES¶
These are common properties for devices.
device.name # string
device.param.PARAM = JSON # JSON
Other device.* properties: UNDOCUMENTED
AUDIO CONVERTER PROPERTIES¶
Most audio nodes (ALSA, Bluetooth, ...) have common properties for the audio converter. See pipewire-client.conf(5) stream.properties for explanations.
Node properties¶
clock.quantum-limit
channelmix.disable
channelmix.min-volume
channelmix.max-volume
channelmix.normalize
channelmix.mix-lfe
channelmix.upmix
channelmix.lfe-cutoff
channelmix.fc-cutoff
channelmix.rear-delay
channelmix.stereo-widen
channelmix.hilbert-taps
channelmix.upmix-method
channelmix.lock-volumes
resample.quality
resample.disable
resample.peaks = false # boolean
resample.prefill = false # boolean
monitor.channel-volumes
dither.noise
dither.method
debug.wav-path
adapter.auto-port-config = null # JSON
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
alsa.udev.expose-busy # boolean
Device properties¶
api.alsa.path # string
api.acp.auto-port # boolean
api.acp.auto-profile # boolean
Node properties¶
audio.channels # integer
audio.rate # integer
audio.format # string
audio.position # JSON array of strings
audio.allowed-rates # JSON array of integers
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
api.alsa.period-num # integer
api.alsa.headroom # integer
api.alsa.start-delay # integer
api.alsa.disable-mmap # boolean
api.alsa.disable-batch # boolean
api.alsa.use-chmap # boolean
api.alsa.multi-rate # boolean
api.alsa.htimestamp = false # boolean
api.alsa.htimestamp.max-errors # integer
api.alsa.disable-tsched = false # boolean
api.alsa.auto-link = false # boolean
latency.internal.rate # integer
latency.internal.ns # integer
api.alsa.path # string
api.alsa.open.ucm # boolean
api.alsa.bind-ctls # boolean
iec958.codecs # JSON array of string
BLUETOOTH PROPERTIES¶
Monitor properties¶
The following are settings for the Bluetooth device monitor, not device or node properties:
bluez5.roles # JSON array of string
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)
bluez5.codecs # JSON array of string
bluez5.default.rate # integer
bluez5.default.channels # integer
bluez5.hfphsp-backend # integer
bluez5.hfphsp-backend-native-modem # string
bluez5.dummy-avrcp player # boolean
bluez5.enable-sbc-xq # boolean
bluez5.enable-msbc # boolean
bluez5.enable-hw-volume # boolean
bluez5.hw-offload-sco # boolean
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
bluez5.a2dp.opus.pro.coupled-streams = 1 # integer
bluez5.a2dp.opus.pro.locations = 'FL,FR,LFE' # string
bluez5.a2dp.opus.pro.max-bitrate = 600000 # integer
bluez5.a2dp.opus.pro.frame-dms = 50 # integer
bluez5.a2dp.opus.pro.bidi.channels = 1 # integer
bluez5.a2dp.opus.pro.bidi.coupled-streams = 0 # integer
bluez5.a2dp.opus.pro.bidi.locations = 'FC' # string
bluez5.a2dp.opus.pro.bidi.max-bitrate = 160000 # integer
bluez5.a2dp.opus.pro.bidi.frame-dms = 400 # integer
bluez5.bcast_source.config # JSON
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
bluez5.hw-volume = [ PROFILE1 PROFILE2... ] # JSON array of string
bluez5.profile # string
bluez5.a2dp.ldac.quality # string
- auto (Adaptive Bitrate, default)
- hq (High Quality, 990/909kbps)
- sq (Standard Quality, 660/606kbps)
- mq (Mobile use Quality, 330/303kbps)
bluez5.a2dp.aac.bitratemode # integer
bluez5.a2dp.opus.pro.application = 'audio' # string
bluez5.a2dp.opus.pro.bidi.application = 'audio' # string
bluez5.bap.cig = auto # integer, or 'auto'
Node properties¶
bluez5.media-source-role # string
- playback: playing stream to speakers
- input: appear as source node.
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.
AUTHORS¶
The PipeWire Developers <https://gitlab.freedesktop.org/pipewire/pipewire/issues>; PipeWire is available from <https://pipewire.org>
SEE ALSO¶
1.2.5 | PipeWire |