function voiceLeadNotes(sourceNotes, targetNotes) {
const len = targetNotes.length;
const rotations = Tonal.Range.numeric([0, len - 1]).map(i => ({inversion: i, source: sourceNotes, target: rotate(targetNotes, i)}));
const distances = rotations.map(rot => ({...rot, distance: rot.target.map((r, i) => semitoneDistance(sourceNotes[i], rot.target[i]))}))
function compare(a, b) {
return sumAbs(a.distance) < sumAbs(b.distance)
}
return distances.reduce((smallest, curr) => compare(curr, smallest) ? curr : smallest, distances[0])
}