When sound comes out of 2 devices on the same time one of them is delayed

Hello, I use helvum in order to make sound come out of 2 devices at once. It doesn’t work very well, when I play music using the rhythmbox application, the jbl speaker is late. Also, each time I skip a song I have to redo the graph. This is how it looks in helvum.


Any way to fix my issues will be much appreciated, thanks.

There is often a delay playing sound over bluetooth.
You may be able to add a fixed delay to the other audio path.

This is done all the time in movie players to make lip-sync work.

Sorry, I do not know how to do this in pipewire (a quick web search did not turn up any useful info).

1 Like

I have a bash script which does everything for me now.

#!/bin/bash

# Dynamically detect sinks
BT_SINK=$(pactl list short sinks | grep bluez | awk '{print $2}')
WIRED_SINK=$(pactl list short sinks | grep Headphones | awk '{print $2}')
COMBINED_SINK_NAME="combined_sync"

if [[ -z "$BT_SINK" || -z "$WIRED_SINK" ]]; then
  echo "❌ Couldn't detect one or both sinks."
  echo "Bluetooth: $BT_SINK"
  echo "Headphones: $WIRED_SINK"
  exit 1
fi

echo "🎧 Detected sinks:"
echo "Bluetooth → $BT_SINK"
echo "Headphones → $WIRED_SINK"

pactl unload-module module-combine-sink &>/dev/null
pactl unload-module module-loopback &>/dev/null

echo "Creating combined sink..."
pactl load-module module-combine-sink \
    sink_name=$COMBINED_SINK_NAME \
    slaves=$BT_SINK,$WIRED_SINK \
    adjust_time=true

pactl load-module module-loopback \
    source=${COMBINED_SINK_NAME}.monitor \
    sink=$WIRED_SINK \
    latency_msec=400 \
    latency_compensate=false

echo " Done!"
2 Likes