Spasis
The shape of the stereo and surround field, for Resolume

What it does
Four audio sources for Resolume Arena and Avenue. Spasis Field is the goniometer — where the signal sits, instant by instant. Spasis Rose is polar level, energy against direction or a lobe per speaker. Spasis Width plots stereo width against frequency. Spasis Balance is tonal balance. Each is its own plugin rather than one plugin with a measurement dropdown, because that is how a VJ browses a source list, and because it keeps every parameter set inside FFGL's sixteen-character name limit.
All four take the same two controls — a Shape (circle, half circle, or the whole raster) and a Style (oscilloscope, bargraph, or particles) — so four displays by three shapes by three styles is thirty-six pictures out of one set of controls that behaves identically in every plugin.
The stereo layout is ±45°, not the ITU ±30°, and that is the most consequential number in the project. The field point for one instant is the amplitude-weighted sum of the unit vectors to each speaker; at ±45° that comes out as exactly (side, mid), which *is* the classic goniometer — mono up the vertical axis, out-of-phase flat on the horizontal. The generalised law and the instrument every engineer already owns are the same thing, and they are only the same thing at 45°. That is not asserted, it is measured: the offline harness fails if a hard-panned channel stops landing at 45°, and fails if the width reading stops agreeing with |S|/(|M|+|S|) at any landmark.
It captures its own audio, which is the other decision worth knowing about. FFGL offers a plugin exactly one audio input: a buffer of N magnitude bins of a mono sum — no phase, no channels, no time-domain samples. A goniometer needs L and R as waveforms, per-band width needs the complex spectrum of each channel separately, and a surround rose needs six. None of that can be recovered from a mono magnitude spectrum, and a plugin that guessed would draw four plausible pictures of nothing. So Spasis opens its own capture device — a loopback like BlackHole, a Dante Virtual Soundcard, or an interface with the desk feeding it.
Left on its default the audio input is Resolume's own mono FFT, which needs no setup and works in any host — and can only show Balance. The other three then draw their graticule at full brightness and nothing else: an empty instrument rather than a black frame. The same happens when a chosen device is delivering digital silence, which on macOS is what a host without microphone permission is handed rather than an error. FFGL gives a plugin no way to draw text and no window, so Spasis cannot say why in words; what it can do is not be indistinguishable from a plugin that has crashed.
- Four sources — Field (goniometer), Rose (polar level), Width (stereo width against frequency) and Balance (tonal balance)
- One control surface across all four: three shapes × three styles, thirty-six pictures
- Stereo, quad, 5.1, 7.1, or an even ring of any channel count up to eight
- Its own multichannel capture from any device the machine offers — BlackHole, Dante Virtual Soundcard, or an interface fed by the desk
- A host-FFT fallback that needs no setup, works in any host, and refuses to draw the three displays it cannot know
- LFE contributes a level and never a direction; height channels are shaded rather than moved, because a flat picture cannot show elevation
- Universal macOS bundles (Apple Silicon and Intel) and Windows x64 DLLs
Where it stands
First release, v0.1.0. All four sources have been loaded and run in Resolume Arena 7.27.1 on both platforms: on macOS they register as video sources, expose their 22 parameters with the right names and defaults, and capture live audio from a real CoreAudio device — a mono microphone drew a correctly vertical goniometer trace, and multichannel capture was checked against real hardware, with a 6-channel bridge opening as 6 at 48 kHz and a 112-channel L-ISA bridge correctly capped to 8. On Windows all four DLLs load and instantiate under Mesa llvmpipe, which means every shader compiles under a GLSL compiler that is not Apple's. Behind that sit 300 offline invariant checks that measure the claims rather than assert them — the FFT against a direct DFT to within -80 dB, the field law reproducing the classic goniometer at ±45° and the ITU layout landing at 30° instead, width against |S|/(|M|+|S|) at every landmark and generalising to six channels, and the capture ring dropping the oldest sample and never the newest. What has not happened: it has never been fed by a real desk — a microphone and a silent loopback are not a 5.1 stem feed, so the layouts, the rose and the width plot have only ever seen synthetic multichannel audio — and it has never run a show. First contact with a live rig found five bugs in a plugin that had already passed three hundred offline checks, so check it in your own rig before trusting it in front of an audience.
Watch it running
Nothing loads from YouTube until you press play.Watch it there instead