{{tag>Kinetic multimédia audio vidéo mao}}
{{ :logo:pipewire.png?100| logo de PipeWire}}
====== PipeWire ======
**PipeWire** est le serveur de son installé par défaut sur Ubuntu à partir de la version [[:kinetic|Kinetic 22.10]].
Un serveur de son permet à plusieurs applications d'utiliser simultanément les pilotes de la carte son, afin de pouvoir être toutes audibles et utilisées simultanément.
Il remplace [[:PulseAudio]], le serveur de son installé par défaut jusqu'à [[:jammy|Ubuntu Jammy 22.04]]. Il propose en plus les fonctionnalités avancées utiles dans le domaine de la [[:MAO]] que proposait jusqu'ici le serveur [[:jackd|JACK]], qu'il remplace aussi, avec une configuration simplifiée. Il rend possible l'utilisation simultanée de n'importe lesquels de ses logiciels et appareils audio. On peut par exemple pré-écouter un flux audio sur des oreillettes bluetooth tandis qu'on en diffuse un autre sur la carte son intégrée à son ordinateur, le tout en enregistrant le micro de sa webcam dans [[:Audacity]]...
Il dispose de plus des couches de rétro-compatibilité avec les serveurs de son ALSA, [[:PulseAudio]], et [[:jackd|JACK]].
Pour en bénéficier il faut [[:tutoriel:comment_installer_un_paquet|installer les paquets]] **[[apt>pipewire-alsa ]]**, **[[apt>pipewire-pulse ]]** et **[[apt>pipewire-jack ]]**. Grâce à ces paquets, les applications compatibles voient respectivement des serveurs ALSA, [[:PulseAudio]], ou [[:jackd|JACK]] tourner, et peuvent s'y connecter. Il s'agit en fait à chaque fois de PipeWire.
PipeWire dispose aussi de fonctionnalités permettant de gérer des flux vidéo, utiles par ex. pour des applications de [[:streaming]].
===== Installation =====
==== Ubuntu 22.04 ====
PipeWire est installé par défaut sur Ubuntu à partir de la version [[:jammy|Jammy 22.04.4]].
On ne trouve par contre les paquets **[[apt>pipewire-alsa]]** et **[[apt>pipewire-jack]]** qu'à partir de [[:kinetic|Kinetic 22.10]].\\
Pour profiter des applications compatibles [[:jackd|JACK]], référez-vous au chapitre suivant :
==== Ubuntu 20.04 ====
Sur les versions précédentes il est possible d'[[:tutoriel:comment_installer_un_paquet|installer le paquet]] **[[apt>pipewire]]** depuis les dépôts officiels à partir de [[:focal|Focal 20.04]] ([[:depots#sections_universe_et_multiverse_maintenues_par_les_motu|dépôt universe]] pour cette version précise).
On trouve **[[apt>pipewire-pulse]]** à partir de [[:jammy|Jammy 22.04]] ([[:depots#sections_universe_et_multiverse_maintenues_par_les_motu|dépôt universe]] pour cette version précise).
Avec [[apt>pipewire-pulse]] et [[apt>pipewire-alsa]], il est conseillé de désinstaller respectivement [[:PulseAudio]] et [[:jackd|JACK]].
=== Installer le gestionnaire WirePlumber (recommandé) ===
Le gestionnaire de session par défaut est **pipewire-media-session**, mais il a été rendu obsolète par WirePlumber.
Pour installer WirePlumber sur ces anciennes versions d'Ubuntu, il faut [[:ppa#ajout_d_un_ppa_a_vos_sources_logicielles|ajouter le PPA]] ''ppa:pipewire-debian/wireplumber-upstream''((https://launchpad.net/~pipewire-debian/+archive/ubuntu/wireplumber-upstream)).
[[:tutoriel:comment_installer_un_paquet|Installez les paquets]] additionnels de PipeWire : **[[apt>gstreamer1.0-pipewire libpipewire-0.3-{0,dev,modules} libspa-0.2-{bluetooth,dev,jack,modules} pipewire{,-{audio-client-libraries,pulse,bin,jack,alsa,v4l2,libcamera,locales,tests}}]]**.
Installez le gestionnaire de session **[[apt>wireplumber{,-doc} gir1.2-wp-0.4 libwireplumber-0.4-{0,dev}]]**.
Maintenant, cachez votre ancien serveur de son PulseAudio.((Voir étape 3a de [[https://github.com/pipewire-debian/pipewire-debian#1-add-the-launchpad-ppa|la documentation officielle]].))
Vous n'avez pas besoin de supprimer PulseAudio pour le remplacer par PipeWire
systemctl --user --now disable pulseaudio.{socket,service}
systemctl --user mask pulseaudio
Lancer cette commande pour autoriser et lancer PipeWire.((Voir étape 3b de [[https://github.com/pipewire-debian/pipewire-debian#1-add-the-launchpad-ppa|la documentation officielle]].))
systemctl --user --now enable pipewire{,-pulse}.{socket,service} filter-chain
Puisqu'on a choisi WirePlumber comme gestionnaire de session, on doit lancer cette commande
systemctl --user --now enable wireplumber
Vous devriez avoir du son, désormais avec PipeWire + WirePlumber.
==== Ubuntu 18.04 ====
Il est aussi possible d'installer PipeWire et tous ses outils sur des versions plus anciennes qui ne les incluent pas dans les dépôts par défaut, à partir d'Ubuntu [[:bionic|Bionic 18.04]].
Il faut pour cela [[:ppa#ajout_d_un_ppa_a_vos_sources_logicielles|ajouter les PPA]] **ppa:pipewire-debian/pipewire-upstream**((https://launchpad.net/~pipewire-debian/+archive/ubuntu/pipewire-upstream)) et **ppa:pipewire-debian/wireplumber-upstream**((https://launchpad.net/~pipewire-debian/+archive/ubuntu/wireplumber-upstream)) dans vos sources de logiciels.
Voir ici la documentation en anglais à ce sujet : https://pipewire-debian.github.io/pipewire-debian/
===== Configuration =====
Pour une utilisation simple il n'y a rien à configurer. Il suffit de choisir la sortie audio de son choix dans les [[:gnome-control-center|paramètres du système]] ou plus rapidement dans le [[gnome-shell#le_menu_systeme|menu système de la barre supérieure]] (pour [[:GNOME]], à adapter si vous utilisez un autre [[:environnements|environnement de bureau]]).
Pour voir la liste des actions disponibles en [[:commande_shell|ligne de commande]] :
pw-cli help
Pour voir la liste des logiciels et appareils disponibles (via [[#gestionnaire_de_session|WirePlumber]]) :
wpctl status
==== Routage ====
En plus d'utiliser simultanément plusieurs logiciels et interfaces matérielles, PipeWire permet de les relier ensemble dans n'importe quel sens, à la manière d'un studio virtuel.
On peut utiliser une interface graphique telle que [[https://gitlab.freedesktop.org/rncbc/qpwgraph|qpwgraph]], qui remplace avantageusement [[:QjackCtl]] (qu'on utilisait pour [[:jackd|JACK]]).
**qpwgraph** est disponible depuis les dépots officiels : **[[apt>qpwgraph]]** ou en [[https://flathub.org/apps/details/org.rncbc.qpwgraph|Flatpak]].
Chaque élément (matériel ou logiciel) apparaît comme un bloc avec ses entrées à gauche et ses sorties à droite. On peut les relier les unes aux autres en tirant des liens par cliquer-glisser. Les liens peuvent ainsi conduire des signaux d'un logiciel ou d'un périphérique à l'autre. Des signaux :
* audio (en vert)
* [[:MIDI]] (en rose : MIDI ALSA, ou rouge : MIDI JACK - voir [[:midi#implementation_du_midi_sous_linux|Implémentation du MIDI sous Linux]])
* ou vidéo (en bleu)
{{:captures:qpwgraph_screenshot-1.png?400|}}
Il n'est pas indispensable d'utiliser cette interface. Les simples connexions sont gérées automatiquement depuis les paramètres de l'[[:environnements|environnement de bureau]] : en choisissant une sortie audio dans le [[:gnome-shell#le_menu_systeme|menu système de GNOME]] par ex., les logiciels du bureau (tels que le navigateur internet ou les lecteurs audio ou vidéo) se connecteront automatiquement au périphérique audio sélectionné. **qpwgraph** peut permettre de visualiser ce comportement.
Le routage vidéo permet de diriger le ou les flux vidéo de webcams, de cartes d'[[:capture_video|acquisition vidéo]], ou de lecteurs vidéos, vers un ou des logiciel(s) de //streaming// (tel que [[:OBS]]), ou de capture ([[:VJing]] ou enregistrement), ou autres logiciels multimédia en temps réel.
On peut aussi visualiser ces connexions actives sans passer par **qpwgraph** au moyen de la commande :
wpctl status
Chaque connexion est un "//Stream//" représenté par ''source > destination''.
==== Gestionnaire de session ====
Le [[:mao#gestionnaires_de_session|gestionnaire de session]] pour PipeWire installé par défaut sur Ubuntu est [[https://pipewire.pages.freedesktop.org/wireplumber/|WirePlumber]].
Il n'existe pour le moment pas d'interface graphique pour le gérer.
On peut le contrôler avec la commande ''wpctl'' et ses fichiers de configuration se trouvent sous ''/usr/share/wireplumber''.
==== Création d'appareils virtuels ====
Il peut être utile de créer un appareil virtuel (//virtual sink//) pour par ex. faciliter le routage entre les différentes applications.
Pour cela créez un fichier ''~/.config/pipewire/pipewire.conf.d/10-null-sink.conf'' contenant par ex. :
context.objects = [
{ factory = adapter
args = {
factory.name = support.null-audio-sink
node.name = "Virtual Stereo"
media.class = Audio/Sink
object.linger = true
audio.position = [ FL FR ]
monitor.channel-volumes = true
}
}
{ factory = adapter
args = {
factory.name = support.null-audio-sink
node.name = "Virtual Quadri"
media.class = Audio/Sink
object.linger = true
audio.position = [ FL FR RL RR ]
monitor.channel-volumes = true
}
}
]
Ici on crée 2 appareils virtuels, un stéréo, l'autre quadriphonique.
==== Réseau ====
De la même manière il est possible de créer différents types de //[[#creation_d_appareils_virtuels|virtual sinks]]//, par ex. pour diffuser à distance (//streamer//) de l'audio en utilisant différents protocoles réseaux ([[https://github.com/roc-streaming/roc-toolkit|ROC]], [[wpfr>Real-time_Transport_Protocol|RTP]], [[wpfr>AirPlay_(Apple)|AirPlay]], [[:pulseaudio|Pulse]] Tunnel, [[:jackd|JACK]] Tunnel, etc.). Voir la liste des modules disponibles sur la [[https://docs.pipewire.org/page_pipewire_modules.html|documentation officielle]] et sur le [[https://gitlab.freedesktop.org/pipewire/pipewire/-/wikis/Network|wiki de freedesktop.org]].
Ceci permet de diffuser le son de votre ordinateur (qu'il s'agisse seulement du son de certaines applications ou de l'intégralité des sons du bureau) sur un appareil distant.
Grâce à [[:ZeroConf]], PipeWire peut créer automatiquement des //virtual sinks// correspondant à des appareils connectés à votre réseau local. Par ex. pour profiter d'un appareil AirPlay :
pactl load-module module-raop-discover
Les appareils compatibles AirPlay visibles devraient alors apparaître comme les interfaces audio ordinaires de votre ordinateur.
===== Utilisation basique en ligne de commande =====
On peut pour cela utiliser l'utilitaire WirePlumber (commande ''wpctl'').
==== Connaître le volume sonore ====
Volume de la sortie principale :
$ wpctl get-volume @DEFAULT_AUDIO_SINK@
Volume: 0.85
Volume du micro (entrée principale)
$ wpctl get-volume @DEFAULT_AUDIO_SOURCE@
Volume: 0.68
==== Fixer le volume ====
Fixer le volume à 1,25
$ wpctl set-volume @DEFAULT_AUDIO_SINK@ 1.25
Augmenter le volume de 5 % :
$ wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%+
Diminuer le volume de 10 % :
$ wpctl set-volume @DEFAULT_AUDIO_SINK@ 10%-
Augmenter le volume de 6 % sans dépasser 130 % :
$ wpctl set-volume -l 1.3 @DEFAULT_AUDIO_SINK@ 6%+
==== Mettre en sourdine (mute) ====
Fixer le volume à 0
$ wpctl set-volume @DEFAULT_AUDIO_SINK@ 0
Basculer entre la sourdine et le réglage antérieur. Mettre en sourdine la sortie par défaut lorsque le volume n'est pas nul :
wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle
Rétablir le volume après mise en sourdine (même instruction) :
wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle
Basculer en sourdine la sortie numéro 62 (numéro de sortie obtenu par wpctl status) :
wpctl set-mute 62 toggle
Basculer l'entrée principale (généralement le micro) en sourdine :
wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle
Mettre en sourdine la sortie principale pendant une minute :
$ wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle ; sleep 60 ; wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle
===== Problèmes courants =====
* Pour savoir quel serveur de son vous utilisez, entrez la commande suivante : pactl info
Si le retour indique ''Nom du serveur : PulseAudio (on PipeWire)'', vous utilisez bien PipeWire.
* La commande fuser -v /dev/snd/*
indique également si on utilise PipeWire et WirePlumber, ou autre serveur de son et [[#gestionnaire de session]].
* Pour obtenir des informations sur votre installation audio, vous pouvez aussi [[:tutoriel:comment_installer_un_paquet|installer le paquet]] **[[apt>inxi]]** et lancer la commande : inxi -A
* La commande systemctl --user status pipewire
donnera aussi de nombreuses informations sur l'état du serveur.
* La commande wpctl status
donne un aperçu général de la configuration audio.\\ Chaque élément audio ou vidéo (matériel ou logiciel) est précédé d'un numéro qu'on peut utiliser comme identifiant (//ID//). On peut utiliser cet //ID// pour obtenir une description détaillée d'un élément précis de la manière suivante : wpctl inspect ID
* En cas de problèmes audio comme des craquements, la commande pw-top
permet de monitorer les processus audio, la latence de chaque interface, la charge des DSP et les décrochages audio / //[[mao#optimisation_audio|xruns]]// (colonne ''ERR'').((**(//en//)** [[https://docs.pipewire.org/page_man_pw-top_1.html|documentation de
pw-top]]))
==== Delay Bluetooth ====
La connexion [[:bluetooth]] introduit un temps de latence. Quand on regarde des vidéos, la vidéo est généralement retardée de la même durée sans qu'on s'en rende compte, ce qui permet à l'ensemble de rester synchronisé.
PipeWire permet d'utiliser plusieurs sorties simultanément, dans ce cas on perçoit par contre bien l'écart audio entre une sortie filaire et une sortie bluetooth.\\
Le seul moyen de synchroniser les 2 signaux est alors de retarder le signal filaire.
À cette fin on peut trouver des informations au chapitre //Delay// de [[https://docs.pipewire.org/page_module_filter_chain.html#Delay|la documentation]] en anglais.\\
Une autre possibilité peut-être plus simple (mais plus lourde) est d'ajouter un [[mao#effets|effet]] [[:jackd|JACK]] ou [[:LV2]] qui propose ce genre de chose dans la chaîne audio (un //[[wpfr>Delay_(effet)|delay]]// sans //feedback// et 100% //wet// - sans signal source).
===== Voir aussi =====
* **(en)** [[https://pipewire.org|Site officiel]]
* **(en)** [[https://docs.pipewire.org|Documentation officielle]]
* **(en)** [[https://gitlab.freedesktop.org/pipewire/pipewire/-/wikis/home|Wiki PipeWire]] sur [[wpfr>Freedesktop.org]]
* [[https://linuxmao.org/PipeWire|PipeWire sur Linux MAO]]
* de nombreuses informations souvent valables aussi pour Ubuntu (mais en anglais), sur la [[https://wiki.archlinux.org/title/PipeWire|documentation de Arch Linux]]
* **(en)** [[https://github.com/mikeroyal/PipeWire-Guide|Guide sur l'écosystème de PipeWire]]
* [[https://youtu.be/lTv2jJDcPns|Cette vidéo]] en français explique PipeWire, ALSA, [[:PulseAudio]] et [[:jackd|JACK]]. À noter toutefois que PipeWire est désormais aussi performant que [[:jackd|JACK]] (depuis la sortie de la version 1), et qu'il est lui-même un //[[:services|daemon]]//.
----
//Contributeurs : [[:utilisateurs:krodelabestiole]]//