Zack Design has published Sustain — an open-source deliberate-practice engine for musical instruments. It runs you through a guided daily session, measures your progress by what you can actually do rather than by points, and renders the whole thing as a lane of segments flowing toward you in a three.js night scene. It can listen through your microphone and verify you’re really playing, entirely in the browser. MIT licensed. The first instrument pack is didgeridoo, for a reason that starts with snoring.
Source → github.com/isaacrowntree/sustain (MIT) · clone it and pnpm dev — there’s no hosted demo, and the app never sends your data anywhere.
Why this exists
I played trombone at a decent level and then stopped for years. I also snore, enthusiastically, and the suggestion that came back was: play the didgeridoo.
That sounds like folk advice. It isn’t. Puhan et al., BMJ 2006 is a randomised controlled trial: 25 people with moderate obstructive sleep apnoea, four months, and the didgeridoo group’s apnoea–hypopnoea index dropped by about half, with significant improvements in daytime sleepiness and in how much their partners were disturbed. It later won the 2017 Ig Nobel Peace Prize, which is the kind of accolade that makes people assume the science is a joke. The science is fine. The mechanism is unglamorous: circular breathing and sustained droning are resistance training for the upper airway, and the same effect shows up in the myofunctional-therapy literature with no instrument involved at all.
Here’s the part nobody puts on the poster. The trial’s actual dose was at least 20 minutes a day, at least five days a week, for four months — and the participants beat it, averaging about 25 minutes across nearly six days. That is roughly 120 sessions. The intervention isn’t the didgeridoo; the intervention is turning up 120 times.
So the problem I actually had was not “how do I play the didgeridoo.” It was “what gets me to session 87.”
Did this already exist?
Mostly, and it’s worth knowing about before you read another word of mine.
Silent Sleep Training (~US$349) is the closest thing, and its pedigree is remarkable: it’s built by Alex Suarez’s company — Suarez is the didgeridoo teacher who taught the participants in the BMJ trial. It bundles a purpose-made silicone instrument with an app that listens and gamifies a 15-minute daily session. Didge For Sleep (US$167) is the other half of the idea: a real travel didgeridoo plus a sleep-apnoea-specific video curriculum, but no app, no tracking, no session engine.
What doesn’t exist is the overlap: a real didgeridoo, a 30–40 minute guided session, and a microphone that verifies you actually played. The snoring-adjacent apps (SnoreGym, SnoreFree, Airway Gym, Soundly) do daily arcs with their own mouth exercises. The mic-verified music trainers (Yousician, tonestro) need pitched repertoire and can’t score an unpitched drone. And a GitHub search for a didgeridoo trainer or a circular-breathing trainer returns nothing usable — the repos named “didgeridoo” are an acoustic-impedance calculator and, I promise, an operating system.
So: build. But build the general thing, because a drone hold and a trombone long tone are the same exercise wearing different hats.
No levels, no XP, no points
The easiest version of this app is a Duolingo skin: streaks, experience points, a little celebration when the bar fills. I deliberately didn’t build that, and the reason is that the didgeridoo already keeps score, honestly. Your longest unbroken drone is a real number about your actual throat. Wrapping fake currency around a real measurement doesn’t add motivation — the overjustification research suggests it displaces it.
So progression is the curriculum:
- Records, not scores. Longest drone. Longest unbroken sound. That’s the whole reward economy, and every figure on screen is a measurement of something you did.
- Unlock by demonstration. The next drill appears when you show you can do the one before it, not when a counter fills. Circular breathing on the instrument stays locked until you’ve done the water-and-straw drills and can keep the bubbles unbroken through a sniff.
- Perfect weeks, not daily streaks. The evidence protocol is five days a week, so rest days are drawn into the calendar as scheduled, not as failures. There is no chain to break — the habit-formation work found a single missed day doesn’t impair habit formation, and an app that punishes you for it is inventing a problem to sell you the cure.
- Missing a day is recoverable, not fatal. Miss a weekday and the weekend offers a make-up session that puts the week back to whole. This is the feature I’d argue hardest for: nearly every habit app treats the miss as the punishable event, when the miss is just Tuesday being Tuesday. The thing worth protecting is the return.
- You can start on a Wednesday. Join mid-week and week one asks only for the sessions that were still ahead of you — a four-day week counts as perfect if you did four. Nothing is more discouraging than a program that opens by scoring you against days that had already gone by the time you downloaded it.

That bar chart at the bottom is the sixteen-week journey, one bar per week, height being sessions completed and colour being the phase you were in. It’s the only “gamified” element in the app and it’s just a picture of the truth.
What a session looks like
Thirty-five minutes of staring at a countdown is how a practice habit dies. So a session is a lane of timed segments flowing toward you — the Guitar Hero sustain bar stretched to the length of a breath.

Most of what’s in that screen is stolen, on purpose, from software that solved these problems years ago:
- The strike line is a physical object, not a marker. Every rhythm game since Guitar Hero converges the lane into something that reacts — so segment boundaries flare as they’re consumed, and the ember is the sharpest, warmest point on screen.
- The played trail rides behind it, an edge-on seismograph of what the microphone actually heard: bright where the drone lived, ash where it dropped. Guitar Hero’s real insight about long notes is that a hold is never static — you get continuous proof the thing is still listening.
- Rests get a breathing halo, paced like the Apple Watch Breathe animation, because in a didgeridoo program the rests genuinely are breathing exercises.
- The next segment brightens about one breath before it arrives, with a soft chime — telegraphing, not a countdown, so you prepare instead of react.
- A long unbroken run escalates the world: the stars brighten, the dust thickens. Flower and Tetris Effect both make progress an environmental change rather than a meter, and it turns out that’s exactly right for something you do with your lungs.
- The HUD fades after about ten seconds of stable playing and comes back on any input. The research on this is unambiguous that auto-hiding chrome without a way to summon it back just annoys people.
The microphone is optional, and local
Verification is tiered, and the app is fully usable at tier one:
- Timer. Honour system. No microphone at all. This is how the BMJ trial ran — those participants had a paper diary.
- Energy. Raw loudness, about twenty lines of code, enough to make the scene breathe with you.
- Pitch. pitchy’s McLeod Pitch Method over a 4096-sample window, gated on clarity, frequency band and pitch stability, with hysteresis so a wobble doesn’t stop the clock. This is what turns “I think I held it about half a minute” into a measured record.
Three practical things I learned building tier three. You must ask for the microphone with echoCancellation, noiseSuppression and autoGainControl all off, because WebRTC’s noise suppressor classifies a sustained tone as background noise and quietly attenuates the exact signal you’re trying to measure. Don’t use FFT bin peak-picking — at a normal FFT size the bins are about 23 Hz wide, which is useless against a 60–90 Hz fundamental. And it doesn’t matter that laptop microphones roll off below ~100 Hz, because autocorrelation-family algorithms recover the period from the harmonic stack even when the fundamental is physically missing from the recording.
All of it runs in the browser. Progress lives in IndexedDB, recordings live in IndexedDB, and there is no account, no server and no telemetry. The one network request the app makes is for a webfont.
Multi-instrument by construction
An instrument pack is data, not code: metrics, a declarative curriculum of phases and drills, prerequisites, and an analyzer spec. The engine compiles a pack plus today’s date into a session. The didgeridoo pack encodes the trial’s protocol — drone holds, the circular-breathing drill ladder, lip and vocal-tract work — across sixteen weeks in four phases.
The useful accident is that the pitch analyzer is instrument-agnostic. A trombone pack is the same detector with a different frequency band, and it gets more out of it, because a detector that reports exact hertz can measure long-tone steadiness in cents. Guitar is the genuinely hard one — chord detection is a different problem — and it’s marked help-wanted in the repo rather than pretended at. You don’t need to write code to contribute a pack; a curriculum written out as text is the actual work.
Where it’s at
It runs. The engine, the didgeridoo pack, all three microphone tiers and the web app work end to end, with tests across the packages. I’m running it locally for now rather than hosting it — for a local-first app with no backend, pnpm dev is the deployment.
The instrument is sorted too: a PVC didgeridoo from African Drumming. Plastic is not a compromise here — the BMJ trial handed its participants plastic instruments precisely because they’re easier to learn on, and the therapeutic effect comes from what your airway is doing, not from what the tube is made of.
So there’s a curriculum, a coach, an instrument, and an empty progress file. The piece I’m most looking forward to is the one I can do least about, because it takes exactly sixteen weeks: the app records thirty seconds of you on day one and plays it back to back with day one hundred and twenty. Ask me in December.
A note worth making plainly: the didgeridoo is an Aboriginal Australian instrument, known as the yidaki to the Yolŋu people of north-east Arnhem Land, with a ceremonial history that long predates its use as a snoring intervention. Sustain is a practice timer for a breathing exercise. It makes no claim on any of that.
Header photo by Wil Stewart on Unsplash.
