Native low-latency PipeWire capture for -p (drop pw-record subprocess)

-p now connects a real capture stream via the pipewire crate and pushes
mono f32 straight into the render channel from the RT process callback,
instead of spawning pw-record and parsing its s16 stdout. It captures the
default sink monitor (what you hear), negotiates F32 at the graph's native
rate/channels, and takes a --latency <frames> quantum hint (default 256)
so you can trade CPU/xrun-risk for lower latency.

libpipewire becomes a build+runtime dependency: CI installs the dev
headers + clang, and the PKGBUILD depends on libpipewire.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01GLUwWE2KmFPzhKaf67tWbx
This commit is contained in:
Bendik Aagaard Lynghaug
2026-09-13 11:16:53 +02:00
co-authored by Claude Opus 4.8
parent 3dbe5c4ddd
commit b230e6829a
6 changed files with 619 additions and 72 deletions
+10
View File
@@ -36,6 +36,16 @@ jobs:
path: ~/.cargo/registry
key: ${{ runner.os }}-${{ matrix.arch }}-cargo-${{ hashFiles('Cargo.lock') }}
- name: Install audio build deps (libpipewire + clang for native capture)
run: |
SUDO=""; command -v sudo >/dev/null && SUDO=sudo
if command -v apt-get >/dev/null; then
$SUDO apt-get update
$SUDO apt-get install -y libpipewire-0.3-dev libspa-0.2-dev clang libclang-dev pkg-config
elif command -v pacman >/dev/null; then
$SUDO pacman -Sy --needed --noconfirm pipewire clang pkgconf
fi
- name: Build
run: cargo build --release --target ${{ matrix.target }}