← Back to RELIC

Curatorial Notes

Nothing in this wing was ever recorded.

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.

Synthesis, not sampling

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.

Six problems, six solutions

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 room that is also a museum

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.

Three passes: build the six generators and verify each one schedules cleanly against a live 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.