0001 — Native REAC, not AES67, for Roland stageboxes

Status: Accepted (designed; the audio path lives in the sibling reac-pw repo) Date: 2026-06-29

Context

openmixer's first real rig takes its I/O from one or two Roland REAC stageboxes (for example the S-1608): mic inputs in, the mixed PA feed out. There are three ways to get that audio onto and off the host:

  1. A Roland M-5000 console acting as the REAC master, bridged to the host somehow.
  2. Convert REAC to AES67 (or Dante) with a hardware or software gateway, and run the mixer on the standardised stream.
  3. Speak native REAC directly — the Roland stagebox's own Layer-2 protocol (EtherType 0x8819).

A Roland stagebox without a console expects a REAC master to clock it and exchange frames. It does not speak AES67. Converting would mean buying or building a gateway, adding a clock domain crossing, and adding latency — to talk a protocol the box does not natively use, when the box already speaks one we have reverse-engineered.

The REAC receive path already exists and works: reac-pw's reac:capture decodes live REAC into a 40-channel PipeWire source today. A REAC frame encoder exists and is verified by a round-trip test.

Decision

For Roland stageboxes, the correct wire is native REAC. openmixer receives REAC as a PipeWire source and sends the mix back as a PipeWire sink that re-encodes native REAC to the stagebox outputs. No M-5000 console and no AES67/Dante conversion in the path.

What remains to drive a real stagebox (designed, not yet built): the master-role JOIN/HOLD handshake (cdea establishment + heartbeat) so the box locks to openmixer as its master, and a SCHED_FIFO cadence pacer that emits frames at a rock-steady rate so the box stays locked without clicks.

Consequences

  • No gateway hardware, no extra clock-domain crossing, minimal added latency — the stagebox connects to the mixing host's NIC and nothing else.
  • It commits us to maintaining a native REAC implementation (libreac / reac-pw), including the master handshake and an RT-grade egress pacer. This is real systems work and is the main remaining gap in the audio core.
  • It needs raw L2 socket access (AF_PACKET, CAP_NET_RAW) on the mixing host, which shapes deployment (the audio host, not a generic cluster node).
  • AES67/Dante are not foreclosed: they remain valid for other I/O endpoints and are first-class targets of the discovery layer (0012); this decision is specifically about how to talk to a Roland stagebox.