recipes
Every noise *First Light: Goura* makes, written down as a recipe.
recipes
Every noise First Light: Goura makes, written down as a recipe.
local Recipes = require("game.sound.recipes")
One entry per clip: its name (which is also its asset identity under
clips/), how long it is, what rate it is computed at, whether it LOOPS, and
what it is normalised to. Each recipe then carries both ways the clip can
be made:
prompt— the textaudio_genis asked for, withopnamingsfxormusic. The nice path: a recording of a thing that does not exist.build— a pure-Luau synthesis filling a mono f32 buffer throughgame.sound.dsp. The floor: no network, no credit, no service, so a clip whose generation fails, times out or returns nothing still ships with sound in it.
Nothing in this game is allowed to be silent because a service was busy, which
is why every clip has a build and not only the ones without a prompt.
What is in the book
Two beds (fl_bed_night, fl_bed_dawn), two music cues (fl_title,
fl_score), the flock (fl_boom, fl_call, fl_answer, fl_failance), the
body (fl_step, fl_flurry), the eagle (fl_seen, fl_caught), home
(fl_roost), and the three interface answers (fl_ui_move, fl_ui_confirm,
fl_ui_back).
Three shared voices do most of the synthesis work: boomVoice (the low,
almost pitchless pulse the whole game is built on — a sagging fundamental, two
quiet harmonics and the breath under them), wingbeat (a shaped whoosh with a
knock at the top of the stroke) and cricket (a fast pulse train at one
bright frequency).
Recipes.render(recipe)
Renders a recipe's synthesised floor and conditions it: DC blocked, seam crossfaded when it loops, ends faded when it does not, limited and normalised. Returns the buffer and its rate.
Consumed by
game.sound.bake, at author time only. Soundscape never sees this module.
Scoped to this part · feeds back into the world's score.