Audio-reactive worlds¶
Add AudioLink to a world and it comes alive to the music: lights pulse on the beat, emissive panels flash with the bass, props breathe with the melody — all with no scripting. AudioLink listens to the audio each player hears, splits it into four frequency bands, and hands those levels to as many Audio Reactive components as you like.
It's client-local: every player's world reacts to their own audio, so there's nothing to sync and no bandwidth cost — the music is already in sync, so everyone sees roughly the same show.
Two pieces: one listens, the others move¶
There are exactly two components, with clearly separate jobs:
| Component | Job | The key field |
|---|---|---|
| AudioLink (one per world) | Listens to audio and splits it into bands. Moves nothing itself. | Source = the audio to listen to |
| Audio Reactive (as many as you like) | Moves one thing — a light, a material, an object — from a band. | Target = the thing to move |
So Source = what to listen to; Target = what to move. You never pick a source on an Audio Reactive — it just reads the world's AudioLink.
1. Add one AudioLink¶
Put a single AudioLink on any object in your world (Add Component ▸ Social Scape/AudioLink). That's the analyzer —
one per world turns reactivity on; a world with none simply doesn't react (a second AudioLink is removed at load).
| Field | What it does |
|---|---|
| Source | Leave empty to react to the whole mix (any music, video, or speaker the player hears). Or point it at a Speaker / Video screen object to react to only that source. |
| Gain | Overall sensitivity. |
| Auto Gain | On (default) = each band self-normalizes, so quiet and loud tracks both give a full swing. Off = an absolute response you drive with Gain. |
| Attack / Release | How fast bands rise / fall. Small attack = snappy; larger release = smoother decay. |
In play mode the AudioLink inspector shows live band meters so you can watch it respond while you tune.
Full control (Advanced): the top fields cover the common case; the Advanced / shader tuning section exposes every
AudioLink driver parameter — EQ (gain, bass, treble), the four band split points, per-band sensitivity, trails, auto-gain, and
ColorChord theme colours. These shape the data your AudioLink-aware shaders read (the _AudioTexture), and the platform
applies them to the analyzer for you — so you get the full driver, tuned through this one component, with nothing internal to
touch. (The simple fields drive the no-code Audio Reactive bands; Advanced drives the shader texture.)
Change it live, synced: a script can adjust the tuning at runtime with the AudioLink API setters — these are server-authoritative, so an in-world tablet with sliders (gain, EQ, sensitivity, trails) changes the show for everyone at once, and late joiners get the current values.
2. Drop Audio Reactive components¶
Put an Audio Reactive (Add Component ▸ Social Scape/Audio Reactive) on the light or object you want to move. Pick a
band and what it should drive — the band's 0..1 level lerps the property between a Rest and an Active value.
Stack several on one object to react in more than one way.
| Drive | Rest → Active | Good for |
|---|---|---|
| Light Intensity | intensity values | a lamp pulsing on the kick |
| Light Colour | two colours | a light shifting hue with the music |
| Emission Colour | two colours (HDR) | a glowing sign / neon strip |
| Material Colour | two colours, a named property | a surface tinting with the beat |
| Material Float | two values, a named property | a shader parameter (emission strength, dissolve…) |
| Scale | two local scales | a speaker cone / object that thumps |
| Position | two local offsets | a bouncing / swaying prop |
Common tuning is on every one: Gain, an optional response curve (e.g. a threshold so it only fires on strong
beats), and extra Attack / Release smoothing on top of the analyzer. Material Colour / Material Float take a
property name (_BaseColor, _EmissionColor, _Metallic, …); emission needs emission enabled on the material.
Which band?
Bass thumps on the kick/bassline (great for cones and floor lights), Treble sparkles on hi-hats and cymbals, the Low-Mid / High-Mid sit with vocals and melody. Drive different elements from different bands for a full show.
Comfort & safety¶
Audio-reactive flashing can be uncomfortable — and in VR, fast full-view strobing is a genuine hazard. Two things protect players, so you can design freely:
- A built-in flash limit caps how fast any brightness effect can strobe, even if you set the smoothing to zero — you can't accidentally build a seizure-tier strobe.
- Each player has an "Audio-reactive flashing" slider (Settings ▸ Interface) that damps or fully holds the flashing for themselves, on top of that limit. Motion effects (scale / position) aren't damped.
You don't have to do anything for this — it's automatic on every Audio Reactive.
Reacting shaders — and avatars¶
AudioLink also drives the standard AudioLink shader data (the global _AudioTexture), so AudioLink-aware custom
shaders on your props and on avatars react to the music automatically. Point a world's
AudioLink at the music and every audio-reactive shader in the scene (and on the avatars standing in it) comes alive with no
extra wiring. A world with no AudioLink leaves those shaders idle — they read "no AudioLink" — so reactivity is always the
creator's opt-in.
To author your own AudioLink shader, #include the shipped AudioLink.cginc and sample _AudioTexture the standard way.
Scripting it¶
Prefer no-code? The Audio Reactive component covers most cases. For custom logic, read the bands in a script with the
AudioLink API — AudioLink.Bass() … AudioLink.Treble(). It's client-local and read-only
(same rules as everything here — never feed it into networked state).
Limits¶
AudioLink is a singleton — one analyzer per world (extras are trimmed at load). The Audio Reactive components are cheap and uncapped, like Tweens. See also Speakers & shaped audio for shaping where sound goes, and Video players for feeding music from a screen.
Component class names (for scripts and search): SSAudioReactive (+ SSAudioLink for the shader bus).