After last week’s experiments in learning to read music, I’m thrilled to announce that I can now play the piano! But only with my right hand.
The sheet music app I built last week actually works, which is very exciting. It’s been genuinely fun to finally break the seal on something I’ve wanted to do for years — and even better to have done it via the noble medium of making random geeky stuff on the internet.
The next step was to learn the left hand as well… once I’d spent a week developing a version 2 of the app, obviously.
I definitely wanted to improve the pitch detection, and it turns out this is surprisingly complex: I’d assumed that when you press C, the piano makes one nice neat frequency you can detect, but sadly it’s not that easy.
That is how electronic instruments work — and that’s why they sound so flat and artificial. In a real piano, each string vibrates at multiple points along its length, producing a whole bunch of different frequencies in each “note” and giving the instrument its depth and richness. Which is lovely, but makes them a pain to analyse.

Anyway, several days of learning about pitch-detection algorithms later, I now have a much more reliable system that filters out noise and handles octaves far better — apparently the trick is to measure not frequency but patterns of frequencies over time.
I’ve also swapped in a proper music-notation renderer, so it can now show sharps, flats, and runs of notes for practice. And in fixing the problem of repeated notes, I added a bit of intelligent weighting so it shows you the notes you struggle with more often to aid practice.
There’s still plenty to add — accuracy tracking, session comparisons, note sequences — but that’s all for the future.
For now, I’m off to play some piano, and see if I can get both hands working at the same time without losing another week to version 3.
The latest version is live here if you want a go: https://piano-music.fly.dev/