Everything the library needs to know about a scale.
mask is the 12-bit pitch-class set repeated 3× (36 bits) — the triple copy
lets the sliding-window scan rotate the scale to any mode/root.
supportsDiatonicFunction drives the two-tier model: membership (contains)
is defined for every scale, but functional queries (isDiatonic / harmonic
function) are only meaningful where a tonal hierarchy exists. Symmetric/atonal
scales set this false and those queries refuse (throw) rather than return an
answer that looks authoritative but isn't.
Everything the library needs to know about a scale.
maskis the 12-bit pitch-class set repeated 3× (36 bits) — the triple copy lets the sliding-window scan rotate the scale to any mode/root.supportsDiatonicFunctiondrives the two-tier model: membership (contains) is defined for every scale, but functional queries (isDiatonic/ harmonic function) are only meaningful where a tonal hierarchy exists. Symmetric/atonal scales set this false and those queries refuse (throw) rather than return an answer that looks authoritative but isn't.