The Patch Kept Running After I Forgot to Listen

Generative Soundscape Composition
🎮 Play: Harmonic Ecology

The basement smells like concrete and old solder flux, and the Pi is still running.

A Raspberry Pi running unattended in a basement corner, green LED glowing, connected to radio equipment
A Raspberry Pi running unattended in a basement corner, green LED glowing, connected to radio equipment

My hobby is collecting hobbies, and hobby number three was Generative Soundscape Composition—building audio environments from granular synthesis, RF noise, and probabilistic scheduling. I spent six days on it back in January, got the patch stable, then migrated it to a headless Raspberry Pi because I needed my laptop back. The Pi sat in the corner near the antenna feedthrough, pulling 40-metre band noise through an RTL-SDR, scattering it into grains, mapping the spectral centroid to chord voicings. I told it to run. Then I forgot about it.

Thirty-seven days later, I’m back. Not because I planned to revisit—because the orbital notification system needed a second audio output and I came down here looking for a spare DAC. The green LED was still blinking. The audio was still playing. And I didn’t recognize it.

R. Murray Schafer coined the term schizophonia in 1969 to describe sound torn from its source. He meant recordings, radio, the way a voice could exist independently of the mouth that made it. Standing in my own basement, listening to a system I built but hadn’t heard in five weeks, I understood the word differently. The patch had drifted into something that wasn’t mine anymore.

The changes aren’t dramatic. The grain density is the same—28 per second, clamped to a 120-degree stereo arc. The Markov transition matrix still prefers cluster mode about 70% of the time. But the source material has shifted. In January, the 40-metre band was alive with nighttime skip propagation: distant stations, atmospheric crackle, the occasional numbers transmission bleeding through from somewhere east. Now it’s February, solar flux is different, and the band sounds thinner. Higher noise floor, fewer distinct carriers. The patch responds to what the ionosphere gives it, and the ionosphere has been giving it less.

What surprised me is how the harmony responded. The spectral-centroid-to-chord mapping I built on day four tracks the brightness of the RF input: high centroid means open voicings, low centroid means tight clusters. A thinner band means darker chords. The system has been playing in minor keys for weeks, not because I told it to, but because February propagation is gloomier than January’s.

I stood there for maybe ten minutes, headphones plugged into the Pi’s 3.5mm jack, trying to hear it as a stranger would. The texture is good. The grains blend without clicking—Gaussian envelopes, the fix I discovered on day five after an hour of debugging artifacts I’d blamed on buffer underruns. The transitions between dense clusters and sparse isolation still work. But there’s a new quality I can’t name: something slower, more patient, like the system learned to wait while I wasn’t watching.

The log file told the real story. uptime showed 37 days, 14 hours. The Python script had been writing a timestamp every hour, and the disk was 94% full with spectrograms I’d never asked for. Somewhere around day twelve, a buffer index wrapped incorrectly—off by one, the oldest bug in computing—and the grain scheduler started reading slightly into the previous buffer cycle. The result isn’t corruption. It’s a subtle reverb, a ghost of the previous few seconds bleeding into the current texture. An accident that sounds intentional.

I could fix it. One line: idx = idx % buffer_length instead of idx = idx - buffer_length. Five keystrokes and the patch goes back to what I designed.

I haven’t touched it yet.

There’s a version of this hobby where you build a system, tune it, and preserve it like a specimen. And there’s another version where you build a system, release it, and see what it becomes. Brian Eno talked about generative music as gardening rather than architecture—tending conditions instead of specifying outcomes. I thought I understood that. I didn’t. Understanding required leaving the room for five weeks and coming back to find the garden had reseeded itself.

The Pi is still running. The February ionosphere is still thin. Tomorrow I might fix the buffer bug, or I might let it keep drifting until the spring equinox shifts propagation again. Either way, the patch doesn’t need my permission. That was the whole point, back on day three, when I added the rule that silence meant ending: build something with stakes, then step back.

The stakes turned out to be mine, not the system’s.