Lindberg Pre-Compositional System

An interactive tool for exploring Magnus Lindberg's hexachord-and-spectrum method of generating compositional pitch material.

What this is

Magnus Lindberg, the Finnish composer, developed a pre-compositional method that combines two seemingly opposing traditions:

The result is a fixed pitch palette that is both mirror-symmetric (no tonal centre, perfectly balanced around an axis) and acoustically grounded (every note belongs to the harmonic series of an implied bass note far below). This tool lets you generate that palette for any inversionally symmetric hexachord and any base pitch, and visualise it on the 88 keys of the piano.

What the system achieves

Mirror symmetry

The 12 notes of the chord pair off around a central axis — every pitch has a counterpart at an equal distance on the other side. With no asymmetry, there is no tonal pull and no implied "tonic". The chord becomes a self-contained, balanced object.

Harmonic unity

The same 12 notes are simultaneously heard as upper partials of a single very low fundamental. This grounds the abstract symmetry in physical acoustics — the notes reinforce one another the way harmonics of a vibrating string do.

A two-tier compositional texture

The 12-note PSC (Primary Sonority Chord) functions as structural foreground — the notes that carry the main musical argument. The added partials function as resonant background — softer, sustained, filling in the harmonic spectrum of the implied fundamental. Every foreground chord is acoustically supported by its own spectral shadow.

The 6 steps Lindberg follows

  1. Choose a hexachord from the catalogue of inversionally symmetric set-classes. An arbitrary creative choice.
  2. Derive the complementary hexachord automatically — together they form the full 12-tone aggregate.
  3. Assign pitch-class 0 to a note name — fixes the transposition level of the whole system.
  4. Arrange the 12 notes across registers aiming for an even spread of intervals across roughly 5 octaves, with the two hexachords occupying distinct lower and upper zones. Internal trichords are alternated to avoid acoustically opaque clusters.
  5. Calculate the virtual fundamental and add its missing partials. The 12-note chord is analysed as upper partials of a sub-audible fundamental; partials within the central register that aren't already present are added to the texture.
  6. Compose using the resulting note-set — PSC notes as structural foreground, added partials as resonant background.

How the scale is derived

The system is fully deterministic — once you pick a hexachord and a base note, every other note in the scale is computed by the rules below. The worked example throughout uses set-class 6-7 (012678) with base note B1, which reproduces the example in the source paper exactly.

Step 1 — Generating H₁ from the hexachord

The hexachord is specified as a set of six pitch-class integers between 0 and 11 (its prime form). For 6-7, that's {0, 1, 2, 6, 7, 8} — i.e. two chromatic trichords a tritone apart. Assigning pitch-class 0 to C, this becomes the upper hexachord H₁: {C, C♯, D, F♯, G, G♯}.

Step 2 — Generating H₂ as the complement

The complementary hexachord H₂ is the six pitch classes that aren't in H₁ — simply {0,1,…,11} \ H₁. For 6-7 that gives {E♭, E, F, A, B♭, B}. Together H₁ and H₂ contain all twelve pitch classes exactly once, forming a complete aggregate.

Step 3 — Verifying the symmetry

For 6-7 specifically, H₂ is a transposition of H₁: H₂ = T₃(H₁) (shift every note up by 3 semitones). It is also an inversion: H₂ = T₁₁I(H₁) — every pair (one from H₁, one from H₂) sums to 11 mod 12. The inversional axis lies between B♭ and B. This is what gives the chord its self-symmetric, centreless quality. (Hexachords where the complement belongs to the same set-class as the original are called self-complementary.)

Step 4 — Registral placement and trichord alternation

The 12 notes are now distributed across roughly 5 octaves, with H₂ in the lower zone and H₁ in the upper zone. The challenge: each hexachord's two internal trichords are chromatic (e.g. {E♭, E, F} and {A, B♭, B}). Stacking them as-is would form acoustically opaque clusters.

The solution is strict trichord alternation: never place two members of the same trichord consecutively. For H₂ this produces the sequence B – F – B♭ – E – A – E♭, alternating between the two trichords at every step. The resulting intervals are an exact alternation of tritone (6 semitones) and perfect fourth (5 semitones). The same logic applied to H₁ yields G♯ – D – G – C♯ – F♯ – C, and the junction between zones is itself a perfect fourth — so the 12-note voicing is uniformly spaced by 5/6 semitones throughout. The base note you pick simply transposes this entire pattern up or down.

Step 5 — Computing the virtual fundamental

The 12-note chord is now reinterpreted as upper partials of a single very low fundamental. The tool places the virtual fundamental approximately 18 semitones below the bass note. For a B1 voicing, that puts it at F0 ≈ 21.83 Hz — a frequency below the threshold of human pitch perception, but acoustically real as a sub-audible reinforcement. Pick a different base note and the virtual fundamental shifts in lockstep.

Step 6 — Adding missing partials

From the virtual fundamental, the program calculates the harmonic series — the frequencies at integer multiples (1×, 2×, 3×, …) of the fundamental. Each harmonic is converted into its nearest equal-tempered MIDI pitch:

The tool then keeps only the partials that fall in the central register — roughly between 20 semitones above the bottom of the chord and 20 semitones below the top — and drops any whose MIDI pitch already belongs to the PSC. The result is the set of "added partials" shown in yellow on the keyboard, which fill in the spectral shadow of the chord without duplicating its structural notes.

Step 7 — The complete note-set

The union of the 12-note PSC and the added partials is the complete usable scale for that hexachord and base note. For 6-7 with base B1 this comes out to 23 notes; for other configurations the number varies because the partial filter depends on the chord's exact registral span. Compose freely using only those notes — that is Lindberg's pre-compositional discipline.

The PSC carries the structural argument; the partials provide the resonant atmosphere. Treat the two layers as foreground and background and the chord becomes its own acoustic ecosystem.

How to use the tool

1. Choose a hexachord

Pick a set-class from the dropdown. The current example is 6-7 (012678), which has two chromatic trichords separated by a tritone — the worked example in the source paper.

2. Choose a base note

Type the lowest pitch of the chord using scientific pitch notation: e.g. B1, C1, E1, E♭2. (You can also type Eb2 or F#3.) The whole 12-note voicing transposes around this anchor.

3. Read the keyboard

Red H₂ — the lower hexachord (PSC). The structural notes that occupy the bass and tenor registers.
Blue H₁ — the upper hexachord (PSC). The structural notes that occupy the alto and treble registers.
Yellow partial — added partials of the virtual fundamental, marked p9, p11, etc., showing the harmonic number. These fill in the spectral shadow of the chord.

Together, the highlighted keys are the complete usable note-set for that hexachord/base combination. Anything outside those keys lies outside the system for that configuration.

4. Read the details panel

Below the keyboard, two tables show:

5. Compose

Use the highlighted keys as the raw material for melody and harmony. Treat H₁ and H₂ as your structural argument; treat the partials as quieter, sustained reinforcement that doesn't compete with the foreground.

Try it

The tool is fully client-side — every visitor's browser holds its own independent state, so you can share this page and many people can explore different hexachords simultaneously.

Open the interactive tool →