2026 Migration to Pipewire + BitWig.

This commit is contained in:
2026-06-10 14:16:02 -05:00
parent ee169b0e01
commit a75257a7b0
39 changed files with 256 additions and 1236 deletions
+82
View File
@@ -0,0 +1,82 @@
#!/usr/bin/env bash
set -euo pipefail
usage() {
cat <<'USAGE'
Usage: ./set-pipewire-latency.sh COMMAND [QUANTUM] [RATE]
Commands:
status Show current PipeWire clock/quantum settings.
on [Q] [RATE] Force a low-latency graph quantum. Defaults: Q=128 RATE=48000.
off Clear forced quantum/rate and return to normal PipeWire behavior.
Useful quantum values at 48 kHz:
256 about 5.3 ms per block, safer
128 about 2.7 ms per block, good stage starting point
64 about 1.3 ms per block, lower latency but higher dropout risk
USAGE
}
metadata() {
pw-metadata -n settings "$@"
}
status() {
local output
output="$(pw-metadata -n settings)"
printf '%s\n' "$output" | grep -E "clock\\.(rate|quantum|min-quantum|max-quantum|force-quantum|force-rate)" || true
local rate quantum forced_quantum
rate="$(printf '%s\n' "$output" | awk -F"'" '/clock.rate/ { print $4; exit }')"
quantum="$(printf '%s\n' "$output" | awk -F"'" '/clock.quantum/ { print $4; exit }')"
forced_quantum="$(printf '%s\n' "$output" | awk -F"'" '/clock.force-quantum/ { print $4; exit }')"
if [[ -n "$rate" && -n "$quantum" ]]; then
awk -v q="$quantum" -v r="$rate" 'BEGIN { printf "\nCurrent block latency: %.2f ms at %s Hz\n", (q / r) * 1000, r }'
fi
if [[ "${forced_quantum:-0}" != "0" ]]; then
printf 'Low-latency override: ON\n'
else
printf 'Low-latency override: OFF\n'
fi
}
set_low_latency() {
local quantum="${1:-128}"
local rate="${2:-48000}"
if ! [[ "$quantum" =~ ^[0-9]+$ && "$rate" =~ ^[0-9]+$ ]]; then
printf 'Quantum and rate must be numeric.\n' >&2
exit 2
fi
metadata 0 clock.force-rate "$rate" >/dev/null
metadata 0 clock.force-quantum "$quantum" >/dev/null
awk -v q="$quantum" -v r="$rate" 'BEGIN { printf "Forced PipeWire quantum %s at %s Hz, about %.2f ms per block\n", q, r, (q / r) * 1000 }'
}
clear_low_latency() {
metadata 0 clock.force-quantum 0 >/dev/null
metadata 0 clock.force-rate 0 >/dev/null
printf 'Cleared PipeWire forced quantum/rate.\n'
}
case "${1:-}" in
status)
status
;;
on)
set_low_latency "${2:-128}" "${3:-48000}"
;;
off)
clear_low_latency
;;
-h|--help|help|'')
usage
;;
*)
usage >&2
exit 2
;;
esac