Skip to content

Latest commit

 

History

History
702 lines (466 loc) · 44.7 KB

README.md

File metadata and controls

702 lines (466 loc) · 44.7 KB


PipeWire Guide

followers

Maintenance Last-Commit

A guide covering PipeWire including the applications and tools that will make you a better and more efficient with your PipeWire. PipeWire is default in Fedora (34 or later), Debian 12, LMDE 6, Ubuntu (22.10 or later), Pop!_OS 22.04, and openSUSE Tumbleweed.

Note: You can easily convert this markdown file to a PDF in VSCode using this handy extension Markdown PDF.


Table of Contents

  1. Getting Started with PipeWire

  2. Wayland Development

Getting Started with PipeWire

Back to the Top

PipeWire is a server and user space API to deal with multimedia pipelines.It provides a low-latency, graph based processing engine on top of audio and video devices that can be used to support the use cases currently handled by both pulseaudio and JACK. PipeWire was designed with a powerful security model that makes interacting with audio and video devices from containerized applications easy. Nodes in the graph can be implemented as separate processes, communicating with sockets and exchanging multimedia content using fd passing. PipeWire was created by Wim Taymans, Principal Engineer at Red Hat and co-creator of the GStreamer multimedia framework.

Key features of PipeWire include:

  • Capture and playback of audio and video with minimal latency.
  • Real-time Multimedia processing on audio and video.
  • Multiprocess architecture to let applications share multimedia content.
  • Seamless support for PulseAudio, JACK, ALSA and GStreamer applications.

YouTube Tutorials

Back to the Top

You should use PipeWire... NOW!!! PulseAudio Is Dead To Me: Pipewire Is Here To Stay Wireplumber Takes Pipewire To The Next Level! Qpwgraph: Easiest Way To Reroute Pipewire Audio PipeWire Pro Audio Pipewire Finally Seems to Be Ready for the Masses

Developer Resources

Back to the Top


How WirePlumber, the PipeWire session manager works. Source: Collabora

PipeWire Tools

Back to the Top

WirePlumber is a modular session / policy manager for PipeWire and a GObject-based high-level library that wraps PipeWire’s API, providing convenience for writing the daemon’s modules as well as external tools for managing PipeWire. The WirePlumber daemon implements the session & policy management service. It follows a modular design, having plugins that implement the actual management functionality.

Core API is used by all clients that need to communicate with the PipeWire Daemon and provides the necessary structs to interface with the daemon.

Implementation API is primarily used by the PipeWire Daemon itself but also by the PipeWire Session Manager and modules/extensions that need to build objects in the graph.

SPA (Simple Plugin API) is an extensible API to implement all kinds of plugins.

PipeWire-rs is a Rust bindings for pipewire and SPA libraries.

Audio Tools & Libraries to use with PipeWire

Back to the Top

EasyEffects is an applicaton that provides a limiter, compressor, convolver, equalizer and auto volume and many other plugins for PipeWire applications.


Helvum is a GTK-based patchbay for pipewire, inspired by the JACK tool Catia.


qpwgraph is a graph manager dedicated to PipeWire, using the Qt C++ framework, based and pretty much like the same of QjackCtl.


RaySession is a GNU/Linux session manager for audio programs such as Ardour, Carla, QTractor, Guitarix, Patroneo, Jack Mixer. This allows audio programs to load together, then be able to save or close all documents together. Checkout the RaySesson manual.


Studio One is an DAW audio tool that has features like Dolby Atmos integration and ARA (Audio Random Access) support. Studio One is a Wayland application and won't run in an X11 session. The plug-in editor can be rendered into a bitmap with the new IPlugViewRendering interface which the host will then display in a Wayland surface. For user input, mouse events are passed to the plug-in via IPlugViewMouseInput in addition to keyboard events handled by standard VST3 APIs. Please check out this knowledge base.


Studio One UI

coppwr is a tool that provides low level control over the PipeWire multimedia server. It aims to expose and provide as many ways to inspect and control the many components of the PipeWire multimedia server as possible. It can be used as a diagnostic tool for PipeWire and to help develop software that interacts with it. coppwr flatpak version.


coppwr UI

Whisper is a tool that allows you to listen to your microphone through your speakers using Pipewire. Whisper flatpak version


Whisper UI

JamesDSP for Linux is an audio effect processor for PipeWire and PulseAudio clients.


NoiseTorch is an easy to use open source application for Linux with PulseAudio or PipeWire. It creates a virtual microphone that suppresses noise, in any application.


SuperCollider is a platform for audio synthesis and algorithmic composition, used by musicians, artists, and researchers working with sound. It consists of:

  • Scsynth, a real-time audio server with hundreds of unit generators ("UGens") for audio analysis, synthesis, and processing
  • Supernova, an alternative server to scsynth with support for parallel DSP on multi-core processors.
  • Sclang, an interpreted programming language that controls the servers.
  • Scide, an editing environment for sclang with an integrated help system.


SuperCollider

SonoBus is an easy to use application for streaming high-quality, low-latency peer-to-peer audio between devices over the internet or a local network.


SonosBus

REAPER is a complete digital audio production application for computers, offering a full multitrack audio and MIDI recording, editing, processing, mixing and mastering toolset. REAPER supports a vast range of hardware, digital formats and plugins, and can be comprehensively extended, scripted and modified.


Reaper

Soundux is a cross-platform soundboard.


Soundux

JUCE is an open-source cross-platform C++ application framework for desktop and mobile applications, including VST, VST3, AU, AUv3, RTAS and AAX audio plug-ins.


JUCE

Helio Workstation is free and open-source music sequencer, designed to be used on all major platforms.


Helio

Zrythm is a digital audio workstation designed to be featureful and easy to use. It offers streamlined editing workflows with flexible tools, limitless automation capabilities, powerful mixing features, chord assistance and support for various plugin and file formats.


Zrythm

Yabridge is a modern and transparent way to use Windows VST2 and VST3 plugins on Linux.


Yabridge

Squeezer is a flexible general-purpose audio compressor with a touch of citrus.


Squeezer

Matchering 2.0 is a novel Containerized Web Application and Python Library for audio matching and mastering.

QjackCtl is a simple Qt application to control the JACK sound server daemon, specific for the Linux Audio Desktop infrastructure.

Catia is a JACK Patchbay, with some neat features like A2J bridge support and JACK Transport. It's supposed to be as simple as possible so it can work nicely on non-Linux platforms.

JACK Audio Connection Kit AKA JACK is a professional sound server daemon that provides real-time, low-latency connections for both audio and MIDI data between applications that implement its API. JACK can be configured to send audio data over a network to a main machine, which then outputs the audio to a physical device. This can be useful to mix audio from a number of linked computers without requiring additional cables or hardware mixers, and keeping the audio path digital for as long as possible.

JACK2 is a C++ version of the JACK low-latency audio server for multi-processor machines. It is a new implementation of the JACK server core features that aims at removing some limitations of the JACK1 design. The activation system has been changed for a data flow model and lock-free programming techniques for graph access have been used to have a more dynamic and robust system.

Cava is a bar spectrum audio visualizer for terminal (ncurses) or desktop (SDL).

Musikcube is a cross-platform, terminal-based audio engine, library, player and server written in c++.

LabSound is a C++ graph-based audio engine.

Pure Data is a free real-time computer music system.

OpenMAX™ is a cross-platform API that provides comprehensive streaming media codec and application portability by enabling accelerated multimedia components to be developed, integrated and programmed across multiple operating systems and silicon platforms.

H.264(AVC) is a video compression standard based on block-oriented and motion-compensated integer-DCT coding that defines multiple profiles (tools) and levels (max bitrates and resolutions) with support up to 8K.

H.265(HEVC) is a video compression standard that is the successor to H.264(AVC). It offers a 25% to 50% better data compression at the same level of video quality, or improved video quality at the same bit-rate.

FFmpeg is a leading multimedia framework that can decode, encode, transcode, mux, demux, stream, filter and play pretty much anything that humans and machines have created. It supports the most obscure ancient formats up to the cutting edge ones on multiple platforms such as Windows, macOS, and Linux.

GStreamer is a library for constructing graphs of media-handling components. The applications it supports range from simple Ogg/Vorbis playback, audio/video streaming to complex audio (mixing) and video (non-linear editing) processing. Applications can take advantage of advances in codec and filter technology transparently.

Media Source Extensions (MSE) is a W3C specification that allows JavaScript to send byte streams to media codecs within Web browsers that support HTML5 video and audio. Also, this allows the implementation of client-side prefetching and buffering code for streaming media entirely in JavaScript.

WebRTC is an open-source project that adds real-time communication capabilities to your application that works on top of an open standard. It supports video, voice, and generic data to be sent between peers, allowing developers to build powerful voice- and video-communication solutions.

DAW/Sequencers

Back to the Top

  • dino is an integrated MIDI piano roll editor and sequencer engine.
  • friniika is a complete music workstation for Windows/Linux/macOS.
  • Harrison Mixbus is the first full-featured DAW with true analog style mixing.
  • helio-workstation is a free linear-based music for macOS, Linux, Windows, iOS and Android, with clean interface, version control, synchronization between devices, undo history, and more.
  • Laborejo is a MIDI sequencer based on classical music notation.
  • meterec is a minimalistic multi track recorder.
  • muse is a Qt4-based audio/MIDI sequencer.
  • ossia score is an interactive sequencer with intelligent timelines supporting audio, video, OSC, MIDI, DMX and more.
  • Patroneo is an easy to use, pattern based midi sequencer.
  • qtractor is a MIDI/Audio multi-track sequencer application.
  • REAPER is a complete digital audio production application for computers, offering a full multitrack audio and MIDI recording, editing, processing, mixing and mastering toolset.
  • sequencer64 is a real-time MIDI sequencer, a major reboot of seq24 with many new features.
  • Stargate DAW is a Cross-platform, all-in-one DAW and plugin suite.
  • Zrythm is a highly automated and intuitive digital audio workstation.

System utilities - Plugin hosts & adapters

Back to the Top

  • carla-lv2/vst is an audio plugin host (LV2/VST plugins).
  • festige is a graphical interface for fst and dssi-vst, allowing you to run Windows VST plugins on Linux.
  • dssi-vst is an Adapter for VST an VSTi audio plugins.
  • linvst is a LinVst enables Windows VSTs to be used as Linux VSTs in Linux VST-capable DAWs.
  • mod-host is a LV2 host for JACK, controllable via socket or command line.
  • synthpod is a Synthpod is an LV2 host.
  • vst-bridge is a VST bridge for Windows vst on Linux.
  • wineasio is a Wine ASIO driver for JACK.
  • yabridge is a modern and transparent way to use Windows VST2 and VST3 plugins on Linux

System utilities - Network streaming/broadcasting

Back to the Top

  • autoradio is a radio automation software.
  • gpac is a GPAC Project on Advanced Content.
  • jamulus is a Low latency audio server/client for collaborative music sessions.
  • larigira is a radio automation software based on MPD.
  • Open Broadcaster Software is a recorder and streamer for live video content.
  • vlc-bin is a multimedia player and streamer (headless).
  • vlc is a multimedia player and streamer.
  • zita-njbridge is a Jack clients to transmit multichannel audio over a local IP network.

Audio Transcoding

Back to the Top

Transcoding is the process of converting an audio (including OGG, ACC, MP3, FLAC, Wave, and many others.) or video file from one encoding format to another in order to increase the number of compatible target devices that a media file can be played on.

  • ffmpeg - Tools for transcoding, streaming and playing of multimedia files.
  • qwinff - GUI for FFmpeg, a powerful command-line media converter. FFmpeg can read audio and video files in various formats and convert them into other formats.
  • winff - graphical video and audio batch converter using ffmpeg or avconv.
  • ambdec - Ambisonic decoder for first and second order.
  • audiotools - Collection of audio handling programs for the command line.
  • dir2ogg - audio file converter into ogg-vorbis format.
  • ffmpeg2theora - Theora video encoder using ffmpeg.
  • gigedit - instrument editor for Gigasampler files.
  • gigtools - command line tools for Gigasampler and DLS Level 1/2 files.
  • mediainfo-gui - graphical utility for reading information from audio/video files.
  • mediainfo - command-line utility for reading information from audio/video files.
  • mp3diags - find issues in MP3 files and help to solve them.
  • mp3splt-gtk - GTK interface to split MP3 and Ogg Vorbis files without re-encoding.
  • mp3val - program for MPEG audio stream validation.
  • sfarkxtc - Converts soundfonts from legacy sfArk v2 file format to sf2.
  • soundconverter - GNOME application to convert audio files into other formats.
  • zita-bls1 - binaural stereo signals converter.
  • lame - MP3 encoding library, frontend application, and other sound analysis/convenience tools.
  • vorbis-tools - OGG Vorbis encoder/decoder, player, information tool, and splitter.
  • mp3info - An MP3 technical info viewer and ID3 1.x tag editor.
  • puddletag - simple, powerful audio tag editor.
  • Ex Falso - audio tag editor for GTK+.

Installing PipeWire for Debian

Back to the Top


Note: PipeWire is default in Debian 12 and Linux Mint Dedbian Edition 6. The instructions below are for those still using Debian 10 and Debian 11.

Before you begin make sure to cd /etc/apt/sources.list.d in the terminal.

Install PipeWire

sudo apt install pipewire

Create this empty file:

# touch /etc/pipewire/media-session.d/with-pulseaudio

Create a pipewire-pulse service by copying the example files:

# cp /usr/share/doc/pipewire/examples/systemd/user/pipewire-pulse.* /etc/systemd/user/

Run these three commands as your regular user (not as root):

Check for new service files with:

systemctl --user daemon-reload

Disable and stop the PulseAudio service with:

systemctl --user --now disable pulseaudio.service pulseaudio.socket

Enable and start the new pipewire-pulse service with:

systemctl --user --now enable pipewire pipewire-pulse

This will configure PipeWire to activate its PulseAudio replacement daemon. Verify that it's enabled by running:

LANG=C pactl info | grep '^Server Name'

It should say Server Name: PulseAudio (on PipeWire 0.3.19).

To ensure this continues working after a reboot. You will need to "mask" the PulseAudio service by running:

systemctl --user mask pulseaudio

Installing PipeWire for Ubuntu

Back to the Top


Note: For those using Pop!_OS 22.04 or later PipeWire is already setup by default. PipeWire will be default starting with Ubuntu 22.10 (October 2022). So these install instructions are for those running older Ubuntu versions like 22.04 and 20.04 LTS releases.

Before you begin make sure to cd /etc/apt/sources.list.d in the terminal.

Install PipeWire

sudo apt install pipewire

Create this empty file:

# touch /etc/pipewire/media-session.d/with-pulseaudio

Create a pipewire-pulse service by copying the example files:

# cp /usr/share/doc/pipewire/examples/systemd/user/pipewire-pulse.* /etc/systemd/user/

Run these three commands as your regular user (not as root):

Check for new service files with:

systemctl --user daemon-reload

Disable and stop the PulseAudio service with:

systemctl --user --now disable pulseaudio.service pulseaudio.socket

Enable and start the new pipewire-pulse service with:

systemctl --user --now enable pipewire pipewire-pulse

This will configure PipeWire to activate its PulseAudio replacement daemon. Verify that it's enabled by running:

LANG=C pactl info | grep '^Server Name'

It should say Server Name: PulseAudio (on PipeWire 0.3.19).

To ensure this continues working after a reboot. You will need to "mask" the PulseAudio service by running:

systemctl --user mask pulseaudio

Installing PipeWire on openSUSE

Back to the Top


Note: With openSUSE TumbleWeed PipeWire comes installed already, but for openSUSE Leap you will need to install PipeWire.

Install PipeWire packages:

sudo zypper in pipewire pipewire-pulseaudio pipewire-alsa pipewire-aptx

Then enable pipewire sockets and session manager:

systemctl --user enable --now pipewire.socket

systemctl --user enable --now pipewire-pulse.socket

systemctl --user enable --now wireplumber.service

Installing PipeWire on Arch Linux

Back to the Top


Note: Helvum (GTK patchbay for PipeWire).

sudo pacman -S pipewire pipewire-alsa pipewire-pulse pipewire-jack wireplumber helvum

or

Note: qpwgraph (PipeWire Graph Qt GUI Interface).

sudo pacman -S pipewire pipewire-alsa pipewire-pulse pipewire-jack wireplumber qpwgraph

Then enable pipewire sockets and session manager:

systemctl --user enable --now pipewire.socket

systemctl --user enable --now pipewire-pulse.socket

systemctl --user enable --now wireplumber.service

Setting up OBS Studio

Back to the Top


OBS (Open Broadcaster Software) is free and open source software for video recording and live streaming. Stream to Twitch, YouTube and many other providers or record your own videos with high quality H264 / AAC encoding. OBS Studio added native PipeWire and Wayland support in version 27.

OBS Studio Flatpak on Flathub


OBS Studio

  • OBS PipeWire Audio Capture is a plugin adds 3 sources for OBS Studio tocapture audio outputs, inputs and applications using PipeWire.

  • OBS Scale To Sound is a plugin for OBS Studio that adds a filter which makes a source scale based on the audio levels of any audio source you choose.

  • OBS Studio Fully-loaded is a script for Ubuntu/Debian-based systems that installs OBS Studio along with pre-loaded extra features and plugins. This project is developed and maintained by Martin Wimpress.

Useful OBS Studio 3rd party plugins and themes.

  • Advanced Scene Switcher plugin; an automated scene switcher.
  • Audio Pan plugin; control stereo pan of audio source.
  • Browser plugin; CEF-based OBS Studio browser plugin.
  • Directory Watch Media plugin; filter you can add to media source to load the oldest or newest file in a directory.
  • Downstream Keyer plugin; add a Downstream Keyer dock.
  • Dynamic Delay plugin; filter for dynamic delaying a video source.
  • Freeze Filter plugin; freeze a source using a filter.
  • Gradient Source plugin; adding gradients as a Soource.
  • GStreamer plugins; feed GStreamer launch pipelines into OBS Studio and use GStreamer encoder elements.
  • Move Transition plugin; move source to a new position during scene transition.
  • Multi Source Effect plugin; provides a custom effect to render multiple sources.
  • NDI plugin; Network A/V via NewTek's NDI.
  • NvFBC plugin; screen capture via NVIDIA FBC API. Requires NvFBC patches for Nvidia drivers for consumer grade GPUs.
  • Pulse App Capture plugin; capture application audio from PulseAudio.
  • Soundboard plugin; adds a soundboard dock.
  • Source Copy plugin; adds copy and paste options to the tools menu.
  • Source Dock plugin; create a Dock for a source, which lets you see audio levels, change volume and control media.
  • Recursion Effect plugin; recursion effect filter.
  • Replay Source plugin; slow motion replay async sources from memory.
  • RGB Levels plugin; simple filter to adjust RGB levels.
  • RTSPServer plugin; encode and publish to a RTSP stream.
  • Scale to Sound plugin; adds a filter which makes a source scale based on the audio levels of any audio source you choose
  • Scene Collection Manager plugin; filter, backup and restore Scene Collections.
  • Scene Notes Dock plugin; create a Dock for showing and editing notes for the current active scene.
  • Source Record plugin; make sources available to record via a filter.
  • Source Switcher plugin; to switch between a list of sources.
  • Spectralizer plugin; audio visualization using fftw.
  • StreamFX plugin; collection modern effects filters and transitions.
  • Teleport plugin; open NDI-like replacement.
  • Text Pango plugin; Provides a text source rendered using Pango with multi-language support, emoji support, vertical rendering and RTL support.
  • Text PThread plugin; Rich text source plugin with many advanced features.
  • Time Warp Scan plugin; a time warp scan filter.
  • Transition Table plugin; customize scene transitions.
  • Virtual Cam Filter plugin; make sources available to the virtual camera via a filter
  • VNC Source plugin; VNC viewer that works as a source.
  • Websockets plugin; remote-control OBS Studio through WebSockets, compatible with StreamControl.

Wayland Development

Back to the Top


Wayland Learning Resources

Back to the Top

Wayland is a protocol for a compositor to talk to its clients as well as a C library implementation of that protocol. The compositor can be a standalone display server running on Linux kernel modesetting and evdev input devices, an X application, or a wayland client itself.

Wayland Tools

Back to the Top

Weston is a lightweight and functional Wayland compositor.

XWayland is an X Server running as a Wayland client(for backwards compatibility), allowing the Xorg server can be modified to use wayland input devices for input and forward either the root window or individual top-level windows as wayland surfaces.

KWin is the window manager for the KDE Plasma Desktop. It gives you complete control over your windows, making sure they're not in the way but aid you in your task. It paints the window decoration, the bar on top of every window with (configurable) buttons like close, maximize and minimize.

Qt is the faster, smarter way to create innovative devices, modern UIs & applications for multiple screens. It is one of the most popular toolkits for the Wayland and X11 windowing.

GTK is a free and open source cross-platform widget toolkit for creating graphical user interfaces developed by GNOME Project. It is one of the most popular toolkits for the Wayland and X11 windowing.

NVIDIA Wayland EGL External Platform library is a work-in-progress implementation of a EGL External Platform library to add client-side Wayland support to EGL on top of EGLDevice and EGLStream families of extensions.

NVIDIA EGL External Platform Interface is a work-in-progress specification of the EGL External Platform interface for writing EGL platforms and their interactions with modern window systems on top of existing low-level EGL platform implementations. This keeps window system implementation specifics out of EGL drivers by using application-facing EGL functions.

Sway is an i3-compatible Wayland compositor.

wlroots is a modular Wayland compositor library.

WayfireWM is a 3D Wayland compositor, inspired by Compiz and based on wlroots.

SDDM is a modern display manager for X11 and Wayland aiming to be fast, simple and beautiful. It uses modern technologies like QtQuick, which in turn gives the designer the ability to create smooth, animated user interfaces.

x11docker is an application that you allows to run graphical desktop applications (and entire desktops) in Docker Linux containers.

Mako is alightweight notification daemon for Wayland. It also works on Sway.

Wayland-rs is a Rust implementation of the wayland protocol (client and server).

Wine-wayland is an application that allows you to running DX9/DX11 and Vulkan games using pure Wayland and Wine/DXVK.

Contribute

  • If would you like to contribute to this guide simply make a Pull Request.

License

Back to the Top

Distributed under the Creative Commons Attribution 4.0 International (CC BY 4.0) Public License.