[HowTo] Troubleshoot crackling in PipeWire

If anyone is using Pipewire and suffering from EasyEffects or JamesDSP being killed by the system:
Install realtime-privileges package then add user to realtime group and reboot.

Disable Pipewire Suspend on Idle to avoid audio pops, delays, and white noise

start by copying an existing alsa config script over to the right place, after which we can make our own modifications to it:

sudo cp -a /usr/share/wireplumber/main.lua.d/50-alsa-config.lua /etc/wireplumber/main.lua.d/50-alsa-config.lua

At the very end of this file, you’ll notice the session.suspend-timout-seconds value that, by default, is set to 5 seconds. There’s a note there that already mentions what we want to achieve, so let’s un-comment-out that line and change its value to read 0 instead:

alsa_monitor.rules = {
  
  -- (...abbreviated for legibility...)
  
  {
    apply_properties = {
      -- (...abbreviated for legibility...)
      ["session.suspend-timeout-seconds"] = 0, -- default is 5
    },
  },
}

restart the wireplumber service and it should immediately pick up on this new configuration:

systemctl --user restart wireplumber

I could not find the lua file anymore at this path: /usr/share/wireplumber/main.lua.d/50-alsa-config.lua And no folder main.lua.d folder

According to the reference page: The configuration file — WirePlumber 0.5.6 documentationLua configuration files are no longer supported” and I got none.
I did reset Pipewire and Wireplumber Restoring PipeWire and Wireplumber settings to default - #4 by nikgnomic but crackling still occurs.
Any ideas where I could put the session.suspend-timout-seconds value to 0?

According to Migrating configuration from 0.4 — WirePlumber 0.5.6 documentation, you first need to completely remove (or rename) the old wireplumber.conf file:

If you attempt to start it with a wireplumber.conf that still lists config/lua components in its wireplumber.components section, you will see the following error message on the output:

Failed to load configuration: The configuration file at ‘…’ is likely an old WirePlumber 0.4 config and is not supported anymore. Try removing it.

As the message says, to resolve this you should remove the old wireplumber.conf file from the designated location. This should allow the new WirePlumber to start using the default configuration that it ships with.

Where the new configuration files go (if the configuration is to apply to an individual user account):

The first thing you need to know is that the new files should be placed in the ~/.config/wireplumber/wireplumber.conf.d/ directory instead of ~/.config/wireplumber/main.lua.d/ and such …

In addition, since the new files are in the SPA-JSON format, they should have the .conf extension instead of .lua.

For a system-wide configuration, according to Changes in wireplumber 0.5 and settings / Multimedia and Games / Arch Linux Forums, you should place the wireplumber configuration files in:

/etc/wireplumber/wireplumber.conf.d/ (you may need to create that directory).

The suspend configuration file (from the same Arch Forum post):

51-disable-suspension.conf

monitor.alsa.rules = [
  {
    matches = [
      {
        node.name = "~alsa_input.*"
      }
      {
        node.name = "~alsa_output.*"
      }
    ]
    actions = {
      update-props = {
        session.suspend-timeout-seconds = 0
      }
    }
  }
]

Thank you for your explanations.
I’ve really tried to understand all this mess… but now I gave up.
I’m now thinking to get rid of pipewire and wireplumber and to go back to old good Jack and pulseaudio :roll_eyes: