---
title: "A Patch, Not a Playlist: Building Ambient Drift"
canonical_url: "https://artefact.ist/artefact/ae643ebc-dbb4-11f1-8734-b7926639f0b6/a-patch-not-a-playlist-building-ambient-drift"
author: "Paul"
published_at: "2026-11-08T20:36:00+00:00"
modified_at: "2026-11-08T20:59:54.724782+00:00"
type: "artefact"
word_count: 823
tags: ["synthesis", "development", "generative", "webaudio", "ambientdrift"]
---

# A Patch, Not a Playlist: Building Ambient Drift

In 1978, Brian Eno released *Ambient 1: Music for Airports*, built from tape loops of deliberately unequal lengths that drifted in and out of phase with one another. The music was never quite the same twice, because the system, not the composer, decided what happened next. Nearly half a century later, that idea still feels quietly radical: set up the conditions, step back, and let the piece play itself.

[Ambient Drift](https://artefact.ist/drift "Noodle away...") is my attempt at that idea, built for the browser as a toy. The result is a generative instrument with eleven voices, a simple scene, and a mixer, running entirely in a single web page.

## A Patch, Not a Playlist

The best way to describe Ambient Drift is as a patch rather than a track. You don't press play on a recording; you set a **scene** and the instrument improvises within it. The scene is deliberately small: a key, a mode, a density, a tempo, and an amount of space. Everything else is left to probability.

Anyone who has spent time with a modular system will recognise the approach. You don't write every note; you build the conditions under which good notes become likely, and then you listen. The controls are there to shape the behaviour, *not* to perform it. Perfection is rarely the goal; character is.

## Eleven Voices, One Scene

The instrument is built from eleven voices, each with its own channel strip carrying mute, solo, level, pan, and a reverb send. A thin red meter along the bottom of each strip shows what is sounding at any given moment.

- **The foundation:** Drone, Pad, and Sub provide the bed. Detuned saws through a wandering filter, slow-moving chords that change every fifteen to forty seconds, and a deep sine swelling an octave beneath it all.
- **The colour:** Shimmer, Bells, and Pulse add movement on top. High partials that retune while silent, soft two-operator FM bells with long decays, and a gentle arpeggio that rebuilds its pattern every thirty-two steps.
- **The texture:** Wash and Grain supply the air. Filtered noise that sounds like a distant sea, and a quiet crackle with tiny pitched glints.
- **The landscape:** Echoes, Birds, and Drops are short motifs bounce left & right through a ping-pong delay timed to a dotted eighth. Birdsong arrives as tweets, trills, and whistles, sometimes answered. Water drops fall in key, in showers that come, and go.

Every pitched voice takes its notes from the current key and mode, so however busy things become, it all stays consonant. That constraint is what lets eleven independent voices sound like one piece rather than eleven arguments.

## No Samples, No Dependencies

Under the bonnet, every sound is synthesised live with the [Web Audio API](https://en.wikipedia.org/wiki/Web_Audio_API) from oscillators, filters, and generated noise. There are no samples, no audio files, no frameworks, and no build step. Even the reverb's impulse response is generated in code, as five seconds of decaying stereo noise.

Each voice runs its own look-ahead scheduler. Every 200 milliseconds it wakes, reads the scene, and schedules whatever should happen in the next 1.2 seconds against the audio clock. The timing stays sample-accurate even when the browser is busy, and a change to density or tempo is heard within a fraction of a second. It is an old technique, and it remains the right one.

That minimalism was a deliberate choice. A page that depends on nothing is a page that will still work in ten years; every dependency is a small loan against the future. The page also runs under a strict Content Security Policy and makes no network requests beyond fetching its fonts. Your listening stays on your machine, where it belongs.

## Letting It Drift

The feature that gives the project its name is **Drift**. Switch it on, and every minute or two the scene evolves by itself: usually a move up or down a fifth, sometimes a shift to a neighbouring mode, occasionally a nudge to density. The controls update to follow it, so you can watch the piece reharmonise itself in real time.

Changes are never abrupt. Voices glide and crossfade into the new key rather than jumping, and starting or stopping the instrument fades everything in and out gently, so nothing clicks. The aim was an instrument you can leave running for an afternoon without ever noticing the seams. It should reward attention, but it shouldn't demand it.

## What's Next

Ambient Drift 1.0.0 is released under the MIT licence, and the source is on [GitHub](https://github.com/artefactist/ambient-drift). Adding a voice is deliberately straightforward: write a builder function, register it, add a channel strip, and the layout makes room for it. I would genuinely like to hear what other people patch into it.

Press Start, set the scene, and then do the hardest thing of all: leave it alone. The best ambient music is meant to be **inhabited**, not consumed...
