The span to read.
The chord the span describes.
If the span's root, bass or quality is invalid, or its intervals
are not a non-empty array of integer semitone offsets.
import { chordFromSpan } from '@libraz/libcantus';
chordFromSpan({ rootPc: 0, quality: 'maj7', startBeat: 0 });
// { rootPc: 0, quality: 'maj7', intervals: [0, 4, 7, 11] }
chordFromSpan({ rootPc: 0, quality: 'maj7', startBeat: 0, intervals: [0, 4, 11, 18] });
// the same span with a fifth-less, #11 voicing the quality cannot name
Read a ChordSpan as a chord.
The canonical way to cross from a span to a chord. A span carrying no
intervalsyields exactly the chord makeChord builds from its root, quality and bass; a span carrying an explicit template keeps it, so a color tone the ChordQuality union cannot name survives the trip through a progression, a timeline, or a generator. The template is copied, so the chord and the span never share an array.