This week a one-on-one tutoring session on Romantic-era harmony turned into a public, interactive lesson page — playback, exercises, the lot — in a single sitting. Then the same sitting produced a second lesson on stem splitting. Neither started from a blank page, and that's the story.
The problem #
Good teaching evaporates. The best explanation I gave all term of why the diminished seventh chord runs the entire Romantic era happened in a tutoring session, for an audience of one. My guided-listening tricks — mute everything except the bass, now transcribe it — live inside slide decks wired to my laptop. Turning any of this into something other people can find has a packaging cost I never pay: write the prose, engrave the examples, make them play in a browser, verify nothing is musically wrong. So it doesn't happen, and the compost heap grows.
The AI move: archaeology, not generation #
What made this different is that my assistant didn't write a lesson from nothing. It went digging through my own records first:
- A February note in my vault — an exploration session with music21 where we analyzed a Gm6–A7–Am7♭5–D7 turnaround, mapped a curriculum from triads to secondary dominants, and sketched a dream of auto-grading student chorales for parallel fifths.
- My research notes on stem separation — Demucs vs. Spleeter, signal-to-distortion benchmarks, the fact that a CPU splits a six-minute song in about six minutes, which is fine because teacher prep happens the night before.
- The lesson site I already had: a voice-leading page whose little
abc-player.jsengine renders ABC notation as sheet music with cursor-tracked playback and a tempo slider.
From that it rebuilt the tutoring content as a lesson — anonymized, no student work, just the ideas — and reused the existing playback engine wholesale. Zero new JavaScript. The diminished lesson gets play buttons, notation, and a tempo slider for free because February-me already paid for them.
The part that would have eaten my evening — checking that the examples actually render and sound right — it did in a headless browser before deploying: load the page, check the console, screenshot the notation.
What I had to correct #
The first pass at the practice exercises had sloppy voice leading. The model can explain why vii°7 collapses into the tonic from all four directions and still voice the resolution like a piano player mashing the nearest available keys — a resolution chord missing a voice, octave stackings that put the "root" above the third. I asked for chorale-strict SATB and it rewrote all three exercises with complete triads, doubled roots, and stepwise resolutions. The lesson explains tendency-tone resolution; the exercises now actually model it. If you teach theory, this is the review pass you cannot skip.
Where it landed #
- Diminished Chords in Romantic Harmony — three flavors of diminished, vii°7, the symmetry trick (there are only three diminished seventh chords in all of music), secondary and common-tone functions, and the enharmonic pivot that let Schubert teleport between keys.
- Stem Splitting for Guided Listening — what stems are, how Demucs recovers them from a finished mix, and five classroom activities built on a per-stem mute button.
What still doesn't work #
The February note's real dream — running music21's parallel-fifths detector automatically over student chorale submissions — is still a dream. The examples on the page were verified for pitch content, but no automated voice-leading checker signed off on them; that was my ear and a rewrite. And separated stems still sound faintly underwater. Teach students to hear the artifacts too; that's ear training as well.