Fixing SMSL USB DAC Popping on Notifications (PipeWire + WirePlumber)

Problem

SMSL USB AUDIO DAC (Thesycon 152a:85dd) produces audible pops/clicks when notifications or other short sounds play after a period of silence.

Root Cause

WirePlumber suspends audio nodes after 5 seconds of idle time (suspend-node.lua). When a sound plays, PipeWire has to reopen the ALSA device, causing a pop from the USB DAC powering back up.

Confirmed by checking node state going running -> idle -> suspended via pw-top and pw-cli.

Environment

  • OS: CachyOS (Arch-based)
  • PipeWire: 1.6.4
  • WirePlumber: 0.5.14
  • DAC: SMSL USB AUDIO (usb-SMSL_SMSL_USB_AUDIO-00, card 0)
  • Node name: alsa_output.usb-SMSL_SMSL_USB_AUDIO-00.analog-stereo

Fix

1. Disable Auto-Suspend for the DAC

Create ~/.config/wireplumber/wireplumber.conf.d/10-smsl-dac-no-suspend.conf:

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

Setting session.suspend-timeout-seconds = 0 causes the suspend-node.lua hook to skip suspending this node. After audio plays, the node stays in "idle" with the ALSA device open instead of closing it.

2. Tune PipeWire Quantum (Optional)

Create ~/.config/pipewire/pipewire.conf.d/10-quantum-tuning.conf:

context.properties = {
  default.clock.rate = 48000
  default.clock.quantum = 1024
  default.clock.min-quantum = 256
  default.clock.max-quantum = 2048
}

Larger quantum buffers reduce the chance of xruns with USB audio devices.

3. Apply Changes

systemctl --user restart wireplumber pipewire pipewire-pulse

Verification

  1. Play a sound to wake the DAC:
   speaker-test -D default -c 2 -l 1 -t sine -f 1000
  1. Wait 10+ seconds and check node state:
   pw-cli info <NODE_ID> | grep state

Should show "idle"not "suspended".

  1. Confirm the suspend timeout property is set:
   wpctl inspect <NODE_ID> | grep suspend-timeout

Should show session.suspend-timeout-seconds = "0".

  1. Check the ALSA device stays open:
   cat /proc/asound/card0/pcm0p/sub0/hw_params

Should show active format/rate instead of closed.

Find the current node ID with wpctl status.

Notes

  • The first sound after a fresh reboot may still produce a pop — this is the DAC hardware initializing and only happens once.
  • The rule uses a regex match (~alsa_output.usb-SMSL_SMSL_USB_AUDIO.*) to match all profiles (analog-stereo, etc.) on the SMSL device.
  • This same approach works for other USB DACs — adjust the node.name pattern to match your device.

Leave a Reply

Your email address will not be published. Required fields are marked *