3SB Controller operator interface showing Milan AVB runtime, stream, clock, and speaker status.
3SB Controller operator interface for fixed-topology Milan/AVB transport monitoring and orchestration.

3SB Controller is a Linux-based controller for a fixed-topology Milan/AVB audio system.

Its role is to take a known audio system layout, start the local AVB/Milan stack, route rendered audio to network listener devices, maintain media clocking, and present a clear operator view of whether the audio path is working.

In practical terms, it brings together an AVB-capable Linux host, a DSP engine such as BruteFIR or CamillaDSP, an OpenAvnu Milan talker runtime, one or more Milan listener devices, and a site-specific speaker and stream layout into one managed transport stack.

Problem Space

Milan/AVB audio depends on several layers operating correctly at the same time: network shaping, gPTP timing, CRF media clocking, AAF audio streams, AVDECC bindings, DSP output, and device-level counters.

Each layer can fail independently. A listener may be visible but not bound, a stream may be connected but not receiving frames, a clock may be selected but not locked, or a DSP process may be running while feeding silence or stale audio.

3SB Controller exists to coordinate those layers as one system, with enough monitoring to distinguish process availability from real audio transport health.

Signal Path

The current architecture is centred on a local Linux host acting as the Milan talker.

A typical signal path is source audio from Roon or another player into an ALSA, loopback, or private ingress path, then through DSP, into a 32-channel AVB output path, through OpenAvnu AAF and CRF talkers, and finally into Milan listener devices, DACs, and loudspeakers.

The controller monitors both the local host and the remote listener. It checks expected stream connections, advancing audio and clock counters, listener clock source, and stream error state.

Main Components

3sb-streamd is the main controller daemon. It reads the compiled system configuration, tracks active profiles, starts and stops the OpenAvnu runtime, applies AVDECC bindings, monitors AAF and CRF counters, and exposes the HTTP API used by the web interface and tools.

The web interface provides the operator view across runtime status, clocking, binding state, DSP status, per-speaker AAF stream health, CRF stream health, counters, events, and historical graphs for selected counters.

3sb-monitor provides a terminal view for bring-up and debugging, including stream state, counters, recent deltas, events, binding state, and clock status.

OpenAvnu provides the local Milan/AVB talker implementation. 3SB Controller generates and stages the runtime configuration for the active profile, then supervises the profile-specific OpenAvnu service.

AVDECC control is handled through a native bridge based on la_avdecc. It discovers the local talker and remote Milan listeners, resolves stream indices, connects AAF streams and CRF clock streams, sets or confirms listener clock source, and reads listener counters.

DSP and Local Audio

The controller is intended to integrate with BruteFIR and CamillaDSP. The DSP engine renders the final loudspeaker channels, typically as a 32-channel 96 kHz output bus that is packetised into multiple 8-channel AAF streams.

A custom ALSA kernel module, snd_3sb_avb, provides fixed-topology devices for the local audio pipeline, including an AVB input side, a 32-channel AVB output side, and a shared AVB32 export consumed by the OpenAvnu AAF and CRF code.

3sb-ingressd bridges upstream audio into the private local pipeline where required. For example, a player can output to ALSA Loopback while ingress handling presents that audio to the private path used by DSP, keeping the upstream player isolated from the AVB packetisation path.

Streams, Clocks, and Speakers

3SB Controller models the system in terms that map to the installation: listeners are physical Milan devices, streams are AVB/Milan endpoints, speakers are named channel groups, routes map rendered DSP channels onto listener streams, CRF provides the listener media clock, and AAF carries the audio samples.

In the current split-32 layout, 32 rendered channels are divided across four 8-channel AAF streams, with a separate CRF stream used for media clocking.

Health Model

A healthy system is more than a set of running services. The controller checks AVB infrastructure state, gPTP lock, expected device discovery, AAF and CRF bindings, listener clock source, advancing frame counters, stream error counters, and DSP output state.

This allows the operator view to distinguish states such as connected, receiving, no media, stalled media, grandmaster lock, and CRF clock source, describing the audio path as a whole rather than only the status of individual processes.

Scope

3SB Controller is not intended to be a general-purpose Milan controller for arbitrary networks. It assumes a known site topology, expected devices, and expected stream layouts.

That narrower scope is intentional. It makes bring-up, binding, monitoring, recovery, and operator presentation easier to reason about for a real installed system.

Development Status

Work is currently in the development phase. The current focus is reliable orchestration of the Linux AVB/Milan host, OpenAvnu runtime, AVDECC binding, DSP handoff, and health reporting across the complete transport path.

Please contact 3SB Audio if you would like to find out more about 3SB Controller.