Skip to content
Русский

OSC addresses

--osc <host:port>, or [osc] enabled = true, publishes the analyzer’s telemetry as OSC over UDP so a lighting console or a bridge can follow the music.

The address space is versioned in the addresses, so a later signal is additive under the same /rlx/v1 prefix and a mapping you have already bound keeps working across it. One argument per address, so a console binds a parameter to an address rather than to a position inside a message.

AddressTypeWhat it carries
/rlx/v1/level/bassfBass excitation, 0–1, normalized against its own running peak — not a magnitude. It reads 1.0 whenever this moment is the loudest bass of the last few seconds, which on four-on-the-floor material is every kick. See the note below the table before binding it to a dimmer
/rlx/v1/level/midfMid excitation, same normalization and same ceiling behaviour
/rlx/v1/level/trebfTreble excitation, same normalization and same ceiling behaviour
/rlx/v1/level/onsetfSpectral-flux onset envelope, same normalization and same ceiling behaviour
/rlx/v1/level/rmsfBroadband RMS of the waveform trace — un-normalized, unlike the four above it, because the trace it comes from deliberately is. Map it with a gain in the console
/rlx/v1/raw/bassfRaw mean magnitude in the bass band — the absolute twin of level/bass, and the one to bind when you want loudness. Unnormalized, so it does move with input gain and is not portable across tracks
/rlx/v1/raw/midfRaw mean magnitude, mid
/rlx/v1/raw/trebfRaw mean magnitude, treble
/rlx/v1/raw/onsetfRaw spectral-flux envelope
/rlx/v1/beat/triggeri1 on a frame an onset fired, 0 otherwise — the discrete event
/rlx/v1/beat/indexiMonotone count of onset detections. Not a musical beat count — the detector fires 1.2x–2.3x per beat depending on material, so no fixed multiplier turns it into bars. Useful as a ratchet, not as a meter
/rlx/v1/beat/phasefBeat phase in [0, 1): 0 on each beat, ramping to the next
/rlx/v1/tempofTempo estimate in BPM, 0 until the tracker warms. Expect a warm-up of tens of seconds before it settles
/rlx/v1/presetsThe active preset’s name

level/* touches its ceiling by design, and no input gain moves it. Each of the four is divided by its own slowly-decaying running peak — instant attack, a 2.5 s release (ADR-0049) — so the value it publishes is raw / peak, an excitation relative to this track’s recent past rather than a loudness. Two consequences are worth knowing before a fixture is bound to one:

  • 1.0 is a normal reading, not a clip and not “loud”. It means only this is the loudest bass since the peak last released. At 120 BPM the peak is re-adopted every 0.5 s against a 2.5 s release, so on periodic material the term spends most of its life near the top of its range and reaches 1.0 once per kick. A look shaped as glow + depth * level/bass therefore sits at glow + depth on every kick and reads flat in the room — that is the term behaving as specified, not a saturated input.
  • Turning the mic or the interface down changes it by exactly nothing. raw / peak is scale-invariant: halve the input and both terms halve. Gain portability is the entire purpose of the normalization — > 0.5 is meant to mean the same thing on every track at every gain — so an input-gain control is provably the wrong lever for a pinned level/*. The right lever is the binding: reach for raw/*, which is the absolute twin and is published beside every one of them, and scale it yourself.

Telemetry rides the rendered frame, so it stops when the window is hidden and the preset name lags a switch by one frame. Nothing here is a musical timebase you can drive a sequencer from — it is a level feed for lights.

The root moved in this release: /lmv/v1 became /rlx/v1. There is no transition period and no dual-emit, and OSC has no error channel — so a binding left on the old root stops firing and reports nothing, which looks exactly like a fixture that happens not to be moving. Re-point every address by hand, and keep the old show file until each one is confirmed against a playing track. /v1 did not move, because no payload, type tag, address suffix, vocabulary or send cadence changed: re-point the root, change nothing else, and the mapping is correct.

Built from 13c7582 at version 0.158.0. This site tracks main and is not versioned per release.