Commit 7a54a1f8 by PLN (Algolia)

fix(gig-up): launch Ardour through pw-jack — one audio server, not two

The night rose_rouge first played on the new laptop, this cost an hour and
presented as three unrelated faults.

Both jackd2 and pipewire-jack are installed, and ldconfig resolves libjack.so.0
to JACKD2's — nothing in ld.so.conf.d prefers PipeWire's. So a plain `ardour` on
the JACK backend finds no jackd server, STARTS one, and jackd claims a card
through the D-Bus device reservation. Observed: jackd came up on `hw:NVidia,3`
and reserved Audio0, so Ardour's audio left by an HDMI port with nothing plugged
into it, while scsynth sat in PipeWire's graph on the speakers. Two graphs that
could not see each other — qjackctl listed Ardour and no SuperCollider, and
nothing was audible from anywhere.

And the ALSA backend is not the way out, it is the worse failure: it reserves
BOTH cards, PipeWire releases them, and the laptop drops to a single "Dummy
Output". No Tidal, and no Zoom either, on the machine that has to do both. That
is the state this box was found in, and the reason all three symptoms had one
cause.

pw-jack only sets LD_LIBRARY_PATH to PipeWire's jack dir — precisely how the SC
unit already arrives there (scsynth maps pipewire-0.3/jack/libjack.so.0). Same
mechanism, same reason: ONE server, so the orbits and Ardour share a graph and
the desktop keeps its cards. launch_bin gains an optional LAUNCH_WRAPPER, empty
for every other app.

Verified end to end: Tidal -> SuperDirt :57120 -> scsynth (28 outs, PipeWire
JACK) -> ardour:Tidal 01..12 -> Master -> Speaker playback_FL/FR, with no stray
jackd, both cards held by WirePlumber, no double path on d1, and
check-audio-graph.sh green but for "no UMC on the bus" (it is not a venue).
parent 8728293d
......@@ -170,8 +170,9 @@ launch_bin(){ # launch_bin "<label>" <binary names...> — first found, detache
local bin
for bin in "$@"; do
if command -v "$bin" >/dev/null 2>&1; then
info "launching $label ($bin)…"
setsid "$bin" "${LAUNCH_ARGS[@]}" >/dev/null 2>&1 &
info "launching $label ($bin)${LAUNCH_WRAPPER:+ via ${LAUNCH_WRAPPER[*]}}…"
setsid ${LAUNCH_WRAPPER[@]+"${LAUNCH_WRAPPER[@]}"} "$bin" \
"${LAUNCH_ARGS[@]}" >/dev/null 2>&1 &
return 0
fi
done
......@@ -314,7 +315,31 @@ sweep_session
if ardour_up; then
ok "Ardour already running — skipping."
elif [ -f "$ARDOUR_SESSION" ]; then
# pw-jack, or Ardour's JACK backend takes the WRONG libjack and there are two
# audio servers. Both jackd2 and pipewire-jack are installed, and ldconfig
# resolves libjack.so.0 to JACKD2's — there is no ld.so.conf.d entry
# preferring PipeWire's. So a plain `ardour` on the JACK backend cannot find a
# jackd server, STARTS one, and jackd grabs a card via the D-Bus device
# reservation. Watched it happen 2026-09-06: jackd came up on `hw:NVidia,3`
# and reserved Audio0, so Ardour's audio went out an HDMI port with nothing
# plugged into it while scsynth sat in PipeWire's graph on the speakers. Two
# graphs that cannot see each other — qjackctl showed Ardour and no
# SuperCollider, and nothing was audible anywhere.
#
# `pw-jack` just sets LD_LIBRARY_PATH to PipeWire's jack dir, which is exactly
# how the SC unit already gets there (scsynth maps
# pipewire-0.3/jack/libjack.so.0). Same mechanism for the same reason: ONE
# server, so orbits and Ardour share a graph and the desktop keeps its cards.
# And the ALSA backend is not the escape hatch — it reserves BOTH cards, which
# is what left this laptop on "Dummy Output" with no Zoom audio at all.
LAUNCH_WRAPPER=()
if command -v pw-jack >/dev/null 2>&1; then
LAUNCH_WRAPPER=(pw-jack)
else
warn "pw-jack absent — Ardour may start its own jackd and split the graph."
fi
LAUNCH_ARGS=("$ARDOUR_SESSION"); launch_bin "Ardour" ardour ardour9 ardour8 Ardour
LAUNCH_WRAPPER=()
else
warn "Ardour session not found at: $ARDOUR_SESSION"
fi
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment