🎹 PIANO ROLL · SCALE + CHORD DETECTOR

Tap notes. See the chord and every scale that fits.

Click any keys to "press" them. Press 3-7 notes and the chord name pops up (Cmaj7, Dm9, F sus4, …). The list below ranks every scale that contains your notes by fit percentage. Browser-only, no signup.

Look up: Try C · Am · G7 · F#m7b5
Diatonic in:
Scales:
No notes pressed yet — try tapping a few keys.

Matching scales

Press at least 2 notes The detector ranks scales by how many of your notes they contain.
How it works. Each scale is a set of 12-tone pitch classes (C=0, C#=1, …). The detector treats your pressed notes as a set, and for every (root × scale-formula) combination it asks: what fraction of your notes does this scale contain? Scales that contain all your notes (a "perfect" fit) bubble to the top. Tie-breakers: smaller scale wins (so pentatonic beats major when both fit), then alphabetical.

Chord detection kicks in at 3-7 notes. For each candidate root we rotate your pressed pitch classes so the root lands at 0 and compare against 21 chord shapes (triads, 7ths, sus, 6ths, add9, 9ths) by Jaccard similarity. The best fit wins; ties go to simpler chords. So C-E-G prints C major, C-E-G-B♭ prints C7, C-E♭-G-B♭-D prints Cm9.

Progressions auto-play through the same Web Audio look-ahead scheduler the metronome uses — a 25 ms tick checks whether the next chord falls in a 100 ms scheduling window and, if so, queues all the chord's oscillators on the audio thread at a precise audioCtx.currentTime. The audio thread does the timing; JS just stays ahead. Result: rock-solid chord cycle at 60-180 BPM that doesn't drift even when the tab is busy.

Key matcher handles the reverse — find beats in a given key.