Periphony 8D
The music that keeps me in the zone has no words in it and circles my head. Nobody was making it in my genres, so I built the converter that does.
- Runs on
- macOS
- Costs
- Nothing. No account, no telemetry.
- Version
- 1.2.0, download coming
- Built with
- One Python file and MIT’s KEMAR head
I write to music with no words in it.
That isn't a preference, it's a requirement. I've been vibe coding for about two years now, and the thing that keeps me in the zone is instrumental, usually EDM, sometimes not, running the entire time. The second somebody starts singing, my brain locks onto the voice and the session is over.
I have ADHD. The noise is the default state, and music without lyrics is one of the few things that reliably turns it down.
So I spend real time hunting for streams. A while back, somewhere down that rabbit hole, past a lot of livestreamed EDM channels that were genuinely decent, I found 8D audio.
If you haven't heard it: put headphones on and the sound stops sitting between your ears. It circles your head. Not panning left to right. Around. Like someone is physically carrying a speaker in a slow lap around you.
My brain exploded.
Then something better happened. It didn't just sound cool, it worked. The noise shut off. I could hyperfocus on a project in a way I usually have to fight for, and it turned into a genuine catalyst for actually finishing things. I've since read that this does something for people who struggle with ADHD. I can't tell you the mechanism. I can tell you what it did for my output.
Which is where the problem started. The 8D tracks I could find were somebody else's taste, and most of them had vocals. One voice and the spell breaks. I wanted my genres, no lyrics, in this format, and that combination essentially did not exist.
So I did the thing I always do, and asked Claude what this actually was and how it worked. These models are built to be eager to get you to your destination, so “what is this” became “how does it work” became “let's build the app” faster than I can honestly account for.
About that name
I need to get this out of the way: I think “8D” is a dumb name.
There is no eighth dimension. There aren't eight channels. It's binaural stereo, two channels, same as always, processed so your brain reconstructs a position in space. The actual word for reproducing sound all the way around a listener is periphony. That's a real term with real history.
I tried to resist. I lost. “8D” is what everybody searches for, and pretending otherwise just means nobody finds the thing.
You can watch me lose that fight in the repo's own history. It shipped as “8D Audio Converter,” got renamed to “Periphony,” and finally landed on “Periphony 8D.” The correct word and the dumb one, stapled together.
I wanted to be right and found anyway.
At first it only panned
Version 1.0.0 went in on March 30th. It was wrong.
Audio came out, sure. But with headphones on, the sound just slid left to right. A stereo pan with extra steps. Nothing ever went behind me.
The bug turned out to be a lookup. The measurements I was using index positions by angle, and I was finding the nearest one the naive way instead of remembering that angles wrap around. 359° and 1° are two degrees apart, not three hundred and fifty-eight. So a sound that should have been hard right was snapping to directly behind, the whole right side of the circle folded onto the back of my head, and what survived was left versus right. Panning.
I want to be accurate about how it got fixed, because it says something. I'd been stuck on that math for days. Then a newer Claude landed, I put the problem back in front of it, and it solved it in minutes. The fix went in on April 1st.
That was the first time it actually went around my head.
Your head is a filter
Here's the idea the whole thing rests on. A sound coming from behind you and to the left reaches your left ear a hair sooner, a bit louder, and colored differently, because your skull is in the way and the folds of your ears change it depending on the angle. Your brain reads those tiny differences and tells you where the sound is.
You can fake that with an equation. I didn't want to. Periphony uses real measurements from KEMAR, a mannequin head at MIT with microphones in its ear canals that had sound played at it from all the way around. The rotation is built from recorded human hearing, not a model of it.
The bass stays out of it. Everything below 150 Hz sits dead center, because low frequencies carry almost no sense of direction anyway, and spinning them just makes the mix feel like it's falling over. Only the part above that goes on the ride.
Then there's the catch nobody warns you about. On that dummy head, straight in front and straight behind sound identical in both ears. Front and back are literally the same signal. Your brain has nothing to work with, gives up, and you're back to left-right panning.
What breaks the tie is the room. The engine adds reverb that changes with position: tight early reflections when the sound is in front of you, a longer, softer tail when it's behind. That's the cue your brain actually uses, and adding it is what made a sound convincingly pass behind my head instead of vanishing into mush.
The spin is locked to the music, too. It finds each track's tempo and does one lap every eight beats by default, so the movement lands with the rhythm instead of drifting against it. You can send it clockwise, counter-clockwise, in a figure-eight, or at random.
Making it not sound worse
The part that took the longest is the part nobody would ever list as a feature.
Early renders came back quieter and flatter than what went in. That's fatal. If the 8D version sounds smaller, you'll just play the original. So the last stage measures the source and matches it: puts the tonal balance back, matches the loudness, and limits the peaks.
On my reference track the source and the render now sit at −13.3 and −13.4 LUFS. What's left different is what should be different: the stereo image got much wider. The movement is the only thing that changed.
One more trap worth writing down, because it cost me a real amount of time. I was cutting a hump out of the frequency range by filtering it out and subtracting it, and the filter I was using handed the band back slightly out of time with the original. So instead of a clean notch I got a hole with boosted shoulders on either side. It sounded like the whole mix was being played through cupped hands.
By ear it just registered as “off.” It took a measurement to see it.
The app itself is a single Python file. Drop MP3s on it, pick a direction, press convert, get 320 kbps MP3s back. It runs entirely on your machine. No account, no telemetry, nothing uploaded.
Four months on a shelf
After April 1st the repo goes silent until August 9th. Four months, zero commits.
That's not a dramatic story. That's just how I work. I have a lot of projects going, I hyperfocus on whichever one is interesting right now, and the rest go on a shelf until the time or the interest comes back around. The tool worked. So I stopped touching it and used it.
Which is the joke I didn't plan: an app whose entire purpose is producing hyperfocus, with a development history shaped by hyperfocus deciding what I was allowed to care about that month.
What brought it back was Infinite Volumes. Upgrading that meant this had to be more than a personal script, so in one week in August it got its output stage rebuilt, got faster, got drag and drop, got a real .app bundle, got renamed twice, and got a landing page.
What it feeds
Periphony isn't a standalone product in my life. It's a part in a pipeline.
Infinite Volumes is both a YouTube channel and the streaming software behind it, which I built. I generate the music, the thumbnail, and a seamlessly looping animation out of a custom ComfyUI workflow, and load them onto the server in batches I call eras. An era is a four-hour video, usually around a hundred songs, and it streams for two weeks. Meanwhile a separate system called Poster works the same assets into social posts across that fortnight.
Periphony is the step between “I have a hundred tracks” and “the era is 8D.” The thing I originally went looking for and couldn't find, my genres, no lyrics, circling your head, running continuously, I ended up having to build the entire supply chain for.
Infinite Volumes and Poster each deserve their own write-up, and they'll get one. This one's about the converter.
The honest part
I wrote about RE:play a little while ago, and the spine of that piece was giving something away. Free, no account, no ads, no store. Not open source, though. The code on that one stays mine.
Periphony is the same deal. The repo is private, I'm not planning to open source it as of now, and the app will be free. I'm not going to dress that up as a principled stand. It's simply where these land.
And since a piece like this usually implies you can go get the thing: you can't yet. The page is up, the app is at version 1.2.0, it runs every day on my machine and it's producing the audio for a live stream right now. But the signed build and the download behind that page aren't wired up.
Publishing a landing page for software nobody can download is, I'm aware, an extremely on-brand move for someone who built a marketing site for RE:play and then never marketed it.
It's coming. This is a project write-up, not a launch.
Hear Periphony 8D
What it is, and an A/B demo you can hear in the browser. Headphones required; the effect does not exist on speakers. Free macOS app, download coming.
periphony8d.cyburdine.com