Neo-Riemannian harmony

Move among major and minor triads by changing one note at a time. The Tonnetz is a lattice that connects triads with shared notes. The pitch circle marks the current chord. The voice ribbon separates held notes from moving notes. The trace explains each P, L, or R transformation. Harmony Engine organizes chords by their roles in a key.

Neo-Riemannian theory groups chords by smooth voice leading. Chord symbols can look distant even when only one note moves by one or two semitones.

Tonnetz

neighbourhood

The flat lattice repeats pitch classes at several positions. The cursor pans to keep the current triad centered. Torus view wraps repeated positions together.

Neighbourhood: the working view. The three triangles sharing an edge with the current one are its P, L and R moves.

Pitch labels
Wheel order

Voice ribbon

Walk controls

Tonal gravity

PLR decision trace

No cycle detected

Voice leading

Chord details

Current
C
Function lens
off
Common tones
Move cost

PLR motion and cycles

P, L, and R are triangle flips

Parallel keeps the root and changes mode. Leading-tone and relative keep two common tones and move one voice to a neighboring pitch class.

Distance is voice-leading cost

The voice ribbon shows which two voices held and which one moved. The cost strip plots total semitone motion over time. Neo-Riemannian walks usually stay near one or two semitones even when the chord symbols look remote.

Cycles create endless modulation

Alternating P and L enters a six-step hexatonic cycle. Alternating P and R enters an eight-step octatonic cycle. The indicator first appears after four matching steps. It confirms when the walk returns to its starting triad.

Function is optional

The function lens names each triad relative to a tonic. It stays off by default so small note movements drive the walk.

Guitar and violin use recordings from the MusyngKite soundfont (CC BY-SA 3.0). The page redistributes them unchanged and shifts pitch by at most one semitone.