Skip to content
roomi fields

BPscript · S15 · Notebook

Transposition Beyond Equal Temperament: Moving Past 12-TET

Why transposing by a semitone only works in 12-TET, and how to do without it.

Published 21 May 2026 · Lire en français

Why “going up a semitone” only works in 12-TET

Transposition is a simple gesture on the piano. In Indian, Arabic, or medieval music, it is an operation that can change the entire harmonic color — or simply be impossible.

Where does this article fit?

This article sheds light on an architectural choice: why the pitch system (S9) separates tonic, scale, and grid instead of putting everything into a frequency table.


The problem

In equal temperament (12-TET), all semitones are identical: 100 cents each. Transposing = shifting by N semitones. Every interval remains the same. Simple.

But as soon as we step outside 12-TET, “going up a semitone” no longer has a universal meaning:

  • In just intonation: intervals are not equal. A major second can be 9/8 (204 cents) or 10/9 (182 cents) depending on its position. “Going up a step” changes the interval — the melody is distorted.
  • In 22 shruti: the 22 micro-intervals are irregular. Shifting by 1 shruti completely transforms the modal color.
  • In meantone temperament: sharps and flats are not enharmonic. C# ≠ Db. Transposing by semitones produces out-of-tune intervals.

Four operations often confused

Musicological analysis reveals 4 distinct operations, often collectively referred to as “transposition” without distinction:

OperationWhat changesWhat remainsWhen it works
Tonic shiftThe reference noteThe intervals (ratios)Always
Degree shiftThe starting degreeThe temperament gridRegular scales
Grid shiftThe position in the gridNothing is guaranteed12-TET and equal temperaments
Frequency ratioAbsolute frequenciesRatios between notesAlways (but not musical)

Tonic shift — the reference moves, intervals remain

We change the reference note, we keep the same intervals. This is what an Indian musician does when changing the Sa — they do not transpose by semitones, they change the starting point and all notes are recalculated.

// Before: Sa = 240 Hz, Pa = 360 Hz (ratio 3/2)
// After tonic shift: Sa = 260 Hz, Pa = 390 Hz (ratio 3/2 preserved)

This is the universal operation: it preserves all intervals in all systems.

Degree shift — changing the starting degree

We start on a different degree of the scale. This produces a different mode (C major → D Dorian, for example). This is not transposition in the strict sense — it is a change of mode.

Grid shift — moving within the temperament

We shift all positions by N steps in the temperament grid. This only works if all steps are equal — that is, in equal temperament.

// 12-TET: all steps = 100 cents → grid shift OK
// Just intonation: irregular steps → grid shift distorts intervals

This is piano transposition. It is omnipresent in MIDI (pitch + N). But it is specific to 12-TET.

Frequency ratio — multiplying frequencies

We multiply all frequencies by a ratio. Mathematically clean, but musically it does not correspond to anything known — except for octave transposition (ratio of 2).


How BPscript exposes this

Transposition is a symbolic operation applied before the resolver: it acts on the degrees and the reference, not on the already calculated frequencies. BPscript therefore treats it as a runtime control — a () qualifier, not an engine instruction [].

Three distinct controls, which correspond to the three musically useful operations:

ControlOperationActs onUniversal?
(tonic:freq)Tonic shiftthe reference (baseHz/baseNote)Yes
(degree:N)Degree shiftthe scale (starting degree)Yes (changes intervals)
(transpose:N)Grid shiftthe alphabet / the grid (N steps)Equal temperaments only

The frequency ratio is not exposed as a transposition control — it is synthesis/CV, not a musical operation.

Implementation status. These three controls are defined in the architecture, but (transpose:N) is not yet implemented on the audio side. Tonic shifting is currently done by changing the tuning (see below).


The consequence for the architecture

The six-layer pitch system (S9) is designed so that tonic shifting — the only universal type — is the natural operation. By separating tonic (tuning), scale (degrees), and grid (temperament), each type of transposition acts on the correct layer, and BPscript can signal when an operation does not apply cleanly in the current system.


Key takeaways

  1. Transposition is not universal — it depends on the type of temperament
  2. 4 distinct operations: tonic shift (universal), degree shift (modes), grid shift (12-TET), frequency ratio (mathematical)
  3. BPscript exposes 3 symbolic controls: (tonic:freq), (degree:N), (transpose:N) — applied before the resolver
  4. (transpose:N) = grid shift → only works in equal temperament, and is not yet implemented on the audio side (backlog)
  5. Tonic shift = changing the reference (baseHz of the tuning) → the only type that preserves intervals everywhere

Further reading

  • Asselin, P.-Y. (1985): Musique et tempérament — historical tuning systems and why transposition is problematic in them
  • Sethares, W. (2005): Tuning, Timbre, Spectrum, Scale — the connection between tuning and timbre

Glossary

  • Tonic shift: transposition by changing the reference note — preserves all ratios
  • Grid shift: transposition by shifting N steps in the temperament grid — only works in equal temperament
  • Degree shift: changing the starting degree in the scale — produces a different mode
  • Enharmonic equivalence: Equivalence between two notations of the same frequency (C# = Db) — only exists in equal temperament
  • Step: An elementary interval in the temperament grid
  • Cents: Logarithmic unit — 1200 cents = 1 octave, 100 cents = 1 semitone in 12-TET

  • S9 — The six-layer pitch system — the architecture that this article justifies
  • S3 — The actors — how two instruments share the same alphabet with different tunings

Prerequisites: S9 Reading time: 8 min Tags: #BPscript #transposition #temperament #musicology


End of the S series. Return to S1 to restart the journey.


← Return to index