A note with its theory labels and a short rationale.
The labels describe the note against the chord sounding at its onset;
they are not re-derived for the later chords a long note sustains across.
analyzeArrangement does re-check every crossed chord change, and reports
what it finds as conflicts, so a note labelled a chord tone here can still
appear in conflicts at a later beat.
The identity fields make an annotation mappable back to the caller's input:
originalIndex is the note's position in the array that was passed in, and
trackIndex is set by analyzeArrangement.
A note with its theory labels and a short rationale.
The labels describe the note against the chord sounding at its onset; they are not re-derived for the later chords a long note sustains across.
analyzeArrangementdoes re-check every crossed chord change, and reports what it finds as conflicts, so a note labelled a chord tone here can still appear inconflictsat a later beat.The identity fields make an annotation mappable back to the caller's input:
originalIndexis the note's position in the array that was passed in, andtrackIndexis set by analyzeArrangement.