Scoring criteria - Dualraum/Chorsatz GitHub Wiki

After the full tree of possible progressions has been generated, all results are ranked according to the following criteria.

Within a chord

Prefer close formation

It is seen as positive if the voices stay close to one another. Thus, the difference of soprano and bass should be as small as possible. For each chord, the absolute distance between these voices is added to the score.

Default scaling factor: 0.4.

Disincentivize extreme initial notes

We want to prevent the soprano and bass from having to high starting notes. If the soprano is above a (customizable) threshhold of #c'' / Cs2, a malus is applied to the total score. Similar, if the bass is above a (customizable) threshhold of #a / As0, a malus is applied to the total score.

Default malus: 1.2, scaled by the length of the input series (-1, i.e. the number of pairs of consecutive chords) so this malus does not get dominated in longer progressions.

Within two consecutive chords

Prefer countermovements

It is seen as positive if voices move contrary to one another. Therefore, all individual movements, as a signed number, of the four voices between two chords are added up and then the absolute value of this sum is added to total score. Note that the absolute value is taken for each set of two consecutive notes, so counter movements in different parts of the progression can not cancel each other out.

Default scaling factor: 1.0.

Prefer little movement

It is seen as positive if voices move as little as possible in general. To facilitate this, all individual movements of the four voices between two chords have their absolute values summed up and this sum of absolute values is added to the total score.

Default scaling factor: 0.8.

Note the difference to 'Prefer countermovements': Here, we first take absolute values and then sum up, while previously we first sum up (giving countermovements the opportunity to cancel each other out) and then we took the absolute value after summing.

Customization

All of the scaling factors above can be freely customized in the respective tab of the Options panel. By setting a factor to 0.0, this criterium can be disabled, an the specified behaviour can even be incentivied by setting a negative value (though this is not suggested and may lead to Undefined Behaviour).

⚠️ **GitHub.com Fallback** ⚠️