Curatorial Notes
RELIC reconstructs six extinct sounds — a rotary dial, a typewriter bell, a
modem handshake, a degaussing tube, a film projector, a telegraph sounder — entirely with
the Web Audio API. No <audio> tags, no sample libraries, no base64 blobs.
Every click, thunk and warble is oscillators and filtered noise, scheduled node by node.
Each exhibit is a small generator function that schedules raw nodes against a shared
AudioContext. Clicks and thunks are short bursts of white noise run through a
BiquadFilterNode — bandpass for a dial's ratchet, lowpass for a mechanical thud
— shaped by a GainNode envelope that ramps up in a couple of milliseconds and
decays with exponentialRampToValueAtTime. Tones (the modem's dial digits, the
carriage bell, the telegraph's key-clacks) are plain oscillators with the same envelope
treatment. The degauss wobble and the modem's answer tone are hand-built amplitude
modulation: an LFO oscillator feeding another oscillator's gain, so a single carrier note
breathes and buzzes without ever touching a sample.
The rotary dial is a train of clicks whose gap widens by 15% each time —
geometric deceleration standing in for a spring running out of tension. The
typewriter layers a high, clacky noise burst with a low thud per keystroke,
then a swept-bandpass noise burst for the carriage's zip and a triangle-wave bell.
The modem is the site's densest cue: DTMF-style dial digits, a rising
carrier tone, an AM-modulated ANSam warble, four sawtooth sweeps paired with noise bursts,
and a staccato of random tones — all budgeted into six seconds and driving a
Dialing → Handshaking → Synchronizing → Connected status readout. The
degauss thunk is a sine burst plus noise transient, followed by a
frequency-and-LFO-decaying sawtooth that reads as the classic descending buzz, settling into
a plain 60Hz hum. The projector is a filtered motor bed under a train of
clicks that first hold steady, then decelerate into silence — the reels freeze mid-turn by
reading their live CSS transform matrix rather than snapping to zero. The
telegraph is the odd one out on purpose: real sounders don't sing a tone,
they clack down and clack up, so a dot is a short silence between two clicks and a dash is a
long one — no pitch was invented.
The gallery is a flex row with scroll-snap-type: x mandatory; a wheel listener
converts vertical scroll into horizontal on desktop, and collapses to a plain vertical stack
under 860px. An IntersectionObserver watches every room, toggling
is-active to bloom each spotlight cone (a blurred, clipped radial gradient) and
sliding a brass dot along the floor-plan strip to the active room's measured position. While
an exhibit plays, an AnalyserNode feeds getByteTimeDomainData into
a canvas on every requestAnimationFrame, so the placard's waveform is the actual
signal, not a decorative loop.
AudioContext; then screenshot every room at both
viewports and fix what only a real render shows — spacing, contrast, a reel that snapped
instead of coasting to a stop; then a last pass for focus states, reduced-motion parity, and
console silence.