Archlinux & Pipewire - Ardour 1,7ms Latency vs. Reaper 11ms

Optimize your system for ultimate performance.

Moderators: MattKingUSA, khz

Post Reply
l0calh0r5t
Posts: 1
Joined: Sat Oct 28, 2023 7:38 pm

Archlinux & Pipewire - Ardour 1,7ms Latency vs. Reaper 11ms

Post by l0calh0r5t »

Hi.

I'm hoping somebody can point me into the right direction. Everything I try, any settings-change doesn't show any change on reaper-side. I always end up having 11ms of latency. In contrast: When running ardour, I get 1,7ms out of the box. Since I'm out of ideas right now, I decided to ask here in the forum, hoping someone can assist me.

Would be a dream to finally switch from Windooze to Arch also for audio-stuff :-)

If I missed some information, just let me know.

Reaper - Settings

  • Audio System: Jack
  • 48kHz 24Bit Wav
  • 2/2ch 64 spls ~ 11/11ms JACK

Hardware

  • Behringer UMC 204 HD

OS

  • Archlinux

Kernel

Code: Select all

uname -a
    
Linux TH3M4CH1N3 6.5.7-arch1-1 #1 SMP PREEMPT_DYNAMIC Tue, 10 Oct 2023 21:10:21 +0000 x86_64 GNU/Linux

Inxi

Code: Select all

inxi -Aa                                                                                                                                                                    
Audio: Device-1: AMD Renoir Radeon High Definition Audio driver: snd_hda_intel v: kernel pcie: gen: 3 speed: 8 GT/s lanes: 16 link-max: gen: 4 speed: 16 GT/s bus-ID: 05:00.1 chip-ID: 1002:1637 class-ID: 0403 Device-2: AMD ACP/ACP3X/ACP6x Audio Coprocessor vendor: Hewlett-Packard driver: N/A pcie: gen: 3 speed: 8 GT/s lanes: 16 link-max: gen: 4 speed: 16 GT/s bus-ID: 05:00.5 chip-ID: 1022:15e2 class-ID: 0480 Device-3: AMD Family 17h/19h HD Audio vendor: Hewlett-Packard driver: snd_hda_intel v: kernel pcie: gen: 3 speed: 8 GT/s lanes: 16 link-max: gen: 4 speed: 16 GT/s bus-ID: 05:00.6 chip-ID: 1022:15e3 class-ID: 0403 Device-4: BEHRINGER GmbH UMC204HD 192k driver: snd-usb-audio type: USB rev: 2.0 speed: 480 Mb/s lanes: 1 mode: 2.0 bus-ID: 1-1.1.2:44 chip-ID: 1397:0508 class-ID: fe01 API: ALSA v: k6.5.7-arch1-1 status: kernel-api tools: alsactl,alsamixer,amixer Server-1: PipeWire v: 0.3.83 status: n/a (root, process) with: 1: pipewire-pulse status: active 2: wireplumber status: active 3: pw-jack type: plugin tools: pactl,pw-cat,pw-cli,wpctl

Packages

Code: Select all

pacman -Ss pipewire | grep installed                                                                                                                                       

extra/gst-plugin-pipewire 1:0.3.83-1 [installed]
extra/libpipewire 1:0.3.83-1 [installed]
extra/libwireplumber 0.4.15-1 [installed]
extra/pipewire 1:0.3.83-1 [installed]
extra/pipewire-audio 1:0.3.83-1 [installed]
extra/pipewire-docs 1:0.3.83-1 [installed]
extra/pipewire-jack 1:0.3.83-1 [installed]
extra/pipewire-pulse 1:0.3.83-1 [installed]
extra/qemu-audio-pipewire 8.1.2-1 [installed]
extra/qpwgraph 0.5.3-1 (pro-audio) [installed]
extra/wireplumber 0.4.15-1 [installed]

Versions

Code: Select all

pipewire --version
    Compiled with libpipewire 0.3.83
    Linked with libpipewire 0.3.83

wireplumber --version
    Compiled with libwireplumber 0.4.15
    Linked with libwireplumber 0.4.15

Reaper Version

Code: Select all

pacman -Qi reaper

Name            : reaper
Version         : 7.001-1
Description     : A complete digital audio production application for computers
Architecture    : x86_64
URL             : https://reaper.fm
Licenses        : custom
Groups          : pro-audio
Provides        : clap-host  lv2-host  vst-host  vst3-host
Depends On      : aribb24  alsa-lib  libasound.so=2-64  fontconfig  gcc-libs  glibc  hicolor-icon-theme  libglvnd  libx11  libxi
Optional Deps   : ffmpeg4.4: for video rendering [installed]
                  jack: for JACK support [installed]
                  pulseaudio: for PulseAudio support [installed]
                  python: for Python plugins [installed]
                  reapack: for managing reaper plugins
                  sws: for the SWS/S&M plugin extension
Required By     : adlplug-lv2  aida-x-lv2  ambix-lv2  avldrums.lv2  blop.lv2  bshapr  cardinal-lv2  distrho-ports-lv2  distrho-ports-vst  
                  drumgizmo-lv2  eteroj.lv2  fomp.lv2  geonkick-lv2  gxplugins.lv2  helm-synth-lv2  infamousplugins  ir.lv2  liquidsfz-lv2
                  ninjas2-lv2  noise-repellent  ob-xd-lv2  odin2-synthesizer-lv2  padthv1-lv2  qmidiarp-lv2  rubberband-lv2  samplv1-lv2  
                  spectmorph-lv2  surge-xt-lv2  wolf-shaper-lv2  x42-plugins-lv2  yoshimi-lv2  zam-plugins-lv2
Optional For    : linuxsampler
Conflicts With  : None
Replaces        : None
Installed Size  : 116,58 MiB
Packager        : David Runge <dvzrv@archlinux.org>
Build Date      : Mi 18 Okt 2023 07:30:19 CEST
Install Date    : Mi 18 Okt 2023 12:16:17 CEST
Install Reason  : Explicitly installed
Install Script  : No
Validated By    : Signature

Directory Permissions /etc/pipewire directory

Code: Select all

    
-rw-r----- 1 root root 2673 27. Okt 20:48 client.conf drwxr-x--- 2 root root 4096 27. Okt 20:48 client.conf.avail -rw-r----- 1 root root 4154 27. Okt 20:48 client-rt.conf drwxr-x--- 2 root root 4096 27. Okt 20:48 client-rt.conf.avail drwxr-x--- 2 root root 4096 27. Okt 20:48 filter-chain -rw-r----- 1 root root 1926 27. Okt 20:48 filter-chain.conf -rw-r----- 1 root root 4238 27. Okt 20:48 jack.conf drwxr-x--- 2 root root 4096 27. Okt 20:48 media-session.d -rw-r----- 1 root root 13292 27. Okt 20:48 minimal.conf -rw-r----- 1 root root 4178 27. Okt 20:48 pipewire-aes67.conf -rw-r----- 1 root root 2033 27. Okt 20:48 pipewire-avb.conf -rw-r----- 1 root root 12011 27. Okt 20:48 pipewire.conf drwxr-x--- 2 root root 4096 27. Okt 20:48 pipewire.conf.avail -rw-r----- 1 root root 6031 27. Okt 20:48 pipewire-pulse.conf drwxr-x--- 2 root root 4096 27. Okt 20:48 pipewire-pulse.conf.avail

Groups & Users

Code: Select all

id
    uid=1000(my_username) gid=984(users) groups=984(users),108(vboxusers),955(realtime),996(audio),998(wheel)

grep audio /etc/group /etc/passwd                    
                                                     
audio:x:996:brltty,my_username

Limits

Code: Select all


 /etc/security/limits.d/audio-rt.conf

### Test
@audio          hard    rtprio      95
@audio          soft    rtprio      95
@audio          hard    memlock     unlimited
@audio          soft    memlock     unlimited
@audio          soft    nofile      802442
@audio          hard    nofile      802442
@realtime       hard    rtprio      95
@realtime       soft    rtprio      95
@realtime       hard    memlock     unlimited
@realtime       soft    memlock     unlimited
@realtime       soft    nofile      802442
@realtime       hard    nofile      802442

My jack.conf

Code: Select all

grep -v "#" /etc/pipewire/jack.conf

context.properties = {
    log.level        = 0

}

context.spa-libs = {
    support.* = support/libspa-support
}

context.modules = [
    { name = libpipewire-module-rt
        args = {
        }
        flags = [ ifexists nofail ]
    }

{ name = libpipewire-module-protocol-native }

{ name = libpipewire-module-client-node }

{ name = libpipewire-module-metadata }
]

jack.properties = {
     node.latency       = 64/48000
     node.rate          = 1/48000
     node.quantum       = 64/48000
     node.lock-quantum  = true
}

jack.rules = [
    {   matches = [
            {
            }
        ]
        actions = {
            update-props = {
                node.latency = 64/48000
            }
        }
    }
    {   matches = [ { application.process.binary = "jack_bufsize" } ]
        actions = {
            update-props = {
            }
        }
    }
    {   matches = [ { application.process.binary = "qsynth" } ]
        actions = {
            update-props = {
            }
        }
    }
    {   matches = [ { client.name = "Mixxx" } ]
        actions = {
            update-props = {
                jack.merge-monitor = false
            }
        }
    }
]

My Pipewire Conf

Code: Select all

grep -v "#" /etc/pipewire/pipewire.conf

context.properties = {


default.clock.rate          = 48000
default.clock.quantum       = 64
vm.overrides = {
    default.clock.min-quantum = 1024
}

module.x11.bell = true
module.access = true
}

context.spa-libs = {
    audio.convert.* = audioconvert/libspa-audioconvert
    avb.*           = avb/libspa-avb
    api.alsa.*      = alsa/libspa-alsa
    api.v4l2.*      = v4l2/libspa-v4l2
    api.libcamera.* = libcamera/libspa-libcamera
    api.bluez5.*    = bluez5/libspa-bluez5
    api.vulkan.*    = vulkan/libspa-vulkan
    api.jack.*      = jack/libspa-jack
    support.*       = support/libspa-support
}

context.modules = [

{ name = libpipewire-module-rt
    args = {
        nice.level    = -11
    }
    flags = [ ifexists nofail ]
}

{ name = libpipewire-module-protocol-native }

{ name = libpipewire-module-profiler }

{ name = libpipewire-module-metadata }

{ name = libpipewire-module-spa-device-factory }

{ name = libpipewire-module-spa-node-factory }

{ name = libpipewire-module-client-node }

{ name = libpipewire-module-client-device }

{ name = libpipewire-module-portal
    flags = [ ifexists nofail ]
}

{ name = libpipewire-module-access
    args = {



    }
    condition = [ { module.access = true } ]
}

{ name = libpipewire-module-adapter }

{ name = libpipewire-module-link-factory }

{ name = libpipewire-module-session-manager }

{ name = libpipewire-module-x11-bell
    args = {
    }
    flags = [ ifexists nofail ]
    condition = [ { module.x11.bell = true } ]
}
]

context.objects = [

{ factory = spa-node-factory
    args = {
        factory.name    = support.node.driver
        node.name       = Dummy-Driver
        node.group      = pipewire.dummy
        priority.driver = 20000
    }
}
{ factory = spa-node-factory
    args = {
        factory.name    = support.node.driver
        node.name       = Freewheel-Driver
        priority.driver = 19000
        node.group      = pipewire.freewheel
        node.freewheel  = true
    }
}



]

context.exec = [
]
glowrak guy
Established Member
Posts: 2331
Joined: Sat Jun 21, 2014 8:37 pm
Been thanked: 257 times

Re: Archlinux & Pipewire - Ardour 1,7ms Latency vs. Reaper 11ms

Post by glowrak guy »

First concern is 'audible' latency, second is 'experiential' latency. If you play a note, and you can discern a time lapse
before you hear the note, that's audible. If when you're playing using headphones or hearing monitors, and it just 'feels weird',
that's experiential. There is some linkage between the two, but if neither exist, ignore the numbers. Coders are not equal in how
their numbers are made to show up, and it's just math, meaningless to a recording musician who can play smoothly.
A live guitarist, playing 20 feet from the amps, has more than 11ms of latency.

I try to shut off and disconnect everything not musically needed when recording. My Reaper 6.82 linux version numbers are below.
Have you checked the Reaper project settings so they match your system audio settings?

reaper-latency.jpg
reaper-latency.jpg (7.81 KiB) Viewed 2209 times
martibs
Established Member
Posts: 123
Joined: Mon Oct 15, 2018 7:06 pm
Location: Oslo, Norway
Has thanked: 35 times
Been thanked: 15 times

Re: Archlinux & Pipewire - Ardour 1,7ms Latency vs. Reaper 11ms

Post by martibs »

Have you also tried to measure the actual round trip latency?

Post Reply