Sixteen VST3 plugins for sustained electroacoustic music, built directly on the Steinberg VST3 SDK — no JUCE, no frameworks. They fall into three families: converters that move a signal from one spatial format to another, generators that produce the test signals a room is measured with, and the measurement and processing tools that listen to the result.

Several of them are the C++ counterpart of an algorithm that also lives in Faust: where that is the case, the entry links the library source.

Building the suite, the VST3 SDK and the installation paths are documented in the repository README — they belong next to the code, where they cannot quietly go stale.

Generated from github.com/s-e-a-m/seam-ltm at 132ca0b.

Format converters and rotators

SDMX

stereo → stereo

Sum and Difference Matrix (Blumlein M/S). The matrix is involutory (A = A⁻¹), so one instance encodes LR → MS and a second one decodes MS → LR

SDMX

Faust counterpart: seam.stereophony.lib.

B2XROT

B-format 4ch → AmbiX 4ch

B-format (FuMa) to AmbiX with rotation: W is scaled by √2, channels are reordered to ACN/SN3D, then Yaw/Pitch/Roll is applied

B2XROT

XYPRROT

AmbiX 4ch → AmbiX 4ch

First-order AmbiX rotation (Yaw, Pitch, Roll). Channel A0 is omnidirectional and passes through untouched

XYPRROT

M2XHGR

mono → AmbiX 4ch

Mono to AmbiX via Haar Decomposition: the Haar QMF bank haarmn(1) spreads one channel across four spatial components, which are then rotated by Yaw/Pitch/Roll

M2XHGR

Faust counterpart: seam.ambisonics.lib.

LR2XHGR

stereo → AmbiX 4ch

Stereo to AmbiX via Haar (Silvi’s method): each channel is Haar-decomposed, placed by a Divergence half-angle, summed, and finally oriented by a global Yaw/Pitch/Roll

LR2XHGR

Faust counterpart: seam.ambisonics.lib.

ABMODULEX

A-format 4ch → AmbiX 4ch

Tetrahedral microphone A-format to first-order AmbiX: LFU RFD RBU LBD → A0 A1 A2 A3. Pure matrix, involutory (M² = I), the inverse of BAMODULEX, and the front end of the TETRAREC chain. A SETUP menu reads the four capsules as the dual tetrahedron, LFD RFU RBD LBU: the upright one mirrored in the horizontal plane, Z changing sign

ABMODULEX

Faust counterpart: seam.ambisonics.lib.

BAMODULEX

AmbiX 4ch → tetrahedral 4ch

Gerzon’s BA-module in the AmbiX domain: a decoder to the LFU · RFD · RBU · LBD vertices, which are the four drivers of a STONE loudspeaker. The Gerzon compensation shelves are omitted by design — the STONE amplifier corrects HF/LF downstream

BAMODULEX

Faust counterpart: seam.ambisonics.lib.

X2UHJ

AmbiX 4ch → UHJ C-format 4ch

First-order AmbiX (ACN/SN3D) to UHJ C-format (L, R, T, Q) — the “UHJ decoder” that makes an Ambisonic mix audible on two channels. The ±90° quadrature pair is designed live at the host sample rate by the shared seam_quadrature engine, and the GUI reads out the resulting coefficients together with the achieved maximum phase error

X2UHJ

Faust counterpart: seam.ambisonics.lib.

Signal generators

LTBURST

none → mono

Linkwitz shaped tone-burst: N = 5 cycles of a sine under a Hann window, repeated at a fixed frequency. Frequency, Dwell and Level are the whole interface

LTBURST

Faust counterpart: seam.linkwitz.lib.

LTGLIDE

none → mono

Linkwitz glissando tone-burst: the carrier of each N = 5 grain is latched from a linear or exponential sweep F0 → F1 spread over a Sweep Time, with grains spaced in step or gap timing. It loops, declares a STONE id, and publishes what it is playing on the calibration bus

LTGLIDE

Faust counterpart: seam.linkwitz.lib.

MULTIPINK

none → 1..64ch

Multichannel pink noise drawn from a shared 64-slot logical pool, so that separate instances never emit the same stream. Layout-adaptive from mono to 64 channels, band-calibrated (-23/-20/-18 dBFS reference, read as the total RMS at 48 kHz, ±6 dB trim) so that the per-third-octave level an amplifier is set against holds still when the sample rate changes, with a POWER switch, a STONE id, and a calibration-bus announcement

MULTIPINK

Faust counterpart: seam.filters.lib.

Measurement and processing

STRX

stereo → stereo

Stereo M/S Analyser: goniometer, overlaid M/S Welch spectra, and In L / In R / M / S / Width meters, plus a status line fed by the calibration bus. It observes only — the audio is passed through unchanged and there are no automatable parameters

STRX

Faust counterpart: seam.analyzers.lib.

DSLAR

mono → mono

Agostino Di Scipio’s LAR homeostatic loop, hand-ported from LAR.pd: the feedforward half of a Larsen system whose loop is closed acoustically by the room. Drive, loop delay, decorrelation, target, steepness and control smoothing, with live r (Hann RMS) and g (loop gain) readouts

DSLAR

Faust counterpart: seam.discipio.lib.

DDELAY

4ch → 4ch

Quad Alignment Delay for loudspeaker time-alignment. A distance in metres becomes an integer-sample delay at c = 331.4 m/s, rounded up to the next prime so that several instances stay incommensurable. All four channels share one value

DDELAY

HILBERT

mono → stereo

Wideband Quadrature Transformer: one input becomes an in-phase and a quadrature branch held −90° apart from 20 Hz to 20 kHz. Both outputs are all-pass filtered, since the relationship belongs to the pair rather than to either signal. Two topologies — RBJ biquad cascade and Niemitalo polyphase — are selectable live and redesigned per sample rate by the same seam_quadrature engine X2UHJ uses internally

HILBERT

Faust counterpart: seam.filters.lib.

ADDELAY

4ch → 4ch

Air-Absorption Delay: inherits DDELAY’s exact metres-to-samples integer delay (next-prime rounding included) and adds a minimum-phase air-absorption filter fitted to the ISO 9613-1 α·d distance-dependent high-frequency roll-off. Shelf and three-section RBJ high-shelf cascade topologies are switchable live, with an optional 1/r geometric-spreading attenuation. All four channels share one distance, so the inter-channel phase is preserved

ADDELAY

Faust counterpart: seam.filters.lib.

Works — SSCDO#2

LMO

→ 4ch

The generator of Studio sul Corpo d’Ombra #2 (Cortegiani, Tedesco): on each of four channels, two narrow bands of noise through 24th-order Butterworth high- and low-pass filters, which beat at a distance Δ. The band centre glides linearly over a set time, as the piece’s cues ask; the level is anchored at 96 kHz, so the bands sound the same at any sample rate

LMO

Faust counterpart: seam.tedesco.lib.

STUNEDREV

4ch → 4ch

The APF of Studio sul Corpo d’Ombra #2 (Cortegiani, Tedesco): four independent lines of 42 Moorer all-pass sections in series, one per face of STONED, tuned by √2, φ, e and π. Each delay is a time in milliseconds moved to the next prime at the session’s rate, so each face returns the sound on its own time scale, from seconds to minutes. One arena sized exactly at activation, and a RESET that empties it while playing

STUNEDREV

Faust counterpart: seam.tedesco.lib.

DELRM

4ch → 4ch

delRM of Studio sul Corpo d’Ombra #2 (Cortegiani, Tedesco): four channels, each processing its own input. Channels 1 and 3 add the input to itself delayed; channels 2 and 4 multiply the delayed input, the input and its integral, into a compressor, the score’s 11:1 by default, with drive, threshold, ratio, attack and release under five sliders for each of the two. The delay is DDELAY’s distance in metres moved to the next prime, one for the four channels. Input meters and the gain reduction of channels 2 and 4, drawn in opposite directions

DELRM

Faust counterpart: seam.tedesco.lib.

CHOIR

4ch → 4ch

The choir of Studio sul Corpo d’Ombra #2 (Cortegiani, Tedesco): on each of four channels, 16 narrow bands listen to the input around the harmonics of a fundamental and make 16 voices of noise sing around stretched harmonics, each voice as loud as its band of the input. The voices sing on the third block of the piece’s noise, decorrelated from LMO and from each other. A 4×16 grid shows, band by band, what the choir is hearing, and a RESET silences the bands that are still ringing

CHOIR

Faust counterpart: seam.tedesco.lib.