Deze pagina ais voor het laatst ge-update 25 juni 2022
Ik heb nog veel problemen om helemaal goed te begrijpen hoe pipewire precies werkt. Het eerste wat ik uit moest zoeken is hoe ik de latency instel die pipewire moet gebruiken op mijn systeem. In dit geval mijn Laptop die ik vooral als pipewire testplatform gebruik (specificaties zijn te vinden op deze pagina).
Latency is belangrijk voor mij als iemand die veelal live instrumenten gebruikt. Een grote latency zorgt ervoor dat er veel tijd kan zitten tussen het produceren van een geluid en wanneer dat geluid uit de luidspreker van de computer komt. Die tijd tussen maken van geluid en het horen van dat geluid op de computer wil ik zo laag mogelijk houden.
Standaard staat PipeWire ingesteld om 1024 frames te gebruiken op met een sample rate van 48000Hz. Het is te complex om uit te leggen wat frames en sample rates en hoe ze van invloed zijn op het maken van opnames. Op deze pagina staat een redelijk beschrijving voor het afspelen van audio om een idee te krijgen. Dit geeft op mijn systeem een latency van ongeveer 24 milliseconden, dit levert een soort van echo effect op wat erg hinderlijk is.
TL;DR
In de eerste gebruik ik de volgende opdracht om Ardour te openen:
PIPEWIRE_LATENCY=128/48000 flatpak run org.ardour.Ardour
In de tweede gebruik ik de volgende opdracht om Carla te openen:
PIPEWIRE_LATENCY=128/48000 flatpak run studio.kx.carla
In de derde controleer ik of de instellingen zijn overgenomen door pipewire:
pw-top
Standaard manier:
De standaard instellingen van pipewire geven een latency van ongeveer 24 milleseconden op mijn systeem. Op mijn vorige Pulse/Jack/ALSA installatie kon ik betrouwbaar een latency van ongeveer 1 milliseconden bereiken, wat bijna niet hoor- of merkbaar was.
Ik geloof dat de door pipewire geprefereerde manier is om het hele systeem op de volgende manier in te stellen met een terminal command:
Om de sample rate in te stellen gebruik je:
pw-metadata -n settings 0 clock.force-rate 44100
Om frames (PipeWire gebruikt de term quantum’s) in te stellen gebruik je:
pw-metadata -n settings 0 clock.force
Deze methodiek geeft op mijn systeem echter veel problemen (waarschijnlijk dat ik zaken nog niet goed geconfigureerd heb). Zo beginnen sommige programma’s langzaam of snel audio af te spelen, of worden video’s vertraagd of versneld afgespeeld.
Mijn manier:
Persoonlijk kan ik het voorlopig alleen op de volgende manier, betrouwbaar, voor elkaar krijgen. Ik moet ieder programma wat ik opstart wat ik met een bepaalde frame/sample rate wil gebruiken apart opstarten met die instellingen. Erg terminal-lastig allemaal, jammer genoeg.
Ik gebruik(te) voor deze test de volgende PipeWire versie:
$ pipewire --version
pipewire
Compiled with libpipewire 0.3.51
Linked with libpipewire 0.3.51
Op het internet kwam ik de volgende methodiek tegen om individuele programma’s op te starten met een bepaalde pipewire latency instelling (als ik het goed begrepen heb gebruikt pipewire standaard 1024/48000):
PIPEWIRE_LATENCY=128/48000 Ardour
Dit werkt echter op mijn systeem niet omdat ik bijna alles overgezet heb naar flatpak’s, om flatpak’s op te starten in een terminal kan het volgende gebruikt worden:
flatpak run org.ardour.Ardour
Ik wist nog niet welke frame rate de audiochip op mijn laptop standaard gebruikt, dit is vaak 48000Hz, maar soms kan het 44100Hz zijn. Met de volgende terminal opdracht:
pactl list sinks
kreeg ik de volgende informatie:
Sink #1236
State: SUSPENDED
Name: alsa_output.pci-0000_06_00.6.analog-stereo
Description: Family 17h (Models 10h-1fh) HD Audio Controller Analoog stereo
Driver: PipeWire
Sample Specification: s32le 2ch 48000Hz
Channel Map: front-left,front-right
Owner Module: 4294967295
Mute: no
Volume: front-left: 62912 / 96% / -1,06 dB, front-right: 62912 / 96% / -1,06 dB
balance 0,00
Base Volume: 65536 / 100% / 0,00 dB
Monitor Source: alsa_output.pci-0000_06_00.6.analog-stereo.monitor
Latency: 0 usec, configured 0 usec
Flags: HARDWARE HW_MUTE_CTRL HW_VOLUME_CTRL DECIBEL_VOLUME LATENCY
Properties:
alsa.card = "1"
alsa.card_name = "HD-Audio Generic"
alsa.class = "generic"
alsa.device = "0"
alsa.driver_name = "snd_hda_intel"
alsa.id = "ALC274 Analog"
alsa.long_card_name = "HD-Audio Generic at 0xfc5c0000 irq 107"
alsa.name = "ALC274 Analog"
alsa.resolution_bits = "16"
alsa.subclass = "generic-mix"
alsa.subdevice = "0"
alsa.subdevice_name = "subdevice #0"
api.alsa.card.longname = "HD-Audio Generic at 0xfc5c0000 irq 107"
api.alsa.card.name = "HD-Audio Generic"
api.alsa.path = "front:1"
api.alsa.pcm.card = "1"
api.alsa.pcm.stream = "playback"
audio.channels = "2"
audio.position = "FL,FR"
card.profile.device = "3"
device.api = "alsa"
device.class = "sound"
device.id = "100"
device.profile.description = "Analoog stereo"
device.profile.name = "analog-stereo"
device.routes = "2"
factory.name = "api.alsa.pcm.sink"
media.class = "Audio/Sink"
device.description = "Family 17h (Models 10h-1fh) HD Audio Controller Analoog stereo"
node.name = "alsa_output.pci-0000_06_00.6.analog-stereo"
node.nick = "ALC274 Analog"
node.pause-on-idle = "false"
object.path = "alsa:pcm:1:front:1:playback"
priority.driver = "1009"
priority.session = "1009"
factory.id = "18"
client.id = "34"
clock.quantum-limit = "8192"
node.driver = "true"
factory.mode = "merge"
audio.adapt.follower = ""
library.name = "audioconvert/libspa-audioconvert"
object.id = "46"
object.serial = "1236"
node.max-latency = "16384/48000"
Ports:
analog-output-speaker: Luidsprekers (
type: Speaker,
priority: 10000,
availability group: Legacy 3,
availability unknown)
analog-output-headphones: Analoge koptelefoon (
type: Headphones,
priority: 9900,
availability group: Legacy 4,
not available)
Active Port: analog-output-speaker
Formats:
pcm
Dan is de sample rate dus 48000Hz:
Sample Specification: s32le 2ch 48000Hz
Op een Pulse/Jack/ALSA systeem was ik gewent om dan met de sample rate in de hand goede instellingen op te zoeken die “veilig” waren om te gebruiken. Eén van die lijsten is hier te vinden op de website van Linux Musicians (onmisbaar als je audio produceert op een GNU / Linux systeem).
Ik ben van plan de volgde instellingen te gaan testen op mijn systeem:
- 16 / 48000
- 32 / 48000
- 64 / 48000
- 128 / 48000 (geeft in Ardour een latency van ongeveer 2,7ms op mijn systeem)
- 256 / 48000
- 512 / 48000
- 1024 / 48000 (geeft in Ardour een latency van ongeveer 24 ms op mijn systeem)
- 2048 / 48000
Om de systeem namen van flatpak’s te vinden gebruik ik de volgende terminal opdracht:
flatpak --user --columns=name,app list
Dit geeft de volgende output:
Name Application ID
Arduino IDE cc.arduino.arduinoide
Metronome com.adrienplazas.Metronome
GitKraken com.axosoft.GitKraken
Discord com.discordapp.Discord
Barrier com.github.debauchee.barrier
Flatseal com.github.tchx84.Flatseal
Nextcloud Desktop com.nextcloud.desktopclient.nextcloud
OBS Studio com.obsproject.Studio
Transmission com.transmissionbt.Transmission
Audio Sharing de.haeckerfelix.AudioSharing
HandBrake fr.handbrake.ghb
Ardour org.ardour.Ardour
Audacity org.audacityteam.Audacity
Codecs org.audacityteam.Audacity.Codecs
Chromium Web Browser org.chromium.Chromium
Codecs org.chromium.Chromium.Codecs
TAP-plugins org.freedesktop.LinuxAudio.Plugins.TAP
SWH org.freedesktop.LinuxAudio.Plugins.swh
Freedesktop Platform org.freedesktop.Platform
Mesa org.freedesktop.Platform.GL.default
Mesa org.freedesktop.Platform.GL.default
nvidia-510-68-02 org.freedesktop.Platform.GL.nvidia-510-68-02
ffmpeg-full org.freedesktop.Platform.ffmpeg-full
openh264 org.freedesktop.Platform.openh264
Freedesktop SDK org.freedesktop.Sdk
Fritzing org.fritzing.Fritzing
GNU Image Manipulation Program org.gimp.GIMP
Déjà Dup-back-ups org.gnome.DejaDup
Gnome Klotski org.gnome.Klotski
Logboeken org.gnome.Logs
Gnome Mijnenveger org.gnome.Mines
GNOME Application Platform version 40 org.gnome.Platform
GNOME Application Platform version 41 org.gnome.Platform
GNOME Application Platform version 42 org.gnome.Platform
Polari org.gnome.Polari
Klok org.gnome.clocks
gThumb-afbeeldingsweergave org.gnome.gThumb
Pop Gtk theme org.gtk.Gtk3theme.Pop-dark
Inkscape org.inkscape.Inkscape
Adwaita theme org.kde.KStyle.Adwaita
KDE Application Platform org.kde.Platform
QGnomePlatform org.kde.PlatformTheme.QGnomePlatform
QtSNI org.kde.PlatformTheme.QtSNI
Kdenlive org.kde.kdenlive
Krita org.kde.krita
Mixxx DJ Software org.mixxx.Mixxx
Helvum org.pipewire.Helvum
Signal Desktop org.signal.Signal
Telegram Desktop org.telegram.desktop
Telegram Desktop Webview Add-on org.telegram.desktop.webview
VLC org.videolan.VLC
Carla studio.kx.carla
Met deze informatie kan ik de volgende opdracht samenstellen om Ardour op te starten in een terminal:
PIPEWIRE_LATENCY=128/48000 flatpak run org.ardour.Ardour
Dit geeft de volgende informatie in de terminal:
WARNING: Your system has a limit for maximum amount of locked memory!
This might cause Ardour to run out of memory before your system runs
out of memory. You can view the memory limit with 'ulimit -l', and it
is normally controlled by /etc/security/limits.conf
WARNING: Could not check your glib-2.0 for mutex locking atomic operations.
Ardour6.9.0 (built using 6.9 and GCC version 11.2.0)
Ardour: [INFO]: Your system is configured to limit Ardour to 1048576 open files
Ardour: [INFO]: Loading system configuration file /app/etc/ardour6/system_config
Ardour: [INFO]: Loading user configuration file /home/remco/.var/app/org.ardour.Ardour/config/ardour6/config
Ardour: [INFO]: CPU vendor: AuthenticAMD
Ardour: [INFO]: AVX-capable processor
Ardour: [INFO]: AVX with FMA capable processor
Ardour: [INFO]: CPU brand: AMD Ryzen 7 5800H with Radeon Graphics
Ardour: [INFO]: Using AVX and FMA optimized routines
Ardour: [INFO]: Loading plugin meta data file /app/share/ardour6/plugin_metadata/plugin_tags
Cannot xinstall SIGPIPE error handler
Ardour: [INFO]: Loading default ui configuration file /app/etc/ardour6/default_ui_config
Ardour: [INFO]: Loading user ui configuration file /home/remco/.var/app/org.ardour.Ardour/config/ardour6/ui_config
Ardour: [INFO]: Loading 452 MIDI patches from /app/share/ardour6/patchfiles
Gtk-Message: 12:00:08.693: Failed to load module "gail"
Gtk-Message: 12:00:08.693: Failed to load module "atk-bridge"
Gtk-Message: 12:00:08.693: Failed to load module "appmenu-gtk-module"
Gtk-Message: 12:00:08.696: Failed to load module "canberra-gtk-module"
Ardour: [INFO]: Loading color file /app/share/ardour6/themes/dark-ardour.colors
Ardour: [INFO]: Loading ui configuration file /app/etc/ardour6/clearlooks.rc
Ardour: [INFO]: Loading bindings from /app/etc/ardour6/ardour.keys
Loading ui configuration file /app/etc/ardour6/clearlooks.rc
Found nothing along /home/remco/.var/app/org.ardour.Ardour/config/ardour6/templates:/app/share/ardour6/templates
Scanning folders for bundled LV2s: /app/lib/ardour6/LV2
Set cursor set to default
Als het goed is, is nu ook Ardour geopend. Zolang Ardour goed werkt is er niet al te veel reden om te veel zorgen te hebben over de waarschuwingen in de terminal.
Deze instellingen geeft op mijn systeem de volgende latency in Ardour:
Met een tweede terminal venster open ik Carla met dezelfde latency instellingen als Ardour (128/48000) om de audio sources/sinks met elkaar te kunnen verbinden. Ik gebruik Carla omdat ik dit programma ken. Het programma Helvum kan ook gebruikt worden, maar heeft zeer beperkte mogelijkheden. Er zijn nog een paar meer van dit soort programmaś voor pipewire te vinden. Er zal in de toekomst vast een artikel komen op deze website waar ik beschrijf dat ik ben afgestapt van Carla.
PIPEWIRE_LATENCY=128/48000 flatpak run studio.kx.carla
Geeft de volgende output:
LRDF Support not available (LADSPA-RDF will be disabled)
Gtk-Message: 12:11:34.927: Failed to load module "appmenu-gtk-module"
Gtk-Message: 12:11:34.971: Failed to load module "canberra-gtk-module"
Gtk-Message: 12:11:34.971: Failed to load module "canberra-gtk-module"
Qt: Session management error: Could not open network socket
Carla 2.4.3 started, status:
Python version: 3.9.9
Qt version: 5.15.3
PyQt version: 5.15.6
Binary dir: /app/lib/carla
Resources dir: /app/share/carla/resources
Frontend pixel ratio is 1.0
libjack.so.0 loaded successfully!
Met de volgende opdracht kun je zien dat pipewire de instellingen heet overgenomen:
pw-top
geeft de volgende output: