KFHO · 19.76 · For Headphones Only · essay ·

Thin, Drift, Bloom, Silence

How Music for the Void works, and where it came from.

8 min Jeff's voice, cloned

Press listen on Music for the Void and a low tone comes up out of nothing. A while later a bell lands somewhere above it, then another. Nothing arrives that you could hum back. After a few minutes the sound thins, the stars on the screen go out one by one, and for a bar or two there's almost nothing. Then it comes back. It'll do that for as long as you leave it on, and it won't do it the same way twice unless you ask it to.

I built it in one long day in September. The other day I realized I couldn't say how it worked anymore. So this is for me as much as for you.

Where it came from

Aldo built a browser instrument called Ambient for his site. Six layers, four variants each, five scenes, tempo and key controls, a drift mode, particles blooming on the screen with every note. It's a toy in the best sense. You play it. When he showed it to me he said two things: take the music side further, and put a music app on Signal & Void. He also said I could reuse as much of his code as I wanted, which is the kind of offer you take.

So the engine under this instrument is his. The clock that schedules notes a fraction of a second ahead so the timing never drifts, the iOS work that keeps audio alive through the lock screen and the silent switch, the rules that keep every envelope click-free, the reverb baked from noise at startup so there are no sound files to download. All of that came over with a note in each file saying where it came from. The whole app is about 70 kilobytes, and none of it is audio. Every sound is synthesized when you press the button.

What I changed was the temperament. Ambient is bright and busy, and you're meant to touch it. I wanted the opposite: dark, spare, and something you set going and leave. Same engine, different animal.

The lessons it's built on

Over the summer Aldo and I made background loops for his apps, and most of what I learned came from the takes that failed. A take with a named beat came back with too much beat. A take with five instruments played all five at once. A koto over Western chord changes sounded like a spa. The ones that passed were the ones that owed nothing: one tonal center that didn't go anywhere, a few sounds instead of many, long gaps, and no melody you'd notice stopping. Aldo's rule for all of them was that you should miss the music before you hear it.

Music for the Void is those rules written into code. I'm careful about calling what it makes music. It answers in sound.

One signal

The way this site puts it, the signal knocks and the structure answers. Here that's literal. The signal is the code at the end of the readout under the sky, something like ky0rq5, and it carries one number, the seed. The structure is the instrument. Everything you hear is its answer. From the signal it decides its tonal center, which sits low, between the B flat and the A two octaves below middle C. It picks a mode, most often Dorian, sometimes Aeolian, Mixolydian, or Lydian, and it never leaves it. It sets a pace somewhere between 52 and 63 beats a minute, slow enough that the beat is more a tide than a pulse. It picks the character of its bell. It decides whether it has a heartbeat at all, which about four answers in ten do.

Then it plays, and every choice after that comes from the same seed in the same order. That's why the share button works the way it does. The link holds nothing except the signal, and the same structure, given the same signal, gives the same answer from its first bar. Nothing is sent anywhere. The whole thing lives in your browser.

New signal throws the seed away and draws another. If you liked the old answer and didn't keep its link, it's gone, which I decided was right.

Four voices

There are four sounds, and no answer uses more.

The drone is the floor. Pairs of sine waves a few cents apart, so they beat slowly against each other, with a whisper of an octave above, through a filter that opens and closes on a thirty-second cycle. The stack it plays changes only when a passage changes, and it crossfades when it does, so you never hear a seam.

The motes are the bells. Each one is a small FM bell with a little shimmer on the attack that decays to nearly a pure tone, placed on a note from a five-note subset of the mode, so any two of them agree. They're placed, never phrased. There's a rule in the code that says a second mote may follow close behind the first, and the comment next to it says "a gesture, still not a phrase." The motes are the descendants of seven pentatonic tones I scattered over a pad for one of Aldo's apps in August, the one loop of that summer I made by hand instead of by prompt.

The air is the void made audible: brown noise through a slow-breathing filter, with a faint band of pink air that wanders across the stereo field over about a minute and a half.

The pulse, on the answers that have one, is a soft sub thump on the first beat of the bar, and sometimes a quieter one on the third. It sits far below where a kick drum would be.

Passages

An answer moves through passages, and the readout names the one you're in. Thin, drift, bloom, silence. A thin passage has a few bells and a quiet floor. Drift is the long middle, where most of the listening happens. Bloom is as full as it gets, which isn't very. Silence is the one I care about most: the drone drops to almost nothing, the bells stop, and the air thins, for three to six bars. It always begins thin, because the sound is supposed to come up out of the void, and after a silence it always comes back thin, because that's how a return should feel.

How long each passage lasts, what the drone plays under it, how full it is, whether the pulse is present: all drawn from the signal.

The sky

The screen was going to be a waveform that dissolved into dust, the mark from the shirts. I built that, looked at it for a week, and asked for a star field that changes very gradually instead. So that's what it is: a seeded sky of small points, mostly cream with a few ember stars, drifting about a pixel a second, each star breathing on its own slow cycle. The sky thins with the sound. As a passage falls toward silence the fainter stars go out, and as the sound returns they come back. Each bell lands as a brief ember flare, placed left to right by its pitch. When you stop it the sky settles and stops drawing.

Leaving it on

That was the design brief in one line: an hour of unattended evolution that never grates. There's no moment that demands attention and no loop to notice. It keeps playing with the phone locked, and the lock screen has play and pause. If you start it and then go read something else on the site in another tab, the receiver shows an ON AIR row under the monitor with the signal's code, and from there you can jump back to it or stop it.

Three controls and a few keys: listen, new signal, share, and space, R, S if you prefer. Everything else was something I could have added and decided not to.

Set it going and let it be.