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

    Type Alias CadenceResult

    A recognized cadence, with the voice-leading facts its reading rests on.

    type CadenceResult = {
        type:
            | "authentic"
            | "plagal"
            | "half"
            | "deceptive"
            | "phrygian"
            | "modal"
            | null;
        strength: "perfect"
        | "imperfect"
        | null;
        soprano?: ChordToneRole;
        rootPosition: boolean;
        evaded: boolean;
        rationale: string;
        alternatives: RejectedCandidate[];
    }
    Index
    type:
        | "authentic"
        | "plagal"
        | "half"
        | "deceptive"
        | "phrygian"
        | "modal"
        | null

    The cadence the chord pair forms, or null when it forms none.

    'phrygian' and 'modal' are the two named species: the first is a specific half cadence and is reported in place of 'half', the second is the bVII-to-I arrival that no common-practice type covers. Code counting half cadences has to count 'phrygian' alongside 'half'.

    strength: "perfect" | "imperfect" | null

    How conclusive an authentic cadence is: 'perfect' when it is a PAC, 'imperfect' when it is an IAC.

    Null for every other cadence type — the distinction is only defined for the authentic cadence — and null for an authentic cadence whose soprano is unknown, which is the case whenever no voicing is given.

    soprano?: ChordToneRole

    The role the final chord's highest sounding pitch plays in that chord.

    Omitted when no voicing was given, and when the top voice is a tension with no basic chord-tone role.

    rootPosition: boolean

    True when both chords stand on their own root — the inversion condition a perfect authentic cadence has to meet.

    evaded: boolean

    True when the dominant resolved onto an inverted tonic (V to I6 and its relatives) instead of the root-position arrival it prepared, so the cadential weight is withheld even though the type still holds.

    rationale: string

    Why the pair reads this way: the motion the type rests on, what graded an authentic cadence, and what a null type failed to be. Always present, in the phrasing analyzeVoice uses for a note.

    alternatives: RejectedCandidate[]

    The cadences that were considered and rejected, empty unless DetectCadenceOptions.alternatives asked for them.

    These are the near misses — the readings a condition or two away from holding — rather than every type that did not fire, which for most pairs would be all of them.