Harmonizer

The harmonizer automatically generates a harmony line for the part's output melody notes. The harmonizer is available for all melodic mapping functions, including lead and bass, but has no effect on the comp mapping function. The harmonization is diatonic, meaning the specified generic interval is altered as needed to fit the current chord scale. Other harmonizer features include static harmony and constraining the harmony to a chord. It's possible to generate multiple harmony lines for a given melody, e.g. three-part or four-part harmony, by creating multiple parts; for more information, see omit melody and harmony groups below.

Generic interval

This is the nominal interval between the melody note and the harmony note, in scale steps. The actual interval varies as needed to ensure that the harmony note belongs to the current chord scale. For example if the generic interval is a third, the actual interval may be a major third or a minor third, depending on the chord scale and melody note. The generic interval can be conceptualized as how many scale tones are skipped getting from the melody to the harmony. The generic interval can be positive or negative; if it's negative, the harmony is below the melody, otherwise it's above it. A partial table of generic intervals is given below. Intervals larger than those shown in the table are permitted.

Generic intervalActual interval
−7octave below
−67th below
−56th below
−45th below
−34th below
−23rd below
−12nd below
0harmony disabled
12nd above
23rd above
34th above
45th above
56th above
67th above
7octave above

For a more specific example, suppose the generic interval is 2 (3rd above) and the current scale is C major. If the melody note is C, the harmony note is E, i.e. a major third, but if the melody note is D, the harmony note is F, i.e. a minor third.

Static harmony range

This setting lets you configure the harmonizer to generate static harmony under certain circumstances. Static harmony is when the melody note changes but the harmony note doesn't, i.e. a stationary, non-moving harmony line. Normally the harmony is a fixed generic interval from the melody, and consequently when the melody changes, the harmony changes too. However if a static harmony range is specified, the following rule is applied: if the interval between a new melody note and the previous harmony note is within the specified range, the previous harmony note is reused, resulting in static harmony. By default, the static harmony can cross the melody, but this is configurable.

The static harmony range is specified as a minimum interval and a maximum interval in semitones. The maximum must be greater than or equal to the minimum. If the maximum is zero, static harmony is disabled. The wider the static harmony range is, the more intervals are allowed, and the more often static harmony will occur. Note that if the minimum is zero, unisons may occur, i.e. the harmony and melody notes may be identical. In the extreme case where the minimum is zero and the maximum is twelve, the melody must deviate from the harmony by more than an octave before the harmony changes, resulting in a drone-like effect. The best results are obtained by carefully matching the static harmony range to the generic interval. For example if the generic interval is thirds, a range of 3 to 7 works well: as long as the melody stays within a minor third to a perfect fifth of the harmony, static harmony occurs.

Chromatic intervals
0unison
1minor second
2major second
3minor third
4major third
5perfect fourth
6tritone
7perfect fifth
8minor sixth
9major sixth
10minor seventh
11major seventh
12octave

Omit melody

This setting lets you output a harmony without outputting the melody on which the harmony is based. Normally both the melody and the harmony are output. If this setting is enabled, the melody note is omitted, so that only the harmony note is output. This may be useful if you're using multiple parts to generate multiple harmony lines, as in three-part or four-part harmony. For example, suppose you have two parts harmonizing in response to the same input, one generating thirds, and the other generating fifths. By default, each part outputs a melody note and a harmony note, resulting in two copies of the melody note. This might be acceptable if the parts are sent to different instruments, but otherwise it's likely to cause undesirable acoustic artifacts such as flanging. To avoid this, you should enable omit melody for one of the parts. If you're unsure, use the MIDI Output bar to check for duplicate notes.

Subpart

This setting causes the part to join a harmony group. Harmony groups are useful for preventing note collisions in multipart harmonization. A harmony group consists of two or more harmony parts which are adjacent in the parts list, and all but the first of which have the subpart setting checked. The group's first part (the one with subpart unchecked) is the leader, and the subparts are subordinate to it.

Crossing

This setting determines whether static harmony can cross the melody. If a harmony that's normally below the melody moves above the melody, or vice versa, i.e. if the harmony switches sides, this is called crossing. Allowing crossing makes static harmony more likely, and more complex. By default, crossing is allowed.

The static harmonizer computes the difference between each new melody note and the previous harmony note, and reuses the previous harmony note if the difference is within a specified range. If crossing is enabled, the difference is computed as an absolute value so its sign doesn't matter, whereas if crossing is disabled, the difference must have the same sign as the generic interval for static harmony to occur.

Chord

These settings let you constrain the harmonizer to the notes of a chord. The chord is specified via its diatonic degree in thirds, and its size in notes. Degree is relative to the current chord scale, which changes as the song progresses. The most common sizes are four (tetrachordal harmony) and three (triadic harmony). A size of zero disables the chord constraint feature. The following table shows the constraint resulting from each degree, for the two most common sizes.

DegreeConstraint
Size=4Size=3
11 3 5 71 3 5
33 5 7 23 5 7
55 7 2 45 7 2
77 2 4 67 2 4
22 4 6 12 4 6
44 6 1 34 6 1
66 1 3 56 1 3

For example, suppose the current chord is Cmaj7. If degree is 1 and size is 4, the harmony is constrained to 1,3,5,7 in the C major scale, or C,E,G,B. However if degree is 3, the harmony is constrained to 3,5,7,2 instead, or E,G,B,D. This is analagous to substituting the III chord for the I chord. Degree lets you control the harmony's tension or distance from the tonal center. If degree is kept constant, the harmony maintains a consistent tension relative to the chord progression. A degree of 1 is the most "in" (minimal tension).

The generic interval still determines the harmony's approximate distance from the melody. The harmony note is first calculated using the generic interval, and then quantized to the nearest chord tone.

The chord constraint can be combined with static harmony, in which case static harmony has priority: if the previous harmony note passes the static harmony range test, it's reused regardless of whether it's a chord tone. However if the previous harmony note is out of range, the new harmony note is constrained to the nearest chord tone.

Harmony groups

Harmony groups are a means of avoiding collisions in multipart harmony. Harmony groups are only useful if all the following statements are true:

A collision is when two harmony lines generate the exact same note. Collisions might be acceptable, for example if the harmony lines are output to different instruments. However if the harmony lines are output to the same instrument (i.e. the same MIDI port and channel), collisions will likely produce undesirable audio artifacts such as cancellation or flanging (see duplicate notes).

A harmony group consists of two or more harmony parts which are adjacent in the parts list, and all but the first of which have the subpart setting checked. The group's first part is the leader, and the group's remaining parts are subparts. Below is an example setup for four-voice harmony constrained to a tetrachord.

Part namePart functionGeneric intervalOmit melodySubpartChord size
Melody & Harmony1Lead−2NoNo4
Harmony2Lead−3YesYes4
Harmony3Lead−5YesYes4

The ChordEase distribution includes a patch for the above setup, in the patches subfolder, with the file name "harmony group (4-voice, constrained to chord).cep". Without the use of a harmony group, this patch would produce collisions frequently due to Harmony1 and Harmony2 being only one scale step apart. A similar patch for a harmony group with static harmony is also provided.

Use the following steps to create a typical harmony group:

  1. Create a lead part.
  2. Give the lead part a harmony, by setting its generic interval non-zero, e.g. −2 for thirds below. Also set a static harmony range and/or constrain the harmony to a chord, e.g. by setting Chord Size to 4.
  3. Create one or more copies of the lead part via copy/paste. Note that the original and its copies must all be contiguous in the parts list.
  4. Give each part a different non-zero generic interval. You may also want to give the parts different names to avoid confusion.
  5. For all parts except the first one, check Omit melody and Subpart.

Harmony group members can have different static harmony and chord constraint settings. They can also be output to different instruments, in which case they should all have controllers thru set. However each member of a harmony group must have a unique generic interval, otherwise collisions will occur. Note that only the group leader's input settings are meaningful, and consequently the input page is disabled for subparts.