I’ve started two AI-music projects before this one. Both worked, neither lasted — one lived in a chat window and a cloud host, the other on my desktop with no real structure. This weekend, working with an AI coding agent, I built the third attempt differently: specs first, an adversarial review of those specs before building, and every decision written down. Two days later there’s something my earlier projects never reached — a thing I practice with.
What it does
I play a phrase on my piano. A small music model running on my own GPU (Stanford’s Anticipatory Music Transformer — 128M parameters, nothing exotic) listens to the actual MIDI, and about a second later it answers through a Vienna Synchron grand piano, on the monitor beside me, notes lighting up as it plays. Trading fours with something that heard me — not a backing track. Both sides get recorded as separate MIDI tracks.

The part I didn’t see coming
I read music fine, but my ear is weak — I can’t reliably tell a perfect 5th from an octave by sound. So we pointed the same machinery at ear training: the partner plays a short figure, I sing it back (yes, out loud), then play what I heard. Deterministic code scores the intervals — and names the misses in teacher language: “classic inversion trap — same letter, wrong half of the octave.”
Three practice sets in one evening:
- Set 1: 0 for 9. Mostly bugs in the interaction, found by sitting at the bench and being confused. (When is it my turn? Which note do I start on? Every confusion became a fix within minutes.)
- Set 2: 6 for 14. Real baseline — and a real diagnosis: every time an octave played, I answered with a 5th. My ear didn’t have a sound for “octave” yet.
- Set 3: 12 for 17, octave confusion gone. What changed: the reveal now comes with a song hook (“Somewhere Over the Rainbow” for the octave), and the drill became a two-way discrimination — you can’t game it with finger memory when you don’t know which interval is coming.
There’s a profile file on my disk now that knows exactly which intervals I own and which ones fool me, updated every rep. Next session, the AI coach reads it and decides what we drill.
Why this one will stick
Not because the code is fancier. Because it does something I actually want every day (I went back to the bench three times tonight), and because the project has bones: specifications, decision records, a review process that caught real design errors before they were built. The build went fast — the understanding is written down so I can catch up to my own project.
More to come — this is day two.