@libraz/libcantus - v1.1.0
    Preparing search index...

    Type Alias SpelledInterval

    A spelled interval: a diatonic number, a quality label, and its semitone span.

    type SpelledInterval = {
        number: number;
        quality: IntervalQualityLabel;
        semitones: number;
        descending: boolean;
    }
    Index
    number: number

    Diatonic size: 1 = unison, 2 = second, ... 8 = octave, and beyond.

    Quality label: 'P', 'M', 'm', or repeated 'A'/'d' for (multiply) aug/dim.

    semitones: number

    Signed semitone distance from the first note to the second.

    descending: boolean

    Whether the diatonic letters move down.

    Always present, so the direction of a written-down interval is not something a reader can lose: data rebuilt without the key would otherwise come back ascending with nothing to say it had changed. Every producer decides it, and the compiler asks each one to.

    Not redundant with the sign of the span: a descending unison spans zero semitones, and a letter can rise while the pitch falls — dd2 climbs a letter and loses a semitone.