Différences
Ci-dessous, les différences entre deux révisions de la page.
| Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédente | ||
|
pipewire [Le 08/07/2025, 04:26] krodelabestiole [Optimisation] typos |
pipewire [Le 04/11/2025, 21:23] (Version actuelle) krodelabestiole [Interfaces graphiques] + extensions gnome |
||
|---|---|---|---|
| Ligne 18: | Ligne 18: | ||
| **PipeWire** est installé par défaut sur Ubuntu à partir de la version [[:jammy|Jammy 22.04.4]].\\ | **PipeWire** est installé par défaut sur Ubuntu à partir de la version [[:jammy|Jammy 22.04.4]].\\ | ||
| - | Si ce n'est pas le cas, quel qu'en soit la raison, il suffit d'[[:tutoriel:comment_installer_un_paquet|installer le paquet]] ''[[apt>pipewire]]''. | + | Si ce n'est pas le cas, quelle qu'en soit la raison, il suffit d'[[:tutoriel:comment_installer_un_paquet|installer le paquet]] ''[[apt>pipewire]]''. |
| On trouve aussi le paquet ''[[apt>pipewire-pulse]]''(([[:depots#sections_universe_et_multiverse_maintenues_par_les_motu|dépôt universe]] pour [[:jammy|Jammy 22.04]])) qui fournit la rétro-compatibilité pour les applications implémentant [[:PulseAudio]]. Il risque donc d'être indispensable pendant encore un certain temps... | On trouve aussi le paquet ''[[apt>pipewire-pulse]]''(([[:depots#sections_universe_et_multiverse_maintenues_par_les_motu|dépôt universe]] pour [[:jammy|Jammy 22.04]])) qui fournit la rétro-compatibilité pour les applications implémentant [[:PulseAudio]]. Il risque donc d'être indispensable pendant encore un certain temps... | ||
| Ligne 97: | Ligne 97: | ||
| Il existe différentes interfaces graphiques permettant de gérer **PipeWire** : | Il existe différentes interfaces graphiques permettant de gérer **PipeWire** : | ||
| - | * en particulier **[[https://github.com/dimtpap/coppwr|coppwr]]** fournit un accès à quantité d'informations et de réglages de bas niveau. Il propose entre autre un //graph// pour configurer le [[#routage]]. **coppwr** est disponible en [[:flatpak]] sur le dépôt [[https://flathub.org/apps/io.github.dimtpap.coppwr|Flathub]] et peut donc s'installer en suivant [[:tutoriel:installer_application_flatpak|cette procédure]] puis en installant le paquet ''io.github.dimtpap.coppwr''. | + | * les [[:environnements|environnements de bureau]] d'Ubuntu ([[:GNOME]], [[:KDE]], etc.) prennent en charge les fonctionnalités de base de **PipeWire** : gestion du volume depuis les boutons multimédia du clavier ou des raccourcis sur la [[:gnome-shell#barre supérieure]] (ou barre de tâches), choix des entrées et sorties audio par défaut au moins dans les [[:gnome-control-center|paramètres système]]. |
| + | * pour une gestion beaucoup plus complète, **[[https://github.com/dimtpap/coppwr|coppwr]]** fournit un accès à quantité d'informations et de réglages de bas niveau. Il propose entre autre un //graph// pour configurer le [[#routage]]. **coppwr** est disponible en [[:flatpak]] sur le dépôt [[https://flathub.org/apps/io.github.dimtpap.coppwr|Flathub]] et peut donc s'installer en suivant [[:tutoriel:installer_application_flatpak|cette procédure]] puis en installant le paquet ''io.github.dimtpap.coppwr''. | ||
| * **[[https://github.com/rncbc/qpwgraph|qpwgraph]]** est probablement l'interface la plus utilisée pour [[#router]] les signaux audio, vidéo et [[:MIDI]] (utilise la bibliothèque [[:Qt]]). | * **[[https://github.com/rncbc/qpwgraph|qpwgraph]]** est probablement l'interface la plus utilisée pour [[#router]] les signaux audio, vidéo et [[:MIDI]] (utilise la bibliothèque [[:Qt]]). | ||
| * **[[https://gitlab.freedesktop.org/pipewire/helvum|Helvum]]** est une alternative à **qpwgraph**, également consacrée au [[#routage]], utilisant la bibliothèque [[:GTK]]. | * **[[https://gitlab.freedesktop.org/pipewire/helvum|Helvum]]** est une alternative à **qpwgraph**, également consacrée au [[#routage]], utilisant la bibliothèque [[:GTK]]. | ||
| + | * de nombreuses [[:extensions-gnome|extensions de GNOME]] permettent d'accéder facilement et graphiquement à certaines fonctionnalités particulières de **PipeWire**, voir le [[https://extensions.gnome.org/#search=pipewire|site des extensions]]. | ||
| ==== Routage ==== | ==== Routage ==== | ||
| Ligne 128: | Ligne 130: | ||
| ==== Optimisation ==== | ==== Optimisation ==== | ||
| - | En [[:MAO]], on a souvent besoin de jouer le son //en temps réel//. Malheureusement le matériel électronique et les ordinateurs en particulier introduisent un problème qu'on appelle le //**temps de latence**// : il s'agit du délai qui apparaît entre le moment où on demande à la machine de reproduire un son (en appuyant sur une touche d'un clavier par exemple), et celui où le son sort effectivement des haut-parleurs.\\ | + | <note important>Pour des explications générales concernant l'optimisation audio, le temps de latence, et les //xruns//, n'hésitez pas à consulter avant tout le chapitre //[[:mao#optimisation audio]]// sur la page //[[:MAO]]//.</note> |
| - | Il est souvent court (on l'exprime en millisecondes), mais si on peut négliger ce délai lorsqu'on appuie sur une touche play, le problème devient beaucoup plus épineux pour jouer de la batterie électronique ou pour appliquer un effet sur sa voix sans s'entendre en double. | + | |
| + | Diverses optimisations permettent de réduire le temps de latence sans surcharger le processeur, afin d'éviter les décrochages //xruns//. Les plus importantes optimisations consistent à ajuster la **//buffer size//** (taille du tampon, appelée **//quantum//** chez PipeWire), et le **//sample rate//** (fréquence d'échantillonnage). À ce sujet, voir //[[:mao#optimisation audio]]//. | ||
| + | |||
| + | En résumé : | ||
| + | > On considère généralement qu'une **fréquence d'échantillonnage** (//sample rate//) de 48000 Hz est suffisante. | ||
| + | > Le jeu consiste donc généralement plutôt à baisser la **taille du tampon** (//buffer size// ou //quantum//) autant que nécessaire, sans surcharger le processeur (ce qui créé des craquements audibles). Cette valeur doit être une puissance de 2. | ||
| + | |||
| + | Pour PipeWire, ceci peut se faire [[#en ligne de commande]], ou [[#graphiquement]] : | ||
| + | |||
| + | === Graphiquement === | ||
| + | |||
| + | Il est possible de modifier ces paramètres sans éditer de fichier ou entrer la moindre ligne de commande : | ||
| + | * soit au moyen de **[[https://extensions.gnome.org/extension/7699/pipewire-settings/|Pipewire Settings]]**, une [[:extensions-gnome|extension GNOME]] très simple et dédiée spécifiquement à ces réglages (sélectionner //Persist settings// pour conserver les réglages pour les prochaines sessions)((Merci à socratisator [[https://forum.ubuntu-fr.org/viewtopic.php?pid=22838522#p22838522|sur le forum]] pour la découverte de cette extension !)) | ||
| + | |||
| + | * soit au moyen de **[[https://github.com/dimtpap/coppwr|coppwr]]**, l'[[#Interfaces graphiques|interface graphique]] actuellement la plus puissante pour PipeWire.\\ On trouvera ces paramètres dans le menu //Tools// -> //Context Manager//.\\ On peut d'ici ajuster entre autres les propriétés //default.clock.rate// et //default.clock.quantum//.\\ Une fois les valeurs entrées, n'oubliez pas de cliquer sur //Update properties// ! | ||
| + | |||
| + | === En ligne de commande === | ||
| - | Diverses optimisations permettent de le réduire au maximum. La plus importante optimisation consiste à ajuster le //buffer// (taille du tampon) et le //sample rate// (fréquence d'échantillonnage). À ce sujet, voir //[[:mao#optimisation audio]]// sur la page //[[:MAO]]//.((Voir aussi la [[https://gitlab.freedesktop.org/pipewire/pipewire/-/wikis/Config-PipeWire#samplerate-settings|documentation officielle]].)) | ||
| <code> | <code> | ||
| pw-metadata -n settings 0 clock.force-rate <samplerate> | pw-metadata -n settings 0 clock.force-rate <samplerate> | ||
| pw-metadata -n settings 0 clock.force-quantum <buffersize> | pw-metadata -n settings 0 clock.force-quantum <buffersize> | ||
| </code> | </code> | ||
| - | * Remplacer ''<samplerate>'' par la fréquence d’échantillonnage désirée. Plus cette taille est élevée meilleure est la qualité, plus court est la latence, mais plus haute est la consommation CPU. Les interfaces audio utilisent généralement des fréquences de 41000Hz, 48000Hz, ou 96000Hz.((Sachant que l'oreille humaine n'entend pas de fréquence supérieure à 20000Hz.)) | + | * Remplacer ''<samplerate>'' par la fréquence d’échantillonnage désirée. Plus cette taille est élevée meilleure est la qualité (théorique), plus courte est la latence, mais plus haute est la consommation CPU. Les interfaces audio utilisent généralement des fréquences de 41000 Hz, 48000 Hz, ou 96000 Hz. 48000 Hz est généralement une valeur correcte, sachant que l'oreille humaine n'entend pas de fréquence supérieure à 20000 Hz.((Les valeurs supérieures sont principalement des arguments //marketing//.)) |
| - | * Remplacer ''<buffersize>'' par la taille de tampon (en nombre de //samples//). Cette valeur doit être une puissance de 2. | + | |
| - | ''quantum'' correspond ici à la taille de tampon (qu'on appelle généralement plutôt //buffer//). | + | * Remplacer ''<buffersize>'' par la taille de tampon (en nombre de //samples//). Cette valeur doit être une puissance de 2. Plus cette taille est réduite, plus courte est la latence, mais plus haute est la consommation CPU (pas d'impact sur la qualité). Si on ne traite pas d'audio en temps réel (simple lecture [[:multimédia]]), une valeur de 2048 samples sera très confortable pour le processeur (au détriment d'une latence de 64 ms à 48 kHz).\\ ''quantum'' correspond ici à la taille de tampon (que les anglophones appellent généralement plutôt //buffer size//). |
| - | <note>Pour les cartes sons USB, certaines combinaisons de framerate / buffer sont préférables à d'autres : voir sur [[https://wiki.linuxaudio.org/wiki/list_of_jack_frame_period_settings_ideal_for_usb_interface|cette page]] //(en)// les combinaisons indiquées en gras.</note> | + | <note>Pour les cartes sons USB, certaines combinaisons de //samplerate// / //buffersize// sont préférables à d'autres : voir sur [[https://wiki.linuxaudio.org/wiki/list_of_jack_frame_period_settings_ideal_for_usb_interface|cette page]] //(en)// les combinaisons indiquées en gras.</note> |
| - | Par exemple, pour une fréquence d’échantillonnage de 48000Hz et un tampon de 256 samples : | + | Par exemple, pour une fréquence d’échantillonnage de 48000 Hz et un tampon de 256 samples : |
| <code> | <code> | ||
| pw-metadata -n settings 0 clock.force-rate 48000 | pw-metadata -n settings 0 clock.force-rate 48000 | ||
| Ligne 157: | Ligne 174: | ||
| pw-metadata -n settings 0 clock.force-quantum 0 | pw-metadata -n settings 0 clock.force-quantum 0 | ||
| </code> | </code> | ||
| + | |||
| + | <note>Voir aussi la [[https://gitlab.freedesktop.org/pipewire/pipewire/-/wikis/Config-PipeWire#samplerate-settings|documentation officielle]] (en anglais).</note> | ||
| ==== Gestionnaire de session ==== | ==== Gestionnaire de session ==== | ||
| Ligne 198: | Ligne 217: | ||
| ==== Réseau ==== | ==== 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]]. | + | 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_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. | 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. | ||
| Ligne 245: | Ligne 264: | ||
| * Mettre en sourdine la sortie principale pendant une minute :<code>wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle ; sleep 60 ; wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle</code> | * Mettre en sourdine la sortie principale pendant une minute :<code>wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle ; sleep 60 ; wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle</code> | ||
| + | |||
| + | ==== Changer la sortie son avec un script ==== | ||
| + | |||
| + | Pour changer de sortie audio la syntaxe est : | ||
| + | <code>wpctl set-default ID</code> | ||
| + | où ID est le numéro de la sortie. | ||
| + | |||
| + | Ce numéro est visible dans la section "Sinks" en exécutant la commande : | ||
| + | <code>wpctl status</code> | ||
| + | Problème : ce numéro change à chaque redémarrage ! Il faut donc le récupérer via la commande grep en cherchant le nom de la sortie qui lui ne change pas. | ||
| + | |||
| + | |||
| + | Voici un exemple de script pour changer la sortie vers le HDMI (remplacer le texte entre "" par ce qui vous correspond - notez le caractère d'échappement \ ajouté devant [ et ] ) : | ||
| + | <code bash> | ||
| + | #!/bin/bash | ||
| + | idhdmi=$(wpctl status | grep "Baffin HDMI/DP Audio \[Radeon RX 550 640SP / RX 560/560X\] D" | cut -c 10-12) | ||
| + | echo $idhdmi | ||
| + | wpctl set-default $idhdmi | ||
| + | exit 0 | ||
| + | </code> | ||
| + | |||
| + | Lorsque votre script est au point, vous pouvez créer un raccourci clavier personnalisé pour le lancer avec la commande | ||
| + | <code>bash nom-du-fichier-script.sh</code> | ||
| ===== Problèmes courants ===== | ===== Problèmes courants ===== | ||
| Ligne 258: | Ligne 300: | ||
| * La commande <code>wpctl status</code> 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 : <code>wpctl inspect ID</code> | * La commande <code>wpctl status</code> 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 : <code>wpctl inspect ID</code> | ||
| - | * En cas de problèmes audio comme des craquements, la commande <code>pw-top</code> 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 | + | ==== Craquements, "hachage" ==== |
| - | pw-top]])) | + | |
| + | En cas de défauts audio comme des craquements ou des coupures intermittentes, la commande <code>pw-top</code> 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]])) | ||
| + | |||
| + | On peut généralement remédier au problème en réduisant la fréquence d'échantillonnage (//sample rate//) et la taille du tampon (//buffer size// ou //quantum//), comme indiqué dans le chapitre //[[#Optimisation]]//. | ||
| ==== Delay Bluetooth ==== | ==== Delay Bluetooth ==== | ||
| Ligne 269: | Ligne 314: | ||
| À 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.\\ | À 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). | + | 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 ===== | ===== Voir aussi ===== | ||