Skip to content
Menu Music for Supply and Siege
CPU 0.0%evt 0virtual
Berni

This site's audio engine

Most of the site's music is live-coded with Strudel — synthesized in your browser, every visit, with the Web Audio API. The Playlist plays those beats alongside real audio files, all through the same engine.

Hit play and the site runs a Strudel pattern — a few lines of live-coding code — through a full Web Audio graph: drum voices, a bass line, live effects, and a mix that reacts to the beat. The same graph also streams plain audio files — tracks Berni uploads and the reels from his projects — looped, so they react and visualize just like the code does. This page is the breakdown; head to the Playlist to pick a track and read the exact code that's playing.

Signal chain

Every voice feeds one master chain: a gain stage, a sweepable lowpass, three parallel sends (a tempo-synced feedback delay, a convolution reverb whose impulse response is also synthesized, and an LFO-driven flanger), then an HRTF panner and the analyser that feeds the visualizer.

The FX rack

The AUDIO.FX pads (available while the beat plays) are momentary performance effects on the live signal — hold to engage, release to let go:

filter
slams the master lowpass down to 420 Hz
echo
raises the delay send and pushes feedback toward self-oscillation
reverb
opens the convolver send — a 2.2-second synthesized impulse
flanger
an LFO wobbling a 5 ms delay line with feedback
riser
looped noise through a bandpass sweeping 300 Hz → 9 kHz
brake
slews the tempo down to a crawl and darkens the filter

The visualizer

An analyser node (128-bin FFT) streams live frequency data to the equalizer behind the hero, which renders it in five switchable modes. Reduced-motion users get a still ring instead.

No samples, no licenses, works offline — the whole engine is a few hundred lines of TypeScript.