The safety context minus the candidate pitch.
Lowest MIDI pitch to consider (inclusive).
Highest MIDI pitch to consider (inclusive).
Placeable pitches (non-dissonant), chord tones before others, each group descending.
import { enumerateSafePitches, makeChord, majorKey } from '@libraz/libcantus';
const pitches = enumerateSafePitches(
{ profile: 'pop', chord: makeChord(0, 'maj'), key: majorKey(0), otherVoices: [], strongBeat: true },
60,
72,
);
pitches; // placeable pitches in [60, 72], chord tones first, each group descending
Enumerate placeable pitches in a range, chord tones first, descending.