library
One recipe per name in `Hollow.SOUND_NAMES` — thirty-four of them, written as stacks of `sound.synth` layers.
sound.library
One recipe per name in Hollow.SOUND_NAMES — thirty-four of them, written
as stacks of sound.synth layers.
local Library = require("sound.library")
local canvas = Library.render("bellRing") -- ready for the codec
The crypt has a tonal centre. The great bell's prime sits at Library.BELL_HZ
(110 Hz, so its hum is A1), and the hammer, the gates, the Sexton's armour,
the shrine and the Bellwarden's own bronze are all tuned off it — so the
place rings in one key instead of thirty unrelated ones, and a fight and the
bed underneath it agree.
How they are grouped
- the screens (
ui.*) — small, close, dry, no reverb; they are in the player's hands, not in the room, and they sit under everything else. - the Lamplighter (
strike,strikeHit,cleave,flare,flask,heroHurt,heroDie,heroStep) — the hammer is iron with a lamp on it, so every swing has air in it and every landing has bronze. - the congregation (
tolled*,ringer*,sexton*) — the Tolled are voice, the Ringer is glass and chime, the Sexton is iron plate. - the crypt (
gateOpen,shrine,gold,pickup,relic) — stone, hinges, coin and reliquary. - the Bellwarden (
boss*,bellRing) — the lowest and longest things in the game.bellRingis the signature: eleven partials, a cracked twin beating against them, five seconds of tail.
Rendering
Library.render(name, rate?) builds the canvas, saturates it, normalises it
to 0.88 and takes its edges to zero, at Library.RATE (32 kHz) unless told
otherwise. Library.names() lists what it covers. A name with no recipe
returns nil rather than silence, so the caller can say so.
Scoped to this part · feeds back into the world's score.