C++ runtime for low-latency peer-to-peer music sessions over UDP.
pj-signal-server: signaling + candidate exchangepj-net-test: network qualification and session profile outputpj-peer-probe: full peer runtime (probe + optional audio)
Core goals:
- direct P2P media path by default
- measurable latency/jitter/loss and readiness (
ready/marginal/not_ready) - performance-first runtime behavior
Project governance and architecture policy live in .specify/:
- constitution:
.specify/memory/constitution.md - architecture decisions:
.specify/adr/README.md
Any architectural or runtime policy change must align with the constitution.
- Build
cmake --fresh -S . -B build-portaudio -DPEERJAM_ENABLE_PORTAUDIO=ON
cmake --build build-portaudio -j 4- Start signaling server
./build-portaudio/pj-signal-server --config resources/config/signal-server.conf- Run network test on both peers (same
--group, different--user)
./build-portaudio/pj-net-test --config resources/config/net-test.conf ...- Run peer runtime (optional audio)
./build-portaudio/pj-peer-probe --config resources/config/peer-probe.conf ...Use the full consolidated runbook in HOWTO.md.
Runtime configs are in resources/config:
signal-server.confnet-test.confpeer-probe.conf- local/two-machine examples for practical testing
- AOO is vendored under
third_party/aoo(self-contained build path). - If you copied build artifacts across machines/OSes, clean and rebuild from scratch.
- For constrained/sandboxed environments, runbooks must explicitly mark commands that require elevated permissions.