Score
The film's sound. Sits on the scene's `score` anchor; enter play and FURROW has a score and a world that makes noise. There is nothing to start.
Score
The film's sound. Sits on the scene's score anchor; enter play and FURROW has
a score and a world that makes noise. There is nothing to start.
What it does every frame
- reads
filmClock.now()— it keeps no clock of its own - writes every looping bed's volume from
score.gains(t) - writes the
musicandworldmixer channel levels fromscore.channels(t) - moves the travelling furrow's emitter along its path under the pan
- fires any one-shot the clock has just crossed
The shape of it
The film is mixed, not sequenced. Nine clips are already running from the
first frame at a volume of zero; what the film does is change how loud each one
is. Seven of them are seamless loops (air, drone, pulse, mass, ring,
wind, wall, plus the placed rumble and drain); four are one-shot hosts
that throw panel, mastfall, breach and impact from where the thing
happened.
That shape is a consequence of two things this engine does not have. There is no
mixer-time scheduling — :play() plays on whatever frame the script ran — so a
score built from consecutive segments has a frame of jitter, and a hole, at
every join. And a long encode stalls the frame loop past the hang watchdog, so
the film can never encode: bake_score.luau does that once, in edit mode, and
this component only opens finished assets.
The music is non-spatial — music is not somewhere. The world's own sounds are
spatial and are heard from where the thing is, through the scene's ears, which
the director keeps riding on the shot camera.
Fields
| field | what it does |
|---|---|
gain | a trim over everything this component owns. 1 is the film as mixed. |
mute | silence it without unloading it |
What it owns, and gives back
Thirteen entities named snd_*, listed in EMITTERS. onDestroy despawns all
of them and hands the two mixer channels back at unity — and awake clears any
survivor of a previous incarnation by name before it spawns its own, because a
hot reload re-awakes a component without destroying it and an emitter left
standing keeps playing. Two awakes without that are two of every bed, which is
the whole score six decibels loud with nothing on screen to explain it.
Checking it
audio.levels() -- the master mix: what the film sounds like now
audio.observe() -- every voice, its effective gain, and why a silent one is
audio.mixer().channels -- the two channel levels this component is automating
av.status().recordingAudio -- "opus" while a take is armed: the score reaches the film
The mix measured against film time, on the master meter (RMS):
| t | 3 | 60 | 90 | 118 | 126 | 150 | 172 | 175 | 180 |
|---|---|---|---|---|---|---|---|---|---|
| rms | .006 | .024 | .070 | .180 | .242 | .129 | .086 | .047 | .018 |
Near-silence, a forty-fold climb into the breach, and a ringing settle that ends three times quieter than it peaked and three times louder than it opened.
Scoped to this part · feeds back into the world's score.