PipeWire: Difference between revisions

Axka (talk | contribs)
Add section "System-wide PipeWire"
m removing excess braces around example
 
(7 intermediate revisions by 5 users not shown)
Line 1: Line 1:


[https://www.pipewire.org/ PipeWire] is a relatively new (first release in 2017) low-level multimedia framework. It aims to offer capture and playback for both audio and video with minimal latency and support for [[PulseAudio]]-, [[JACK]]-, [[ALSA]]- and [[GStreamer]]-based applications. PipeWire has a great [[Bluetooth|bluetooth]] support: because Pulseaudio was [https://github.com/NixOS/nixpkgs/issues/123784 reported to have troubles with bluetooth], PipeWire can be a good alternative.
[https://www.pipewire.org/ PipeWire] is a relatively new (first release in 2017) low-level multimedia framework. It aims to offer capture and playback for both audio and video with minimal latency while retaining support for [[PulseAudio]]-, [[JACK]]-, [[ALSA]]-, and [[GStreamer]]-based applications. PipeWire has great [[Bluetooth]] support; due to Pulseaudio being [https://github.com/NixOS/nixpkgs/issues/123784 reported to have troubles with Bluetooth], PipeWire may be a good alternative.


The daemon based on the framework can be configured to be both an audio server (with PulseAudio and JACK features) and a video capture server.
The daemon based on the framework can be configured to be both an audio server (with PulseAudio and JACK features) as well as a video capture server.


PipeWire also supports containers like [[Flatpak]] and does not rely on <code>audio</code> and <code>video</code> user groups, but rather it uses a [[Polkit]]-like security model, asking Flatpak or [[Wayland]] for permission to record screen or audio.
PipeWire also supports containers such as [[Flatpak]] and does not rely on <code>audio</code> and <code>video</code> user groups, rather it uses a [[Polkit]]-like security model, asking Flatpak or [[Wayland]] for permission to record the screen or audio.


As of [https://nixos.org/manual/nixos/stable/release-notes#sec-release-24.11 NixOS 24.11], PipeWire is the default sound server for most graphical sessions.
As of [https://nixos.org/manual/nixos/stable/release-notes#sec-release-24.11 NixOS 24.11], PipeWire is the default sound server for most graphical sessions.
Line 132: Line 132:
* {{nixos:package|carla}}: with JACK emulation, provides a patchbay (make sure to go to "Patchbay" tab and check "Canvas > Show External").
* {{nixos:package|carla}}: with JACK emulation, provides a patchbay (make sure to go to "Patchbay" tab and check "Canvas > Show External").
* catia/{{nixos:package|patchage}}: similar to qjackctl and carla.
* catia/{{nixos:package|patchage}}: similar to qjackctl and carla.
* {{nixos:package|helvum}}: GTK-based patchbay for PipeWire (uses the PipeWire protocol). Volume control is planned for later.
* {{nixos:package|pwvucontrol}}: Similar to pavucontrol but for pipewire


==Advanced Configuration==
==Advanced Configuration==
Line 294: Line 294:
systemd.services.myservice2.serviceConfig.SupplementaryGroups = [ "pipewire" ];
systemd.services.myservice2.serviceConfig.SupplementaryGroups = [ "pipewire" ];
}}
}}
=== Setting default sink volume via wireplumber ===
It's possible to declare your desired volume through {{nixos:option|services.pipewire.wireplumber.extraConfig}} by setting [https://pipewire.pages.freedesktop.org/wireplumber/daemon/configuration/configuration_option_types.html wireplumber.settings]'s [https://pipewire.pages.freedesktop.org/wireplumber/daemon/configuration/settings.html default-sink-volume]:<syntaxhighlight lang="nix">
  services.pipewire.wireplumber = {
    extraConfig = {
      "10-default-volume" = {
        "wireplumber.settings"."device.routes.default-sink-volume" = 0.8; # default is 0.4
      };
    };
  };
</syntaxhighlight>


==Troubleshooting==
==Troubleshooting==
Line 377: Line 389:
This configuration prevents audio popping and keeps the audio pipeline active, effectively reducing startup delay from ~5s to ~1s. Adding the dither settings further eliminates the remaining delay.
This configuration prevents audio popping and keeps the audio pipeline active, effectively reducing startup delay from ~5s to ~1s. Adding the dither settings further eliminates the remaining delay.
</li>
</li>
</ol>


=== Audio Crackling Fix===
Increasing buffer size for the audio will reduce crackling but increase latency.
More details can be found in [https://docs.pipewire.org/page_man_pipewire_conf_5.html pipewire docs] and [https://pipewire.pages.freedesktop.org/wireplumber/daemon/configuration/alsa.html wireplumber docs]


<syntaxhighlight lang="nix">
services.pipewire.enable = true;
services.pipewire.extraConfig.pipewire = {
  "98-crackling-fix" = {
    "context.properties" = {
      "default.clock.quantum" = 1024;
      "default.clock.min-quantum" = 1024;
      "default.clock.max-quantum" = 8192;
    };
  };
};


# additional fix for very bad devices or VM.
services.pipewire.wireplumber.extraConfig = {
  "99-crackling-fix" = {
    "api.alsa.period-size" = 1024;
    "api.alsa.headroom" = 8192;
  };
};
</syntaxhighlight>


==See also==
==See also==