ChordEase Help

Contents

Getting Started
Introduction
License
Requirements
Installing
Uninstalling
Getting help
Concepts
Song
Chart view
Sections
Patch
Part
Mapping functions
Recording
MIDI targets
Patch bar
General
Metronome
Sync
MIDI
Parts bar
Parts list
Input
Output
Lead
Comp
Bass
Harmonizer
Auto
MIDI
Menus
File
New
Open
Save
Save As
Edit Text
Properties
Print Setup
Print Preview
Print
Exit
Edit
Editing
Undo/Redo
Clipboard
Cut
Copy
Paste
Insert
Delete
Select All
Rename
Section
Create
Delete
Properties
List
Transpose
Length
Options
Patch
New
Open
Patch
Save As
Transport
Play/Stop
Pause
Rewind
Repeat
Record
Next Section
Start Tag
Next Chord
Previous Chord
Go To
Auto Rewind
MIDI
Devices
Input
Output
Learn
Assignments
Note Mappings
Chase Events
Reset All Targets
Panic
View
Toolbar
Status bar
Patch bar
Parts bar
Chord bar
Piano
Output Notes
Threads
Record Player
Chord Dictionary
Help
Help topics
ChordEase on the Web
Check for updates
Demo
About
Options
Chart
Record
Other
Dialogs
Chord Dictionary
Chord Properties
Insert Chord
MIDI Assignments
MIDI Devices
MIDI Input
MIDI Note Mappings
MIDI Output
Output Notes
Path List
Piano
Record Player
Section List
Section Properties
Song Properties
Loose ends
Scales
Chord types
Chord dictionary
Chord substitution
Song file format
Durations
Duplicate notes
Latency
Relative intervals
MIDI target list
Shortcuts

Getting Started

Introduction

ChordEase makes it easier to play music with complicated chords. No matter what the chords are, you can play as if they were all in the key of C. You don't need to play sharps or flats, because ChordEase automatically adds them for you. Though ChordEase is intended for jazz, it could be useful for any type of music that modulates frequently. ChordEase alters your notes in real time in order to make them harmonically correct, while preserving their rhythm and dynamics. By delegating rapid music theory calculations to ChordEase, you gain freedom to concentrate on other aspects of musical performance, such as feel and aesthetics.

ChordEase is a translator that takes MIDI notes as input, and produces MIDI notes as output. The input notes are translated to the current chord scale, so that the output notes fit the chord progression of a song. ChordEase supports various mapping functions that determine how the translating is done. ChordEase can handle multiple translations at once, so multiple performers can play through a single instance of ChordEase, using any number of MIDI instruments. ChordEase parameters can be remotely controlled via MIDI for additional effects. ChordEase can also record its own output as MIDI data.

License

This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111 USA.

Requirements

Recommended:

Windows 7 or higher, 64-bit
4GB memory or more
Quad-core CPU, 3GHz or better, with Hyperthreading
Multi-timbral MIDI instrument*
MIDI adapter with at least 1 in and 1 out
ChordEase 64-bit

Minimum:

Windows XP SP2
2GB memory
ChordEase 32-bit

*Note that the instrument should have a MIDI in and a MIDI out, and be capable of disabling local control.

Installing

ChordEase comes in two flavors (Installer and Portable), each of which is available in both 64-bit and 32-bit versions. If you have a 64-bit CPU, it's strongly recommended to use the 64-bit version of ChordEase. Most users want an installer, because it's easier. For example, installing adds ChordEase to the Windows start menu, and allows ChordEase to register its file types, so that they have appropriate icons and can be opened via double-clicking in Explorer.

The portable flavor is useful if you want ChordEase to run from a USB flash drive, and store its settings on the flash drive instead of in the local machine's registry. The portable application has NO INSTALLER, and doesn't use the registry at all; settings are stored in an INI file in the same folder as the app. The instructions below apply to the installed flavor only. To use the portable app, simply unzip the distribution file to a folder and double-click ChordEase.exe.

Installing for the first time:

ChordEase is distributed as a zip file containing an installer. Unzip the distribution file, using WinZip or an equivalent program, and then double-click on ChordEase.msi to launch the installer. The installer is about as simple as an installer can be: for the default setup, just keep hitting "Next." Note that on the "Select Installation Folder" page, you have the option to install for all users, but the default is to only install for the current user.

Upgrading a previous installation:

  1. Unzip the distribution file to a folder, if you haven't already.
  2. In that folder, double-click Upgrade.bat to launch the installer.
  3. In the installer, select the "Repair" option.

Note that double-clicking ChordEase.msi won't work: you will get the message "Another version of this product is already installed". If you're connected to the Internet, you can upgrade to the latest version via Help/Check for Updates.

Uninstalling

To uninstall ChordEase, use Add/Remove Programs in the Control Panel, or double-click on ChordEase.msi and select the "Remove" option.

Getting help

ChordEase has context-sensitive help, which means that pressing F1 shows different topics depending on the situation. Context-sensitive help is available for the following types of user-interface objects:

Object typeTo get help:
Menus and context menusHighlight a menu item and press F1.
Toolbar buttonsHover over a button and press F1.
Other toolbar controlsLeft-click the control and press F1.
Modal dialogsPress F1 while the dialog is displayed. For some dialogs, the topic shown depends on which control has focus.

If none of the above cases apply, or if help is accessed via Help Topics, a default topic is shown.

Concepts

Song

A song consists of a prearranged chord progression (i.e. a series of chords), along with a time signature and a key signature. A song may also include optional properties such as a tempo or a transposition, and the chord progression may be separated into repeating sections.

Normally a song is played at a specified tempo, and the performer is expected to stay in sync with ChordEase. A built-in metronome is provided to facilitate this. It's also possible to use ChordEase in free-time mode, in which case the performer manually steps through the song's chords, usually via a continuous controller assigned to the Next Chord command. Note that harmonic anticipation is not supported in free-time mode.

Songs can be entered and edited using the chart view, or via text editor. In the chart view, chords can be inserted, deleted, cut, copied, pasted, and renamed via standard editing commands. Chords can also be edited via context menu, and reordered via dragging and dropping. The chart view is easier for beginners, but once the song syntax is learned, editing the song as text may be preferable. A song is stored as a plain text file, usually having the .ces file extension.

The song is the primary document type in ChordEase. The File menu operates on songs, and contains commands to create a new song, open an existing song, save the current song, etc. The secondary document type is the patch, and patches have their own menu (the Patch menu) that behaves like a second file menu. Note that ChordEase also has two undo histories, one for the current song and one for the current patch.

Song position

The current position within the song is indicated by the chart view's cursor. The song position can be changed at any time by left-clicking a chord within the chart view. If the chart view has focus, the song position can also be changed via the arrow keys, Page Up, Page Down, Home, and End. To skip to the next or previous chord, use the Next Chord and Previous Chord commands. To jump to a specific numeric song position, use the Go To command. The song position is updated automatically while the song is playing. The status bar shows the song position numerically in measures, beats, and ticks. Note that measures and beats are one-origin, i.e. the beginning of the song is 1:1:0.

Impro-Visor

In addition to its native song file format, ChordEase also supports the file format of a free music notation program called Impro-Visor (Improvisation Advisor). Impro-Visor files are known as lead sheet (.ls) files. A lead sheet is opened in the same manner as a ChordEase song file, e.g. via the File/Open command, drag/drop from Windows Explorer, or the command line. ChordEase reads lead sheets, but doesn't write them, so when you open a lead sheet, it's automatically converted to ChordEase song file format. Not all the data in a lead sheet is useful to ChordEase. ChordEase imports the chord changes, along with a subset of the metadata, including the time signature, key signature, tempo, title, and composer. The melody track is ignored. The import has been tested against all of the files in the Impro-Visor lead sheet download, and opens about 97% of them. The most common failures are listed below.

The Impro-Visor lead sheet download is available from the Impro-Visor web site. For the details of lead sheet format, see Impro-Visor Leadsheet Notation.

Chart view

The chart view displays the chord progression of the current song, and indicates the current song position. The chart view also lets you edit the song, using standard editing commands, e.g. copy, cut, paste, etc. To insert a new chord, use the insert command. To modify an existing chord, double-click it, or select it and press the Enter key. You can also rename a chord. For additional methods, see the table below. Chords can be reordered by dragging and dropping them.

Multiple selection is supported: you can copy, cut, paste, delete, rename, or drag a range of chords. To select a single chord, left-click it. To select a range of chords, left-click the first chord in the range, and then while holding down the Shift key, left-click the last chord in the range. The arrow keys move the current position, as do the Page Up, Page Down, Home, and End keys. These keys can also be used to select a range of chords, by combining them with the Shift key.

The chart view has a context menu, which includes the editing commands, as well as the commands for creating and modifying sections. If the song is transposed, the chart view displays the transposed chords. Advanced users may prefer to edit songs as text.

GoalMethod
Change a chord's rootRight-click the chord to show the context menu, select Root, and then select the desired root from the list.
Change a chord's typeRight-click the chord to show the context menu, select Type, and then select the desired chord type from the list. If the number of available chord types makes the context menu inconveniently long, you can alternatively use the Chord bar to change the chord type.
Change a chord's bass noteRight-click the chord to show the context menu, select Bass, and then select the desired bass note from the list.
Change a chord's durationRight-click the chord to show the context menu, select Duration, and then select the desired duration from the list. The listed durations are in measures or fractions of a measure. To specify a duration other than those listed, select "Other" to display the Duration dialog, enter the desired duration in beats, and press OK.
Edit a chord as textSelect the chord, and then select Edit/Rename in the main menus or Rename in the context menu, or press F2. A popup edit control is displayed. Make your changes, and then save them by pressing Enter or clicking anywhere outside the edit control. To cancel, press Esc. This method lets you change the chord's root, type, and bass note, but not its duration.
Edit a chord's propertiesDouble-click the chord, or select the chord and press the Enter key. You can also right-click the chord to show the context menu, and select Properties. The chord properties dialog is displayed. Change the properties as desired, and then press OK to save your changes.

Sections

A section is a contiguous subset of a song that repeats, either a specific number of times or indefinitely. Sections are useful for introductions, endings, interludes, vamps, breaks, etc. A section with a repeat count greater than zero loops the specified number of times, unless it's exited prematurely via the Next Section command. A section with a repeat count of zero loops forever, or until it's exited via the Next Section command. In both the chart view and song file format, a section is indicated by enclosing one or more chords in square brackets. A song can contain any number of sections, but sections can't overlap, and can't be nested.

The section-related commands are located on the Section submenu of the Edit menu. The Section submenu is also available from the chart view's context menu. To create a new section containing the selected chords, use Section Create. To delete an existing section, use Section Delete. To edit a section's properties, including its repeat count, use Section Properties. To view a list of all the current sections, use Section List. Advanced users may prefer to create or modify sections by editing the song as text. To spontaneously repeat one or more measures, use tagging instead of sections.

Patch

ChordEase uses two types of documents: songs and patches. A song contains data that's unique to each song, e.g. the song's chord progression, whereas a patch contains settings that determine how songs are handled. All of the settings found in the patch bar and the parts bar are stored in the patch. Patches allow you to save useful configurations of these settings and recall them easily.

ChordEase effectively has two file menus, one for songs and one for patches. The standard File menu operates on songs, whereas the Patch menu operates on patches. The Patch menu contains commands to create a new patch, open an existing patch, and save the current patch. Note that ChordEase also has two undo histories, one for the current song and one for the current patch.

If you change any patch settings, you will be prompted to save your changes when you exit ChordEase. Even if you don't save your changes, your most recent patch will be restored the next time you run ChordEase. The most recent patch is stored in a special file called ChordEasePatch.ini, located in the application data folder. ChordEase can initially open either a song or a patch, specified via the command line. The installed version of ChordEase automatically associates itself with both the song and patch file extensions, but for the portable version, these associations must be created manually.

A patch is a plain text file that uses standard Windows INI file format. Patches normally have a file extension of .cep (ChordEase Patch). The patch excludes certain user preferences such as options and window positions: these are stored in the registry for the installed version, or in ChordEase.ini for the portable version.

Part

A part specifies how input notes should be mapped (i.e. translated) to output notes. A part includes many settings that can affect the mapping, e.g. input and output parameters, which mapping function to use, and mapping function parameters. A patch can contain any number of parts. Each part has its own independent state and can be configured differently from other parts. The existing parts are shown in the parts list, which supports the usual editing commands. The selected part's settings are edited via the tabbed pages of the parts bar. Settings common to all parts are edited via the tabbed pages of the patch bar.

Mapping functions

Each part has a mapping function, which determines how that part maps input to output, i.e. translates input notes to output notes. To change a part's mapping function, find the corresponding row in the parts list, left-click within the Function column to display a popup drop list, and then select the desired function. The supported functions are briefly summarized in the table below. For more information about a function, click on the function's name.

FunctionDescription
BypassNo operation: the output is identical to the input regardless of the current chord.
LeadInput notes are transposed in position by adding accidentals as needed, so that the output notes remain as close as possible to the input notes. This function is useful for soloing because it minimizes differences between chords and preserves the input's shape.
CompA single input note triggers a chord, with user control over voicings, variations, and arpeggiation. The input note's pitch determines the pitch window within which the output chord is voiced.
BassInput notes are transposed via shifting, so that C is always the chord root, E is always the third, G is always the fifth, etc. This function also supports approach, which shifts the current scale so that C is the root of the chord being approached (or as close as possible).
NumbersInput notes are mapped to a tonal palette consisting of four scale tones, chosen to facilitate melodious intervals. Seven palettes are available, and they gradate smoothly from mostly chord tones to mostly tensions, allowing dissonance to be managed consistently.

Depending on which function is used, the relationship between input and output notes can be one to one, or one to many. The Comp function is one to many, i.e. one input note generates multiple output notes, whereas the melodic functions (Lead and Bass) are one to one, unless the harmonizer is active.

Recording

ChordEase allows performances to be recorded as MIDI data. To record a performance, select the Record command, via Transport/Record or Ctrl+R. A recording can be started at any time: a song needn't be open, and if it is open, it needn't be playing, thus introductions, interludes, and endings can all be recorded. By default, you're prompted for an output filename, but if you prefer "one touch" recording, uncheck the prompt for filename option. It's also possible to always record, and thereby avoid data loss due to failure to press record. To play back the completed recording, use the Record Player dialog, or play the MIDI file in a suitable application; also see record output files below. Recording a performance as MIDI is often more convenient than recording the audio, for the following reasons:

Record output files

Recording creates two output files: a standard MIDI file, and a .cemr file. The .cemr file is unique to ChordEase, and has some important advantages over the MIDI file, detailed below. It's recommended that you keep both files, even though they contain similar data. Note that a .cemr can be converted to a MIDI file, whereas the reverse is not true.

MIDI targets

Many ChordEase parameters can be changed remotely via a MIDI device, e.g. a MIDI control surface, and certain commands can also be triggered remotely. The parameters and commands that can be remotely controlled are called MIDI targets. For information about each target, see the MIDI target list. In order to remotely control a MIDI target, you must first assign a MIDI message to it. This process of assigning messages to targets is sometimes known as MIDI mapping.

MIDI assignments can be edited manually, or learned. Learning is usually easier. The patch and the part have different MIDI targets, and they're edited in different places. To edit patch MIDI assignments, use the patch MIDI page. To edit a part's MIDI assignments, use the part MIDI page. Each part has its own MIDI targets, so be sure the correct part is selected in the parts list. To see a summary of the current MIDI mapping, use the MIDI Assignments dialog. It lists all MIDI targets to which controllers are currently assigned, for the patch and all parts.

When a parameter is changed remotely, the corresponding control in the user interface is updated. However this update is only apparent if that control's parent page is visible. ChordEase can automatically show the appropriate page; see Chase Events.

An assignment can be deleted by right-clicking the corresponding target's row in the appropriate MIDI page, and choosing Reset in the context menu. Assignments can also be deleted via the MIDI Assignments dialog, by selecting one or more rows and choosing Delete in the context menu. To delete all MIDI assignments at once, use the Reset All Targets command.

Shared assignments

A MIDI message can be assigned to multiple targets at once. This is known as a shared assignment, and while it's occasionally useful, it can also cause confusion. If you assign a message to a target, and then assign the same message to a different target, it now controls both targets. If that's undesirable, you must manually delete the unwanted assignment, using one of the methods described above. Shared assignments are indicated in the MIDI Assignments dialog, via the "Shared" column.

If you attempt to create a shared assignment, whether manually or via learn, a warning dialog is displayed. The dialog asks if you want to remove the previous assignments, and lists the target(s) to which the message is already assigned. The possible responses are as follows:

YesThe message's previous assignments are removed, and the message is then reassigned to the new target. This is the default behavior.
NoThe message is assigned to the new target, without removing the message's previous assignments. This results in a shared assignment, i.e. the message controls multiple targets.
CancelThe current assignment is canceled, leaving the previous assignments unchanged.

Patch bar

General

This patch page contains general settings that have systemwide effects.

Tempo

This is the speed at which the current song is played, in beats per minute (BPM). Fractional tempos are allowed. This setting also affects timing parameters that accept note durations, such as harmonic anticipation and arpeggio period. This setting is the nominal tempo; the actual tempo is influenced by the tempo multiple (see below) and therefore may differ from this setting. The actual tempo is displayed in the status bar. A song may optionally specify a tempo (see song properties), in which case the song's tempo overrides the patch tempo. Tempo can also be specified via tapping.

Tempo Multiple

This is a scaling factor which is applied to the tempo setting (see above). The actual tempo is the product of the tempo and the tempo multiple. The actual tempo is displayed in the status bar. Tempo multiple is especially useful if your songs all specify different tempos, and you want to play them all faster or slower by the same percentage. Instead of editing each song's tempo, you can simply adjust the tempo multiple. Because it's independent of song tempos and scales them proportionally, tempo multiple provides a convenient means of adjusting tempo during a performance, e.g. remotely via a MIDI controller.

Key

This is the transposed key signature of the current song. It shows the sum of the song's key signature and the transpose setting (see below). Transposition can be accomplished either by selecting a different key, or by adjusting the transpose setting. The key and transpose settings are automatically synchronized with each other and have the same effect, so use whichever method is more convenient. If transpose is zero (no transposition), the song's actual key signature is shown. The transposed key signature is also displayed in the status bar.

Transpose

This is the amount to transpose the current song by, in semitones. The amount may be positive or negative. If it's zero, the song is played in its original key. This setting is automatically synchronized with the key setting (see above). Transposition can be accomplished by either method. The transpose setting is useful for transposing by an interval, whereas the key setting is useful when the desired key is known. Note that it's possible to transpose during a performance, e.g. remotely via a MIDI controller. A song may optionally specify a transposition (see song properties), in which case the song's transposition overrides the patch transposition. To permanently transpose one or more chords within the current song, use the Edit/Transpose command instead. For a list of transposition amounts and their resulting intervals, see relative intervals.

PPQ

This is the time resolution, in pulses per quarter note. It affects all time-related functions. Higher PPQ values increase the accuracy of note durations and timing parameters such as arpeggio period, but at the cost of decreasing the granularity of the tempo setting. Large PPQ values will reduce the number of available tempos, particularly faster tempos, and may cause the error message "Can't create timer." Though a wide range of PPQ values are permitted, values greater than 48 are not recommended. The default PPQ is 24. Note that if Sync to MIDI clock is enabled, PPQ is restricted to 24 and can't be edited.

Lead-in

This is the length of the lead-in, or count-off, in measures. If it's non-zero, the metronome plays for the specified period before the song actually starts. This allows the performer(s) to be in sync with the tempo by the time the song begins.

Tag Length

This is the length of a tag, in measures. Tagging is the spontaneous repetition of one or more measures. Note that this parameter only affects subsequent tags; it has no effect on a tag that's already in progress. For more information, see the Start Tag command.

Tag Repeat

This is the number of times to repeat a tag, or zero for indefinite repeat. Tagging is the spontaneous repetition of one or more measures. Note that this parameter only affects subsequent tags; it has no effect on a tag that's already in progress. For more information, see the Start Tag command.

Tap Tempo

Tap tempo lets you specify the tempo by tapping instead of numerically. To tap a tempo, repeatedly press the Tap Tempo button on the beat of the desired tempo. Alternatively you can use the Ctrl+M shortcut, or a MIDI controller assigned to the Tap Tempo MIDI target. At least two taps are necessary to establish a tempo. Additional taps may improve the accuracy, because taps are averaged. To clear the running average and start over, wait at least two seconds. Tempos slower than 30 BPM must be entered numerically. To adjust the tempo while playing, tap once exactly on the beat, and then tap slightly ahead of the following beat to speed up, or slightly behind it to slow down. Note that if a tempo multiple is in effect (i.e. tempo multiple has any value other than one), tapping still works, but the tempo shown in the patch bar isn't the actual tempo; the status bar shows the actual tempo, taking tempo multiple into account.

Metronome

ChordEase expects the performer(s) to stay in sync with it, and provides a metronome to facilitate this. For practicing, it may be acceptable to route the metronome and the musical output to the same MIDI instrument and output speakers. For performances however, it's probably undesirable for the audience to hear the metronome. In this case it's recommended to route the metronome to a separate MIDI instrument, such as a drum machine, so that the performer(s) can listen to it privately via headphones. A headphone distribution amplifier may be useful for ensembles.

The metronome can be configured to start before the song actually begins, via the lead-in setting. Some performers may be able to stay in sync with ChordEase without relying on the metronome. In an ensemble, it may be possible for only one member (e.g. the drummer) to listen to the metronome. It's also possible to play in free time, advancing the chord manually via the next chord command, in which case the metronome is irrelevant.

Enable

This check box enables or disables the metronome.

Port

This is the device index of the MIDI output device to be used as a metronome. For a list of the available output devices, see the right-hand pane of the devices bar. Note that unlike MIDI channels, ports are zero-origin.

Channel

This is the MIDI channel number to which metronome messages will be sent. MIDI channels range from 1 to 16. The user must ensure that the desired output device is listening on the specified channel. If necessary, the output messages can be examined using the MIDI output bar. In typical MIDI setups channel 10 is reserved for drums.

Patch

This is the optional patch number to send to the metronome instrument. If this setting is −1 (shown as N/A), no patch change message is sent. If this setting is greater than or equal to zero, the corresponding patch is set during startup, and whenever a song is loaded.

Volume

This is the optional volume level to send to the metronome instrument. If this setting is −1 (shown as N/A), no volume message is sent. If this setting is greater than or equal to zero, the corresponding volume is set during startup, and whenever a song is loaded.

Normal Note

This is the MIDI note sent for normal (non-accented) metronome beats. In typical MIDI setups, Eb3 on channel 10 gives good results.

Normal Velocity

This is the velocity of normal (non-accented) metronome beats.

Accent Note

This is the MIDI note sent for accented metronome beats. The first beat of each measure is accented. This setting is only applicable if use same note is unchecked.

Accent Velocity

This is the velocity of accented metronome beats. It should typically be greater than the normal velocity, particularly if normal and accented metronome beats share the same note.

Use same note

If this setting is enabled, the same MIDI note is used for both normal and accented metronome beats, in which case they must have different velocities to be distinguishable.

Device name

This is the name of the MIDI output device to which metronome notes will be sent. To change the output device, edit the metronome port.

Sync

This patch page contains settings related to synchronizing ChordEase with external devices. Timing synchronization is implemented via MIDI clock messages, combined with the Start, Stop, Continue, and Song Position MIDI messages. ChordEase can be a slave or a master.

To make ChordEase a slave:Enable Sync to MIDI clock, and set the From port to the input device from which ChordEase should receive synchronization messages.
To make ChordEase a master:Enable Output MIDI clock, and set the To port to the output device to which ChordEase should send synchronization messages.

ChordEase can be both slave and master simultaneously, i.e. it can synchronize to clocks from a master device while also sending clocks to a slave device. However since daisy-chaining increases latency, it's preferable to route the master clock to all slaves in parallel, via a hardware MIDI splitter.

Sync to MIDI clock

If this setting is enabled, ChordEase expects to receive MIDI clocks and sequencer control messages from the input device specified by the From port setting. This is useful for synchronizing ChordEase to a device, so that the device is the master, and ChordEase is the slave. During playback, be careful to avoid touching any ChordEase controls that affect the song position or transport state, otherwise synchronization may be lost. Commands to avoid include Play/Stop, Pause, Rewind, Next Chord, Previous Chord, Go To, and the chart view's positioning shortcuts.

Enabling this setting disables the internal timer that normally drives playback. Consequently if MIDI clocks aren't received from the specified device, ChordEase will be incapable of playback, and other timer-dependent features such as arpeggiation won't work either. Note that some devices only send MIDI clocks while they're playing. If ChordEase is slaved to such a device, arpeggiation will only work during playback, so it's preferable to use a device that sends MIDI clocks all the time.

In addition to sending MIDI clocks, the device must also send the following sequencer control messages: Start, Stop, Continue, and Song Position. The device may have a separate setting to enable sending sequencer control messages. If necessary, use the MIDI input bar to verify that these messages are being received.

ChordEase must use a PPQ of 24 in order to synchronize to external MIDI clocks. This is because MIDI clocks have a fixed PPQ of 24, and ChordEase isn't capable of interpolating between them. If sync is enabled and the PPQ isn't already 24, ChordEase automatically changes it to 24 after displaying a warning. This may affect the precision of various durations.

While ChordEase is slaved to an external device, tempo is entirely controlled by the external device. To indicate this, the tempo and tempo multiple controls are disabled, and the status bar displays "SYNC" instead of the current tempo.

From port

This is the device index of the MIDI input device from which ChordEase expects to receive synchronization messages if Sync to MIDI clock is enabled. Note that port numbers are zero-origin, unlike MIDI channels. For a list of the available input devices, see the left-hand pane of the devices bar.

Input device name

This is the name of the MIDI input device from which ChordEase expects to receive synchronization messages if Sync to MIDI clock is enabled. To change the input device, edit the From port setting, as explained above.

Output MIDI clock

Enabling this setting causes ChordEase to send MIDI clocks and sequencer control messages to the output device specified by the To port setting. This is useful for synchronizing a device to ChordEase, so that ChordEase is the master, and the device is the slave. ChordEase sends the song position to the slave device, and also remotely executes the play/stop and pause commands. During playback, be careful to avoid touching any controls on the slave device that affect the song position or transport state, otherwise synchronization may be lost.

Some devices automatically detect and synchronize to an external clock, but it's often necessary to explicitly configure the device to recognize an external clock. In addition to receiving MIDI clocks, the device must also support receiving the following sequencer control messages: Start, Stop, Continue, and Song Position. The device may have a separate setting to enable receiving sequencer control messages. Not all devices are capable of synchronizing to an external clock. When in doubt, check your device's MIDI implementation chart.

Note that ChordEase only supports sending MIDI clocks to a single device. To synchronize multiple devices to ChordEase, use a hardware MIDI splitter to distribute the MIDI clock from ChordEase to the devices. Avoid daisy-chaining if possible, as this may cause timing discrepancies due to latency.

To port

This is the device index of the MIDI output device to which ChordEase sends synchronization messages if Output MIDI clock is enabled. Note that port numbers are zero-origin, unlike MIDI channels. For a list of the available output devices, see the right-hand pane of the devices bar.

Output device name

This is the name of the MIDI output device to which ChordEase sends synchronization messages if Output MIDI clock is enabled. To change the output device, edit the To port setting, as explained above.

MIDI

This page lists the patch MIDI targets. Each row corresponds to a patch parameter or command that can be remotely controlled via MIDI. In order to remotely control a MIDI target, you must first assign a MIDI message to it. MIDI assignments can be created by editing the items on this page, though it's usually easier to have ChordEase learn the assignments. This page also lets you change or delete existing MIDI assignments. Part MIDI targets have a similar page. For information about each target, see the MIDI target list.

To create a MIDI assignment manually, you need to know what message your MIDI device is sending, and what port and channel it's sending it on. For example, suppose you want to assign a keyboard's modulation wheel to the tempo parameter, and you happen to know that the wheel sends a continuous controller message for controller number one, and that the message will be received on port zero and channel two. In this case you could make the assignment as follows:

  1. Find the row named "Tempo".
  2. Left-click the port and change it to zero.
  3. Left-click the channel and change it to two.
  4. Left-click the event type and change it to "Control".
  5. Left-click the controller number and change it to one.

To delete an existing assignment, right-click within the corresponding row to display its context menu, and select Reset. This resets all of the target's properties to their default state. To disable a target without resetting all its properties, just set its event type to "None".

MIDI target columns
TargetThe name of the MIDI target this row corresponds to.
PortThe input port on which the assigned MIDI message is expected to arrive. This is equivalent to a MIDI input device index. See the MIDI Devices bar for a list of MIDI input devices. Note that unlike channels, ports are zero-origin.
ChanThe channel on which the assigned MIDI message is expected to arrive. Note that unlike ports, channels are one-origin.
EventThe event type of the assigned MIDI message. The supported event types are: None, Control (continuous controller), Wheel (pitch bend), Program Change, and Channel Aftertouch.
ControlThe controller number of the assigned MIDI message. This parameter only applies to the continuous controller event type.
StartThe start of the normalized controller range; see below.
EndThe end of the normalized controller range; see below.
ValueThe current value of the assigned MIDI message. The value is read-only, and is updated dynamically. Note that this is the raw MIDI value, ranging from 0 to 127, not the normalized value.

Normalized controller range

Each target has a normalized controller range, defined by the values in the Start and End columns. This range determines how the assigned MIDI message is mapped to the target parameter. The default normalized range is from 0 to 1, which maps the raw MIDI value (ranging from 0 to 127) to the target parameter's entire range (which varies depending on the parameter). In some cases you may want your control to cover only a subset of the target parameter's range. You can accomplish this by adjusting the normalized range.

For example, suppose you've assigned a MIDI message to the Transpose parameter, which ranges from 0 to 11. By default, your MIDI control covers this entire range, i.e. 0 maps to 0, and 127 maps to 11. Let's say you want your MIDI control to cover only the middle of this range. In the Transpose row, set Start to 0.25, and End to 0.75. Now 0 maps to 3, and 127 maps to 8. Or suppose you want your control to transpose up or down a tritone, with zero in the middle. Set Start to −0.5, and End to 0.5. Now 0 maps to −6, and 127 maps to 6.

The normalized range can be reversed, i.e. Start can be greater than End, in which case the target parameter moves backwards. Since a MIDI message can be assigned to multiple targets, it's possible to set up a crossfader. For example, suppose you assign a controller to the output volume of two different parts, and then for one of the parts, reverse the normalized range, so that Start is 1 and End is 0. Moving the assigned control now changes both output volumes, but in opposite directions. This could be useful if you're layering two parts, and want a single control that adjusts the mix between them.

Parts bar

Parts list

This control contains a list of the existing parts. The parts list selection determines which part's settings are shown and editable. The parts list also lets you create new parts, remove existing parts, enable, disable and rename parts, and select mapping functions. When the parts list has focus, the standard editing commands are supported, e.g. copy, cut, paste, etc. The parts can also be reordered by dragging and dropping their list control items.

The settings shown in the parts bar's tabbed pages correspond to whichever part is currently selected in the parts list. The parts list supports multiple selection, i.e. multiple parts can be selected at once. Note however that since the tabbed pages can only show one part at a time, if multiple parts are selected, the part pages correspond to the focused part, indicated by a dotted rectangle around the list item.

Before editing part settings, make sure the intended part is selected in the parts list. To select a single part, left-click its name in the Part column. To select a contiguous range of parts, left-click the first part in the range, and then while holding down the Shift key, left-click the last part in the range. To select multiple non-contiguous parts, left-click each part while holding down the Ctrl key. To unselect all parts, left-click the list control's background.

ColumnDescription
CheckboxThis checkbox enables or disables the part. If it's checked, the part is enabled, otherwise it's disabled. A disabled part doesn't generate any MIDI output.
PartThis is the name of the part. To change the name, assuming the part is already selected, left-click the name to display a popup edit control. You can also begin editing the name via Edit/Rename on the main menu, Rename on the list's context menu, or the F2 shortcut. After making your changes, save them by pressing Enter or clicking anywhere outside the edit control. To cancel, press Esc. If the part isn't selected, left-click its name once to select the part, wait a second, and then left-click its name again to display the popup edit control.
FunctionThis is the part's mapping function. To change it, left-click it to display a popup drop list, and select the desired function from the list.

Certain part settings can be displayed and edited for multiple parts at once, via the Note Mapping Properties dialog. To display this dialog, select the desired parts and then choose Properties from the list's context menu, or press Alt+Enter.

Input

This page contains input-related settings for the current part, including which MIDI port and channel the part should receive its input from.

Port

This is the device index of the MIDI input device from which the part expects to receive its input. For a list of the available input devices, see the left-hand pane of the devices bar. Note that unlike MIDI channels, ports are zero-origin. The input port and channel can also be learned, as follows:

  1. Enable learn mode, via MIDI/Learn in the menus or the toolbar, or the Ctrl+L shortcut.
  2. Select the Input page in the parts bar, and select the intended part in the parts list.
  3. Left-click in either the port or channel edit box. A green outline appears around the edit box, indicating that it's ready to learn. Note that the port and channel are learned simultaneously, regardless of which one you select.
  4. Play a note on your MIDI device. The input port and channel should snap to appropriate values.
  5. Disable learn mode, the same way you enabled it. The green outline disappears.

Channel

This is the MIDI channel number on which the part listens for its input. MIDI channels range from 1 to 16. To discover which channel the input device is sending on, the input messages can be examined using the MIDI input bar. The input port and channel can also be learned, in which case it's not necessary to know their values; for instructions, see input port above.

Zone Low

Each part responds to a range of input notes, also known as the part's zone. This setting specifies the zone's lowest note. The highest note is specified via Zone High. By default the zone is C−1 to G9, which covers the entire 128-note range of MIDI.

Zones let you play multiple parts from the same instrument, using different ranges of notes. The usual case is self-accompaniment on a keyboard instrument, using two non-overlapping zones, one for each hand. This is known as a split. Normally the right-hand zone is used for soloing, while the left-hand zone is used for playing chords. To set up a typical split, create two parts, both receiving on the same input port and channel. Assuming a split point of C4, for the right-hand part, select the Lead function and a zone of C4 to G9. For the left-hand part, select the Comp function and a zone of C−1 to B3.

It's also possible to play multiple parts from the same instrument, using the same range of notes. This is called layering. In this case the parts may have partially or completely overlapping zones.

Zone High

This setting is the upper limit of the range of notes the part responds to; see Zone Low.

Transpose

This setting is the amount of transposition to apply to input notes, in semitones. The transposition is applied before the notes are passed to the part's mapping function. For normal operation, it should be zero. To transpose by a number of octaves, it should be a multiple of 12, e.g. 12 for up an octave, 24 for up two octaves, −12 for down an octave, etc.

This setting also lets you play in a diatonic scale other than C. This may be useful for MIDI instruments on which playing in C would be inconvenient. To use an input scale other than C, specify a non-octave input transposition, i.e. an input transposition that isn't a multiple of 12. For example, if you prefer to play in the key of Bb, set input transposition to 2 (or −10). For other examples, see the table below.

Note that the terms "white keys" and "black keys" are used as shorthand for diatonic and non-diatonic notes respectively, but this no longer holds true if a non-octave input transposition is applied. For example, if input transposition is 2, the notes of the Bb major scale are the "white keys" in the sense that they map to the notes of the current chord scale. The remaining input notes are "black keys" and their behavior is determined by the non-diatonic notes setting.

Input transposition is unrelated to the global transpose function, which affects output notes, not input notes.

KeyUpDown
C12−12
Db11−1
D10−2
Eb9−3
E8−4
F7−5
Gb6−6
G5−7
Ab4−8
A3−9
Bb2−10
B1−11

Velocity Offset

This setting is an offset which is added to each input note's velocity. The offset ranges from −127 to 127. For normal operation, it should be zero. Specify a positive offset to increase velocity, or a negative offset to decrease velocity. In either direction, compression may occur, i.e. dynamic range may be reduced. Note that extreme negative values may effectively mute the part. Altering note velocities may cause timbral changes in addition to or instead of volume changes, depending on the output MIDI instrument. To change a part's volume without affecting its timbre, use output volume instead.

Non-diatonic notes

This setting determines how non-diatonic input notes (also known as black keys) are handled. The terms "white keys" and "black keys" are used loosely here to mean diatonic and non-diatonic notes respectively, but bear in mind that ChordEase can accept diatonic scales other than C as input; see input transpose. By default, non-diatonic input notes are allowed, and may generate non-scale output notes. To see the effect of these modes, show the piano dialog and set its key label style to "Output Notes" (via its context menu). The effect can also be seen on the output notes bar.

Allow Black keys are allowed, and may create non-scale tones, i.e. "out" notes. The uncertainty results from the fact that remapping can reduce the interval between two adjacent white keys from a whole step to a half step. In such cases the black key between them generates a duplicate note. This means that a given chromaticism may or may not generate unique notes, depending on the chord. Playing a complete chromatic scale is only consistently possible when the mapping function is "Bypass".
Quantize All black keys are quantized to the nearest scale tone and therefore generate duplicate notes. This may be useful on inherently sloppy instruments, e.g. MIDI guitars.
Disable The black keys do nothing.
Skip The diatonic scale is compressed onto the chromatic scale, so that all keys are active and output unique scale tones. This is useful when inputting notes via a continuous controller, theremin, or similar device, because it ensures that the scale tones are linearly mapped to controller coordinates, i.e. any two adjacent scale tones are always separated by the same increment of physical motion. Interval distances are greatly reduced, e.g. playing a fifth yields an octave. The mapping is aligned so that middle C (C4) remains constant, but all other notes are shifted.
Thirds Input notes are mapped to output notes in such a way that successive white keys form the cycle of thirds. This makes it much easier to play arpeggios. Adjacent white keys output scale tones separated by two scale degrees instead of one. Each black key outputs the scale tone that its white neighbors step over. Non-scale notes are inaccessible. Interval distances are greatly reduced: each input octave spans two output octaves.

Device name

This is the name of the MIDI input device associated with the current part. To change the input device, edit the input port. For a list of input devices, see the devices bar.

Output

This page contains output-related settings for the current part, including which MIDI port and channel the part should send its output to.

Port

This is the device index of the MIDI output device to which the part's output will be sent. For a list of the available output devices, see the right-hand pane of the devices bar. Note that unlike MIDI channels, ports are zero-origin.

Channel

This is the MIDI channel number on which the part's output will be sent. MIDI channels range from 1 to 16. The user must ensure that the desired output device is listening on the specified channel. If necessary, the output messages can be examined using the MIDI output bar.

Patch

This is the optional patch number to send to the output instrument. If this setting is −1 (shown as N/A), no Program Change message is sent. If this setting is greater than or equal to zero, the corresponding patch is set during startup, and whenever a song is loaded. To access more than 128 patches, Bank Select must also be specified.

Volume

This is the optional volume level to send to the output instrument. If this setting is −1 (shown as N/A), no volume message is sent. If this setting is greater than or equal to zero, the corresponding volume is set during startup, and whenever a song is loaded.

Harmonic Anticipation

This setting determines the time relationship between the part's harmony and the chord changes. If harmonic anticipation is greater than zero, the part switches to the next chord's scale early. This creates a time window before each chord change, during which the part's input notes are mapped to the next chord's scale instead of the current chord's scale. Depending on the length of the anticipation, the chords involved, and the timing of the accompanying parts, this may be perceived as more or less dissonant. The usual application is for the soloist to be out in front of, or leading the accompaniment, harmonically speaking. Harmonic anticipation is expressed as a fraction of a whole note; see durations. Typical values range from an eighth note to a quarter note. Negative harmonic anticipation is also permitted, in which case the part is behind (dragging) the changes.

Note that harmonic anticipation affects the behavior of the fix held notes feature. Without harmonic anticipation, if a note is struck just before a chord change and held, and the chord changes in such a way as to make that note invalid, the note gets corrected. However if harmonic anticipation is in effect, and the note is struck within the harmonic anticipation window, it's mapped using the coming chord's scale. This ensures that the note will remain valid when the chord change arrives, and avoids the possibility of a correction. For example if harmonic anticipation is set to an eighth note, notes can be struck and held up to an eighth note ahead of a chord change without any risk that they will become invalid. Even if held note correction is disabled, it's still recommended to use a small amount of harmonic anticipation, to provide "slack" for notes played slightly early.

Fix held notes

This setting enables or disables held note correction for the part. If a note is held over a chord change, the held note may become invalid, i.e. it may not be a member of the new chord's scale. ChordEase can optionally correct the invalid note, by replacing it with the new chord's nearest scale tone. The effect is more obvious when playing a sound that doesn't decay, e.g. an organ. Held note correction is supported for comp, but works slightly differently: notes that become invalid are corrected to the nearest tetrachord tone, instead of the nearest scale tone. This can result in interesting chord evolution and unusual voicings. Held note correction interacts with harmonic anticipation.

Bank Select

This optional setting selects a bank of patches on the output device. The Patch setting by itself can only access 128 patches, but when combined with Bank Select, as many as two million patches can potentially be accessed, depending on the device (up to 16,384 banks, each containing 128 patches).

Bank Select is divided into two values, Coarse (MSB) and Fine (LSB). It's possible to specify one value but not the other. Devices having less than 128 banks may only use the MSB. If a value is −1 (shown as N/A), it's unspecified. If the value is greater than or equal to zero, the corresponding Bank Select message is sent during startup, and whenever a song is loaded.

If you change Bank Select, your device likely won't switch patches until you also change the patch setting. This is in accordance with the MIDI specification. When a device receives Bank Select, it stores the selection in anticipation of a Program Change. When the device subsequently receives a Program Change, it then switches to the specified patch within the selected bank.

Controllers thru

This setting determines whether MIDI controllers are passed through to the output device or not. In addition to controller messages, it also affects all other non-note MIDI messages, e.g. patch change, pitch wheel, and channel aftertouch messages. This setting should normally be enabled, so that the input instrument's controls are forwarded to the output device. Common controls affected by this setting include sustain, modulation, pitch bend, and volume. Note that MIDI messages that are assigned to ChordEase parameters will never be passed through, regardless of this setting.

This setting should be considered carefully in some cases. Suppose you have a split, consisting of two parts, both of which receive input from different zones of the same device, and both of which send output to the same device. By default, the output device will receive two copies of every controller message, one from each part. This may or may not be appropriate, depending on how the device is set up. If the output device is multi-timbral, and the two parts are being output to two different instruments via two different MIDI channels, you probably want to pass the controllers through to both instruments, so that they both respond to sustain, pitch bend, etc. However if the two parts are being output to the same instrument, you may want to disable controllers thru for one of them, because sending two copies of every controller message to the same instrument wastes MIDI bandwidth and may confuse the instrument. To see what exactly controllers are being sent, use the MIDI output bar.

Local control

This setting enables or disables local control on the MIDI input device. For normal operation this setting should be unchecked, in order to disable local control. If the setting is checked, the "local on" message is sent to the device, otherwise the "local off" message is sent. ChordEase sends the local control message whenever this setting is changed, as well as during startup and whenever a song is opened. The "local off" message is controller number 122, with a parameter of zero.

Local control only matters if you're using the same device for both input and output. If your input device doesn't generate audio, or you're using a different device for output, local control is irrelevant. Disabling local control disconnects the instrument's user interface (e.g. its keyboard) from its audio generator. The usual symptom of failing to disable local control is that when you play a note on the instrument, you hear two notes. The notes may or may not differ, and if they're the same, the audio may sound "thin" due to acoustic cancellations. This occurs because the instrument is sending notes to ChordEase, and receiving (possibly different) notes back, but the audio generator is playing the local notes in addition to the notes received from ChordEase.

Note that not all MIDI instruments respond to the local control message. In this case you should consult your instrument's user manual to determine whether it's possible to disable local control, and if so how to do it.

Device name

This is the name of the MIDI output device associated with the current part. To change the output device, edit the output port. For a list of output devices, see the devices bar.

Lead

The lead function maps input notes to output notes by adding accidentals, i.e. sharps or flats. Unlike the bass function which transposes by shifting the entire scale, the lead function transposes in place. For any given input note, the lead function generates an output note as close as possible to the input note in terms of pitch, usually within a half step. If a consistent melodic pattern is input, the output notes vary in response to the song's chord progression, but only by small amounts. The overall shape of the input is preserved, and this quality makes the lead function ideal for soloing. The lead function doesn't have any settings.

InputOutput
A-7F-7
CCC
DDD
EEEb
FF#F
GGG
AAAb
BBBb

Numbers

The numbers function purposefully limits the number of scale tones in use at any one time, in order to facilitate melodious intervals and allow consistent management of dissonance. Input notes are mapped to a four-note subset of the current heptatonic scale, called a group. Seven different groups are available, and they gradate smoothly in their tension or distance from the tonal center. Each group has two variants, one for major chords and one for minor chords. The groups are summarized in the table below.

Numbers System
GroupMajorsMinorsTensionTemperatureColor
1 - 51 2 3 51 3 4 5consonantwarm   red
3 - 73 5 6 73 4 5 7↓ more tense↓ cooler   orange
5 - 25 6 7 25 7 1 2   yellow
7 - 47 2 3 47 1 2 4   green
2 - 62 3 4 62 4 5 6dissonantcool   blue
4 - 14 6 7 14 5 6 1↓ less tense↓ warmer   indigo
6 - 36 7 1 36 1 2 3   violet

The triad plus the seventh (1, 3, 5, 7) are chord tones, while the remaining scale tones (2, 4, 6) are tensions. The groups can be viewed as tonal palettes ranging from mostly chord tones to mostly tensions. At one extreme, group 1 - 5 contains the triad, and therefore sounds consonant, warm, or red. At the other extreme, group 2 - 6 contains all three tensions, and therefore sounds dissonant, cool, or blue. The groups in between gradually add tensions, or gradually remove them.

The group setting simply selects one of the seven groups. As long as you continue to use the same group, you're maintaining a consistent degree of dissonance relative to the chord changes. Think of the group setting as a tension knob. By changing the group setting periodically you can vary the mood of your improvisation.

The following table shows the output of the numbers function for various major and minor chords. Only the first two groups are shown. Notice that the numbers function transposes in place, inverting the group as needed to maximize continuity between different chords. Also notice that the output spans nearly two octaves for every input octave; this asymmetry is discussed further below.

InputOutput
Group 1 - 5Group 3 - 7
Amaj7A-7Fmaj7F-7 Amaj7A-7Fmaj7F-7
C4 C#4C4C4C4 C#4C4C4C4
D4 E4D4F4F4 E4D4D4Eb4
E4 A4E4G4Ab4 F#4E4E4Ab4
F4 B4A4A4Bb4 G#4G4A4Bb4
G4 C#5C5C5C5 C#5C5C5C5
A4 E5D5F5F5 E5D5D5Eb5
B4 A5E5G5Ab5 F#5E5E5Ab5
C5 B5A5A5Bb5 G#5G5A5Bb5

Numbers origin

This setting aligns the numbers mapping function with the diatonic scale. Alignment is necessary because the numbers system is tetratonic, meaning it has only four notes per octave, unlike the diatonic scale which has seven notes per octave. Each octave of the diatonic scale spans nearly two octaves of the numbers system, and consequently they diverge rapidly from each other in terms of pitch.

Alignment occurs at a single note, called the origin. By default, the numbers system is aligned to the diatonic scale at middle C (C4). The origin is specified as a positive or negative offset from middle C, in tetratonic degrees. Increasing the origin by one raises the pitch of the entire numbers system by one tetratonic degree, as the following table shows for group 1 - 5 and Amaj7.

InputOutput
Origin=0Origin=1
C4C#4E4
D4E4  ↗A4
E4A4  ↗B4
F4B4  ↗C#5

Alignment matters most when switching from a heptatonic function such as Lead to the numbers system or vice versa. If you're playing near the origin when you switch, the transition is smooth, but if you're playing significantly above or below the origin, a jump in pitch occurs. If this jump is undesirable, you can avoid it by adjusting the numbers origin to suit the range of your instrument. You can also change the numbers origin during a performance as a kind of pitch-shifting effect.

Numbers theory

The numbers system was popularized by tenor saxophonist and music educator Jerry Bergonzi in his book "Inside Improvisation, Vol 1: Melodic Structures." The groups can be derived from a tetratonic pattern superimposed onto a heptatonic scale. The pattern consists of three adjacent scale tones followed by a skipped scale tone, as shown in the column heading of the table below. The groups are four-note subsets of this repeating pattern, arranged so that each group starts two scale tones beyond its predecessor.

 1234567123456712345671234567123 
Majors                               1235
                               3567
                               5672
                               7234
                               2346
                               4671
                               6713
Minors                               1345
                               3457
                               5712
                               7124
                               2456
                               4561
                               6123

Comp

This page contains comping-related settings for the current part. Comping is an abbreviation for accompanying. Comping is enabled by selecting the Comp mapping function in the parts list. In the Comp function, playing a single note on the input device produces a chord on the output device, specifically a tetrachord or a triad. The current song position determines the chord type. Which note is played determines the frequency range of the chord, i.e. higher notes result in higher chords. Specifically, the input note is used as the bottom of a one-octave window within which the output chord is voiced. The chord is inverted as needed to keep it within the specified window. The output notes all have the same velocity as the input note. The chord voicing and variation are configurable, and the chords can also be arpeggiated.

The performer's input to the Comp function is primarily rhythmic. An effective chordal accompaniment can be achieved by playing a single note with suitable rhythm. It may be desirable to vary the input note (and thereby vary the frequency range of the output chords) for dramatic effect and to account for the range of the soloist or other performers.

The Comp function is also useful for self-accompaniment, e.g. on a keyboard instrument. This is achieved by creating a split consisting of two parts, one set to Comp and the other set to Lead. Both parts receive their input from the same device, but occupy different zones of the input device. For example to play Lead with the right hand and Comp with the left hand, assuming a split point of C4, you might give the Lead part a zone of C4 to G9 and the Comp part a zone of C−1 to B3.

The Comp part is normally played with only one input note at time. Multiple input notes at once are permitted, and may create interesting effects, but at the risk of too many simultaneous output notes exceeding the polyphony of the output device.

Voicing

This setting determines the chord voicing. For close voicing, the chord is inverted as needed to fit within a one-octave window, the bottom of which is determined by the input note, as explained above. For other voicings, the close voicing is still computed, but serves as a preliminary stage: one or more notes of the close voicing are then dropped an octave, as shown in the table below. Drop 2 and drop 3 voicings are characteristic of guitar. Note that this setting only affects tetrachords; triads always use close voicing.

VoicingNotes droppedCmaj7
CloseNoneC4 E4 G4 B4
Drop 22nd from topG3 C4 E4 B4
Drop 33rd from topE3 C4 G4 B4
Drop 44th from topC3 E4 G4 B4
Drop 2 32nd and 3rd from topE3 G3 C4 B4
Drop 2 42nd and 4th from topC3 G3 E4 B4
Drop 3 43rd and 4th from topC3 E3 G4 B4
Drop 2 3 42nd, 3rd and 4th from topC3 E3 G3 B4

Variation

This setting determines if and how chords vary. Two variations are defined for each chord type. The variations are referred to as A and B. Typically A is a more conventional spelling, whereas B alters one or more chord tones, e.g. for the major seventh chord type, A is 1 3 5 7 and B is 2 3 5 6, effectively substituting a 69 chord. The variations are a matter of taste, and may be customized by editing the chord dictionary. The variation schemes are shown below. The "A to B" and "B to A" schemes are only distinguishable if Chord change resets alternation is enabled.

SchemeBehavior
A onlyOnly the A variation of the chord is output.
B onlyOnly the B variation of the chord is output.
A to BThe output chord alternates between the A and B variations. If "Chord change resets alternation" is enabled, a change of chord resets the alternation to A.
B to AThe output chord alternates between the B and A variations. If "Chord change resets alternation" is enabled, a change of chord resets the alternation to B.

Chord change resets alternation

This setting determines whether a change of chord resets the alternation state for the "A to B" and "B to A" variation schemes. In these schemes, successive input notes alternate the output chord between the two variations defined for the current chord type.

DisabledThe alternation is never reset. This lets the performer create arbitrary patterns of chord variation. This option is more challenging, but also more expressive. Note that in this case, the "A to B" and "B to A" schemes are indistinguishable.
EnabledThe alternation is reset to a known state at the start of each new chord. This makes it easy to maintain a consistent pattern of variation.

Arpeggio Period

The notes of a chord can be played in sequence instead of simultaneously, forming an arpeggio. The speed of the arpeggio is determined by the arpeggio period, i.e. the duration of the pause between successive arpeggio notes, expressed as a fraction of a whole note. Because it's a period, not a frequency, smaller values result in faster arpeggios. If the period is zero, arpeggiation is disabled. The drop list lets you select common fractional values, e.g. an 1/8 note. You can also type a fraction or floating-point value in the edit box; see durations.

The arpeggio speed can be varied at any time, including during an arpeggio. With precise timing, an arpeggio can be gradually sped up or slowed down. This technique lets you realistically emulate strumming, e.g. on guitar. It's easier to achieve the needed precision via a physical remote control, assigned to the Comp Arp Period MIDI target. In some cases it may be preferable to control the arpeggio period in a quantized manner instead of continuously. In this case the Comp Arp Period Quant MIDI target should be used instead. It selects the arpeggio period from the following list of durations:

1/1whole
1/2half
T1/2triplet half (1/3)
1/4quarter
T1/4triplet quarter (1/6)
1/8eighth
T1/8triplet eighth (1/12)
1/16sixteenth
T1/16triplet sixteenth (1/24)
1/32thirty-second
T1/32triplet thirty-second (1/48)
1/64sixty-fourth

Arpeggio Order

This setting determines the order of the notes when a chord is arpeggiated. The options are listed in the table below.

OrderDescription
DefaultThe chord's notes are played in their default order, which is determined by the chord type, voicing, and variation.
AscendingThe chord's notes are played in ascending order, from lowest to highest.
DescendingThe chord's notes are played in descending order, from highest to lowest.
AlternateThe arpeggio alternates between ascending and descending order. This is useful for emulating guitar strumming.
RandomThe chord's notes are played in random order, avoiding repeated notes. This is useful for emulating guitar fingerpicking.

Arpeggio Repeat

This setting determines whether chord arpeggios are repeated.

DisabledThe arpeggio stops when all of the chord's notes have been played, after which continuing to hold the input note has no effect.
EnabledThe arpeggio repeats for as long as the input note remains pressed.

Arpeggio repeat can be combined with auto play, resulting in continuous automated arpeggiation. The effect is similar to a music box. It's more interesting if the arpeggio order is random.

Arpeggio Adapt

This setting causes arpeggios that span a chord change to adapt to the change. Ordinarily an arpeggio's notes are determined solely by the chord during which it begins, and remain constant. Consequently if an ordinary arpeggio spans two chords, it may clash with the latter chord. Adaptive arpeggios avoid this potential clash. When the chord changes, any unplayed arpeggio note that's not found in the new chord is replaced with the nearest unused note from the new chord.

In the following example, an arpeggio is evenly split between two chords, i.e. its first two notes occur during Cmaj7 and its remaining notes occur during Dbmaj7. In the ordinary case, G and B clash with Dbmaj7, whereas in the adaptive case, they're replaced with the nearest notes of Dbmaj7's arpeggio. Notice that the adapted arpeggio spells C+(b9) rather than Cmaj7. Adaptive arpeggios combine chords, resulting in hybrids which may be nonstandard and/or dissonant.

AdaptCmaj7Dbmaj7
NoC4 E4G4 B4
YesC4 E4Ab4 Db5

For adaptive arpeggios to work properly, the fix held notes feature must be disabled, because otherwise it would correct the entire arpeggio, preventing hybrids. Adaptation takes harmonic anticipation into account, i.e. a given part can update its arpeggios early (or late) relative to other parts.

Bass

This page contains settings related to the Bass mapping function for the current part. The purpose of the bass function is to make it easy to find chord tones, particularly the root. In the bass function, the chord tones remain stationary on the input device, i.e. each note of the input diatonic scale has a fixed harmonic role. For example C is always the root of the current chord, G is always the fifth of the current chord, etc. The following table shows the mapping for two arbitrary chords.

InputRoleOutput
A-7F-7
CRootAF
DSecondBG
EThirdCAb
FFourthDBb
GFifthEC
ASixthF#D
BSeventhGEb

The table above assumes the default setup, in which the output chord scale maps to the C major scale (i.e. the white keys) on the input device. Note that this is only the case when input transpose is zero or a multiple of twelve.

The bass function lets you effortlessly maintain a constant harmonic relationship to changing chords. For example, to play the roots of all the chords, simply play C throughout the entire song. To play a simple Latin bass line, just switch between C and G: this is equivalent to playing the root and the fifth of each chord. For swing, you may also want to use approach.

Unlike the Lead function, which transposes in position, the bass function transposes by shifting, and can therefore produce drastic pitch changes. For example if the chord changes from a C to a G, the bass note corresponding to any given input note leaps a fifth. The bass function doesn't necessarily preserve the input's shape, and consequently the lead function may be more useful for soloing.

Lowest note

This setting determines the lowest output note the bass function will generate. Output notes below this limit are shifted up as many octaves as needed to stay above the limit. This helps prevent the inadvertent playing of extremely low notes that might otherwise damage audio equipment.

The setting can be used to model actual bass instruments. The default value (E1) models a typical four-string bass. Other common values are D1, C1, or B0 for a typical five-string bass. These values assume middle C is C4 per the MIDI specification, and may need to be adjusted by one or more octaves for non-compliant instruments.

This setting also affects the transposition direction, i.e. for a given chord root, whether input notes are transposed up or down to produce the corresponding output notes. For example if the lowest note is an E, for chord roots C, Db, D, and Eb, the input is transposed up, whereas for all other roots, the input is transposed down.

Slash chords

This setting determines whether the bass function respects alternate bass notes appended to chord symbols. Chord symbols may be followed by a slash and a bass note, indicating that the bass should play a different note instead of the chord's root, e.g. Cmaj7/G indicates that the bass should play G instead of C. Such symbols are known as slash chords.

If this setting is enabled, slash chords are respected: the current chord scale is shifted so that C maps to the chord's bass note instead of its root. The bass note may not belong to the scale, in which case the bass note is substituted for the root, potentially resulting in a non-standard scale. If this setting is disabled, slash chords have no effect on the bass function.

Approach mode

The bass function features an approach mode. An approach is a melodic line that proceeds predictably towards a chord tone of a subsequent chord, known as the target chord. The target note is usually the root or the fifth of the target chord. A well-executed approach is timed so as to arrive at the target note just as the target chord begins. An approach anticipates both the target chord and the target note, and creates an expectation that they will coincide.

The bass function normally maps C to the current chord's root. This makes it trivial to locate the root and other chord tones of the current chord, but isn't necessarily helpful for future chords. Approach mode solves this problem by shifting the current chord's scale so that C maps to the target chord's root, or as close as possible. In approach mode, you approach the target root by simply approaching C, regardless of what the target chord actually is. To approach the target fifth, just approach G instead of C. Thus you can make accurate approaches without knowing the song's chords at all.

Approach can be automatic or manually triggered. Automatic approach is enabled by setting a non-zero approach length. For manual operation, specify the desired target alignment, and then manually trigger approach mode before each approach. It's possible to combine automatic and manual approaches, in which case the manual approach takes precedence.

Approach length

This setting determines the length of automatic approach in the bass function. Setting this length non-zero enables automatic approach. The length is specified via a duration combo box; see durations for details. For example if the approach length is 1/2 (a half note), assuming 4/4 time, approach mode is automatically enabled halfway through each measure. In other words, during the second half of each measure, if you play a melodic line that converges on C, you will be approaching the root of the following measure's chord. The approach length can be varied dynamically via remote control, using the Bass Approach Length MIDI target.

Target alignment

This setting determines the alignment of the target chord for manually triggered approach in the bass function. The available alignments are shown in the table below. Alignments are relative to the start of the song. In addition to specifying the desired alignment, a manual approach must also be triggered. Triggering a manual approach immediately shifts the current chord's scale so that C maps to the root of the target chord, or as close as possible. The target may be further away than the next chord, in which case the chords between the current and target chords also have their scales similarly shifted.

AlignmentTarget chord
1/4First chord of the next quarter-measure.
1/2First chord of the next half-measure.
1First chord of the next measure.
2First chord of the next measure that's aligned on a two-measure boundary.
4First chord of the next measure that's aligned on a four-measure boundary.

For example suppose approach is triggered halfway through the first measure of the following song. If the alignment is 1, the target chord is A7b9, if it's 2, the target is C-7, and if it's 4, the target is F-7.

E-7b5A7b9C-7F7
F-7Bb7Ebmaj7Ab7#4

Approach trigger

This button triggers a manual approach in the bass function. The target of a manual approach depends on the current song position and the target alignment, as explained above. For best results, trigger approach mode slightly before playing the approach. It's usually more convenient to trigger manual approaches via the Bass Approach Trigger MIDI target.

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.

Auto

This page contains settings related to auto-accompaniment. ChordEase is primarily oriented towards live performance and thus has very limited support for auto-accompaniment. Each mapping function handles auto-accompaniment differently, as shown in the table below.

Mapping functionAuto-accompaniment
LeadNot supported.
CompAt each chord change boundary, the new chord is played once, using the current voicing and variation. The chord can be arpeggiated.
BassAt each chord change boundary, the new chord's root is played once.

ChordEase implements auto-accompaniment by sending itself an input note, using the part's input port and input channel. The window setting determines which note is sent. In effect, the part generates its own input, and thereby triggers itself. In addition to triggering itself, an auto-accompaniment part also triggers any other part having the same input port and channel. This allows layering, but it can also cause unexpected behavior. Interesting effects can be achieved by having multiple auto-accompaniment parts, but be careful to give each part a unique input channel, otherwise each part triggers all the others, resulting in spurious and/or duplicate notes.

Auto Play

This setting enables auto-accompaniment for the current part.

Window

This setting specifies the bottom note of a one-octave pitch window within which auto-accompaniment occurs. Increasing this setting to a higher note raises the overall pitch of the auto-accompaniment. For comp parts, the specified note is input directly to the comp function. For bass parts, the nearest C above the specified note is input to the bass function, in order to play the root of the current chord. In either case, the function behaves as if it had received the note from a MIDI input device. The note must be within the part's zone, otherwise the note is ignored and no output is generated.

Velocity

This setting specifies the velocity of auto-accompaniment notes. The velocities are also affected by the part's velocity offset, if any.

MIDI

This page lists the part MIDI targets. Each row corresponds to a part parameter or command that can be remotely controlled via MIDI. Each part has its own MIDI targets, and only the current part's targets are shown. To view the targets for a different part, select it in the parts list. In order to remotely control a MIDI target, you must first assign a MIDI message to it. MIDI assignments can be created by editing the items on this page, though it's usually easier to have ChordEase learn the assignments. This page also lets you change or delete existing MIDI assignments. For additional information, see the Patch MIDI page, which works similarly. For information about each target, see the MIDI target list.

Menus

File

New

Use this command to create a new, empty song. To open an existing song, use Open instead. To create a new patch, use Patch/New.

Open

Use this command to open an existing song. A song can also be opened by drag/drop from Windows Explorer, or via the command line. Note that the open command also supports Impro-Visor lead sheet files. To open a patch, use Patch/Open.

Save

Use this command to save the active song to its current name and directory. If you want to change the name or directory of an existing song before you save it, use Save As instead. To save the patch, use Patch/Save.

Save As

Use this command to save and name the active song. To save and name the patch, use Patch/Save As.

Edit Text

Use this command to edit the current song as a text file. You should familiarize yourself with the song file format before attempting this. Advanced users may find this method faster than using the chart view editing functions. The shortcut for this command is Ctrl+E. The command displays a simple editing dialog containing a multiline edit control. The usual clipboard editing functions are supported. The editing dialog also supports find and replace, via the following keyboard shortcuts: Ctrl+F for Find, F3 for Find Next, and Ctrl+H for Replace.

If you prefer, you can also edit songs with an external text editor such as Notepad. Note however that if you externally edit a song, your edits won't be visible within ChordEase until you close and reopen the song. To avoid confusion, it's recommended to use the editing dialog.

Properties

Use this command to edit the properties of the current song, including its time signature and key signature. You can also specify optional properties such as tempo, transposition to a different key, and comments. If tempo is zero, the song is played at the current tempo specified by the patch.

Print Setup

Use this command to select a printer, page orientation, and paper size before printing the current song.

Printer

Allows you to specify the printer. If you don't select a printer, ChordEase prints to the Windows default printer.

Paper

Allows you to select the paper size and source (from among those available for the printer). The sizes and sources available depend on the printer you have selected and they change when you change printers.

Orientation

Allows you to specify whether the program is to print in Portrait or Landscape orientation.

Print Preview

Use this command to see how the current song will look before printing it. To print the song, press the Print button. To navigate multiple pages, use the Next Page and Prev Page buttons or the scroll bar. To toggle between single and dual page view, press the Two Page button. To change magnification, use the Zoom In and Zoom Out buttons. To exit preview mode, press the Close button. Note that it may be necessary to increase the size of the chart font before printing.

Print

Use this command to print the current song. You may need to set up your printer first. You may also want to see a preview before printing. Note that it may be necessary to increase the size of the chart font before printing.

Exit

Use this command to end your ChordEase session. You can also use the Close command on the application Control menu. ChordEase prompts you to save documents with unsaved changes.

Edit

Editing

The editing commands are summarized in the table below. They're also available from the context menu.

CommandDescriptionShortcut
UndoUndo the last action.Ctrl+Z
RedoRedo the last action.Ctrl+Y
CutCut the selection and put it on the Clipboard.Ctrl+X
CopyCopy the selection and put it on the Clipboard.Ctrl+C
PasteInsert the Clipboard contents.Ctrl+V
InsertInsert a new item.Insert
DeleteDelete the selection.Delete
Select AllSelect all items.Ctrl+A
RenameRename the selected item.F2

Note that the editing commands behave differently depending on which window within the application has focus. The possible cases are as follows:

FocusAction
Edit controlThe command operates on the text in the edit control.
Chart viewThe command operates on the chart view.
Parts listThe command operates on the parts list.

Undo/Redo

Any operation that modifies either the song or the patch can be undone via Edit/Undo or Ctrl+Z, and redone via Edit/Redo or Ctrl+Y. Undo is unlimited. Note that the song and the patch have independent undo histories, and consequently the undo/redo command's action depends on which window has focus, as shown below. To undo/redo a song edit, first make sure the chart view has focus, otherwise you may inadvertently undo/redo a patch edit.

FocusAction
Chart viewUndo/Redo the most recent song edit.
Any other windowUndo/Redo the most recent patch edit.

Clipboard

The clipboard is the destination for cut and copy, and the source for paste. The chart view and the parts list both support these standard editing commands, as do all edit controls. Consequently the clipboard may contain different types of data, e.g. chords from the chart view, parts from the parts list, or text from an edit control.

Cut

This command deletes the selection after copying it to the clipboard. To cut, use Edit/Cut, press Ctrl+X, or select Cut from the view's context menu or the Toolbar. The command's action depends on which window has focus, as shown below.

FocusAction
Edit controlCuts the selected text to the clipboard.
Chart viewCuts the selected chords to the clipboard.
Parts listCuts the selected parts to the clipboard.

Copy

This command copies the selection to the clipboard. To copy, use Edit/Copy, press Ctrl+C, or select Copy from the view's context menu or the Toolbar. The command's action depends on which window has focus, as shown below.

FocusAction
Edit controlCopies the selected text to the clipboard.
Chart viewCopies the selected chords to the clipboard.
Parts listCopies the selected parts to the clipboard.

Paste

This command inserts the contents of the clipboard at the cursor position. To paste, use Edit/Paste, press Ctrl+V, or select Paste from the view's context menu or the Toolbar. The command's action depends on which window has focus, as shown below.

FocusAction
Edit controlInserts text from the clipboard into the edit control at the cursor position.
Chart viewInserts chords from the clipboard into the song at the current position.
Parts listInserts parts from the clipboard into the parts list before the current selection, or at the end of the list if there's no current selection.

Insert

This command inserts an item at the cursor position. To insert, use Edit/Insert or press the Insert key. The command's action depends on which window has focus, as shown below.

FocusAction
Chart viewDisplays the Insert Chord dialog and then inserts the specified chord into the song at the current position.
Parts listInserts a new part into the parts list before the current selection, or at the end of the list if there's no current selection.

Delete

This command deletes the selection. To delete, use Edit/Delete, press the Delete key, or select Delete from the view's context menu. The command's action depends on which window has focus, as shown below.

FocusAction
Edit controlDeletes the selected text.
Chart viewDeletes the selected chords.
Parts listDeletes the selected parts.

Select All

This command selects all items. To select all, use Edit/Select All, or press Ctrl+A. The command's action depends on which window has focus, as shown below.

FocusAction
Edit controlSelects all of the text.
Chart viewSelects all of the chords.
Parts listSelects all of the parts.

Rename

This command renames the currently selected item. To rename, use Edit/Rename, or press F2. The command's action depends on which window has focus, as shown below.

FocusAction
Chart viewRenames the currently selected chord.
Parts listRenames the currently selected part.

Section

Create

This command creates a new section consisting of the currently selected chords. To create a section, first select the desired chords in the chart view, and then either use Edit/Section/Create, or select Section/Create from the chart view's context menu. The new section's repeat count is initially zero, which means the section repeats indefinitely or until it's exited via the Next Section command. If you want the section to repeat a specific number of times, first create it, and then use Section Properties to edit its repeat count. Note that sections can't be nested.

Delete

This command deletes an existing section. Position the chart view's cursor anywhere within the section to be deleted, and use Edit/Section/Delete or select Section/Delete from the chart view's context menu.

Properties

This command displays the Section Properties dialog, which lets you edit the properties of an existing section. Position the chart view's cursor anywhere within the section to be edited, and use Edit/Section/Properties or select Section/Properties from the chart view's context menu.

List

This command displays the Section List dialog, which lists all the sections in the current song.

Transpose

This command transposes the selected chords. To temporarily transpose an entire song, use the transpose setting instead. Unlike the transpose setting, which applies a global transposition to all songs without modifying them, the transpose command actually modifies one or more chords within the current song. The command displays a dialog that prompts the user to enter a transposition amount. The transposition amount is expressed in semitones, and ranges from −11 to +11. For a list of transposition amounts and their resulting intervals, see relative intervals.

Length

This command changes the length of the selected chords. The command displays a dialog that prompts the user to enter a scaling percentage. Enter 200% to make the selection twice as long, 50% to make it half as long, etc. Note that the scaling can potentially cause rounding errors, because ChordEase uses integers to represent chord durations. If the specified scaling would cause rounding errors, a warning is displayed.

For example, if the song is in 4/4 time and has one chord per measure, any of its chords can be scaled by 50% without rounding errors, because each chord has a duration of 4 and half of 4 is an integer. However if the song is in 3/4, since each chord has a duration of 3 and half of 3 isn't an integer, the scaling would cause rounding errors, and consequently a warning is displayed. In this particular case the problem could be avoided by doubling the song's time signature from 3/4 to 6/8; see the discussion of time signature changes in song properties. In some cases it may be preferable to cancel the length change, and manually edit the chord durations instead; see chart view.

Options

This command displays the Options dialog, which lets you edit various user preferences. The options are organized into pages by category, e.g. chart options, record options, and other options. To reset all options to their default states, press the Reset All button. The installed version of ChordEase stores options in the registry, whereas the portable version stores them in a file (ChordEase.ini) in the same folder as the executable.

Patch

New

Use this command to create a new, empty patch. To open an existing patch, use Patch/Open instead. To create a new song, use File/New.

Open

Use this command to open an existing patch. A patch can also be opened by drag/drop from Windows Explorer, or via the command line. To open a song, use File/Open.

Patch

Use this command to save the active patch to its current name and directory. If you want to change the name or directory of an existing patch before you save it, use Patch/Save As instead. To save the song, use File/Save.

Save As

Use this command to save and name the active patch. To save and name the song, use File/Save As.

Transport

Play/Stop

This command toggles song playback between the playing and stopped states. If Lead-in is non-zero, the specified number of lead-in measures are played before the song begins. If Auto Rewind is enabled, stopping automatically rewinds back to the beginning of the song.

Pause

This command pauses playback, or it's already paused, resumes it. Unlike Play/Stop, pausing doesn't rewind or otherwise affect the song position, and resuming doesn't play a lead-in.

Rewind

This command rewinds back to the beginning of the current song.

Repeat

This command enables or disables song repeat. If song repeat is enabled, the entire song loops until playback is stopped. Otherwise, playback stops automatically when the end of the song is reached.

Record

This command starts or stops a recording. By default, you're prompted for an output filename, but if you prefer "one touch" recording, uncheck the prompt for filename option. It's also possible to always record, in which case the Record command is superfluous and gives the error message "Locked to always record." To play back the completed recording, use the Record Player dialog, or play the MIDI file in a suitable application; also see record output files.

Next Section

This command tells ChordEase to stop repeating the current section, i.e. when the end of the current section is reached, continue to the next section instead of returning to the beginning of the current section. The command doesn't immediately affect the song position, rather it effectively clears a repeat flag. It works for sections that specify a repeat count as well as sections that repeat indefinitely.

The command is only accepted during a repeating section, and doesn't accumulate, so once it's been given, any additional next section commands are ignored until the section advances. The command should be given as soon as possible, i.e. near the beginning of the last pass through the repeating section. If the command is received too late, the section may unexpectedly repeat again, and even if the section advances, the harmonic anticipation may be incorrect. Though it's possible to give this command via the menus or toolbar, it's usually more convenient to give it via remote control, by assigning a button or foot pedal to the Next Section MIDI target.

Start Tag

This command spontaneously repeats one or more measures, which is also known as tagging. Tags can be impromptu, unlike sections which must be arranged beforehand. A tag can repeat a fixed number of times or indefinitely. A fixed repeat count is useful for endings, whereas indefinite repeat is useful for jamming on part of a song.

A tag is specified via its last measure, its length in measures, and its repeat count. To start tagging, first adjust the length and repeat count if needed. Then issue the Start Tag command during the last of the measures you wish to repeat, using Transport/Start Tag, Ctrl+T, or a suitably assigned MIDI controller. It's recommended to issue the command approximately halfway through the last measure, in order to minimize the risk of tagging the wrong measures. Issuing the command too late can also cause incorrect harmonic anticipation.

To exit a tag, use the Start Tag command again, or the Next Section command if you prefer. Either command finishes the current pass through the tag before proceeding on to the following measure. A tag with a fixed repeat count exits automatically after the specified number of repetitions, though you can also exit it prematurely. An indefinitely repeating tag doesn't exit until you tell it to.

Note that a tag can't wrap around from the end of the song to the beginning. For example if the tag length is two measures, a tag can't be started until the song's second measure.

Tagging is normally done with the song playing, but it's also supported in free time mode, i.e. when the song is stopped and you're stepping through its chords manually via the Next Chord and Previous Chord commands.

Next Chord

This command skips forward to the next chord within the song. Note that this isn't necessarily the next measure: the actual distance moved depends on the current chord's duration. This command is particularly useful when performing in free time, i.e. with the song stopped. This command is a likely candidate for remote control. To skip backwards, use Previous Chord.

Previous Chord

This command skips backward to the previous chord within the song. Note that this isn't necessarily the previous measure: the actual distance moved depends on the previous chord's duration. This command is particularly useful when performing in free time, i.e. with the song stopped. This command is a likely candidate for remote control. To skip forward, use Next Chord.

Go To

This command jumps to a specified position within the song. The command displays a modal dialog, which prompts you to enter a numeric song position in measures, beats, and ticks. Note that measures and beats are one-origin, i.e. the beginning of the song is 1:1:0. If the desired position is on a beat boundary you may omit the ticks, e.g. enter 5:3 for the third beat of the fifth measure; if it's on a measure boundary you may omit both beats and ticks.

Auto Rewind

This command enables or disables auto-rewind. If auto-rewind is enabled, stopping playback via the Play/Stop command automatically rewinds back to the beginning of the song.

MIDI

Devices

The MIDI/Devices command shows or hides the MIDI Devices bar, which lists all MIDI input and output devices, along with their indices (also known as ports).

Input

The MIDI/Input command shows or hides the MIDI Input bar. By default the bar displays all input received from all MIDI input devices. The bar also has filtering capabilities.

Output

The MIDI/Output command shows or hides the MIDI Output bar. By default the bar displays all output sent to all MIDI output devices. The bar also has filtering capabilities.

Learn

The MIDI/Learn command enables or disables MIDI learn mode. Many ChordEase parameters can be changed remotely via a MIDI device, e.g. a MIDI control surface, and certain commands can also be triggered remotely. The parameters and commands that can be remotely controlled are called MIDI targets. In order to remotely control a MIDI target, you must first assign a MIDI message to it. MIDI assignments can be entered manually, but it's usually easier to have ChordEase learn them, because in learn mode you don't need to know what MIDI messages your controller sends, or what port and channel it sends them on. The following example shows how to learn a MIDI assignment, for the tempo parameter in this case.

  1. Enable learn mode, via MIDI/Learn in the menus or the toolbar, or the Ctrl+L shortcut.
  2. Select the page containing the target parameter, in this case the patch bar's General page.
  3. Left-click the dialog control associated with the target parameter, in this case the Tempo edit box. A green outline appears around the dialog control, indicating that it's ready to learn a MIDI assignment.
  4. On your MIDI device, move the physical control (e.g. knob, slider or button) that you want to assign. The target parameter (tempo in this case) should now change as you move the control.
  5. Disable learn mode, the same way you enabled it. The green outline disappears.

Assignments can also be learned via the patch MIDI page and the part MIDI page. This method is required for targets that don't have dialog controls associated with them, e.g. play/stop and similar transport-related targets. The following example shows how to learn a MIDI assignment via the part MIDI page, for the velocity offset parameter in this case.

  1. Enable learn mode.
  2. Select the appropriate part in the parts list.
  3. Select the parts bar's MIDI page.
  4. Within the MIDI page, left-click the target parameter's name, "Input Vel. Offset" in this case. The corresponding row is highlighted in green, indicating that it's ready to learn a MIDI assignment.
  5. On your MIDI device, move the physical control (e.g. knob, slider or button) that you want to assign. The target row's port, channel, event type, and controller number should snap to the appropriate settings.
  6. Disable learn mode. The green highlight disappears.

If you're making multiple assignments, it's not necessary to enable and disable learn mode each time. Instead you can enable it once, learn the assignments, and then disable it. Be careful to always disable learn mode when you're done assigning, to avoid inadvertently creating spurious assignments. Each part has its own MIDI targets, so before learning part assignments, make sure the appropriate part is selected in the parts list. Note that a MIDI message can be assigned to multiple targets.

The part's input port and channel can also be learned, even though they don't appear in the list of part MIDI targets; for details, see input port.

Assignments

The MIDI/Assignments command displays the MIDI Assignments dialog, which lists all MIDI targets to which controllers are currently assigned.

Note Mappings

The MIDI/Note Mappings command displays the MIDI Note Mappings dialog, which lists the input to output note mapping for each part.

Chase Events

The MIDI/Chase Events command enables or disables the "chasing" of remote parameter changes. While chase is enabled, user interface elements are automatically shown as needed to make the effects of remote parameter changes obvious. Remotely controlled parameters are also known as MIDI targets. When a target parameter is changed via MIDI, the corresponding control in the user interface is updated. However this update is only apparent if that control's parent page is visible. If chase is enabled, ChordEase automatically shows the appropriate page, i.e. the page within the patch bar or parts bar that contains the updated control. For part targets, the appropriate part is also selected in the parts list. Note that some MIDI targets can't be chased, e.g. the transport-related targets. The Chase Events feature can be useful for debugging your MIDI setup, but it should normally be disabled to avoid confusion.

Reset All Targets

The MIDI/Reset All Targets command resets all MIDI targets to their default state. This effectively deletes all MIDI assignments. To delete an individual MIDI assignment, find the corresponding target within the patch MIDI page or part MIDI page, right-click its row, and select Reset in the context menu. Individual assignments can also be deleted via the MIDI Assignments dialog, by selecting one or more rows and choosing Delete in the context menu.

Panic

The MIDI/Panic command resets all MIDI notes on all output devices, and also resets the list of mapped notes within ChordEase. This is useful for stopping stuck notes. Avoid using this command during a performance except as a last resort, because it may cause audible artifacts. The shortcut for this command is Shift+Esc.

View

Toolbar

The toolbar provides buttons for the most frequently used commands. To show or hide the toolbar, use View/Toolbar.

Status bar

The status bar displays hints for the menus, and also shows the time signature, key signature, and position within the current song. To show or hide the status bar, use View/Status Bar.

Patch bar

This command shows or hides the Patch bar. The patch bar lets you edit patch settings that are common to all parts. The patch bar includes the following tabbed pages:

PageDescription
GeneralGeneral settings that have systemwide effects.
MetronomeMetronome-related settings.
MIDIList of the patch MIDI targets; each row corresponds to a patch parameter or command that can be remotely controlled via MIDI.

Parts bar

This command shows or hides the Parts bar. The parts bar lets you create parts and edit their settings. The parts bar has two panes. The left-hand pane contains the parts list which lists the existing parts. The right-hand pane contains various tabbed pages of settings, which correspond to the currently selected part. The parts bar includes the following pages:

PageDescription
InputInput-related settings, including which MIDI port and channel the part should receive its input from.
OutputOutput-related settings, including which MIDI port and channel the part should send its output to.
LeadSettings related to the Lead mapping function.
CompSettings related to the Comp mapping function.
BassSettings related to the Bass mapping function.
AutoSettings related to auto-accompaniment.
MIDIList of the part MIDI targets; each row corresponds to a part parameter or command that can be remotely controlled via MIDI.

Chord bar

This command shows or hides the Chord bar. This toolbar lets you quickly edit chords within the current song, or change the default chord if no song is open. You can also use the chord bar to change which scale and mode are associated with a given chord, but note that this affects all instances of that chord type in all songs, because you're effectively editing the corresponding definition in the chord dictionary. The chord bar's properties are further explained in the table below. Note that "current chord" refers either to the chord at the current song position, or if no song is open, to the default chord.

RootThis changes the current chord's root.
TypeThis changes the current chord's type.
BassThis changes the current chord's bass note. Note that if '*' is selected, the bass note is the same as the root.
KeyThis displays the current chord's key, which depends on its type, scale and mode.
ScaleThis changes the scale in the chord dictionary definition corresponding to the current chord.
ModeThis changes the mode in the chord dictionary definition corresponding to the current chord.

Undo/redo is supported within the chord bar, but note that since the bar can modify two different documents (the song and the chord dictionary), the behavior of undo/redo depends on which of the bar's drop lists has focus. If you've changed the scale or mode of a chord type, you'll be prompted to save your chord dictionary changes when you exit the application.

Chord bar properties have corresponding MIDI targets which allow them to be remotely controlled via MIDI. This is particularly useful for creating a song spontaneously (with no song open) by changing the default chord while you play. Note that the chord bar supports MIDI learn; while learn is enabled, you can assign a MIDI message to a chord bar property by selecting its corresponding drop list and then moving the desired MIDI control.

Piano

This command shows or hides the Piano dialog. The dialog functions as a virtual piano that lets you play ChordEase via your computer's mouse or keyboard. The dialog can also display input notes received from an external instrument. Various types of informational labels can be shown on the piano keys, some of which may help you visualize the mapping functions. Use the dialog's context menu to configure the key labels.

Output Notes

This command shows or hides the Output Notes bar, which dynamically displays the output notes on a virtual piano keyboard.

Threads

This command shows or hides the Threads dialog, which contains a dynamically refreshed list of all threads owned by the current instance of ChordEase, along with their base priority and how much time they've spent executing in kernel and user modes, in milliseconds. This dialog is intended for debugging only.

Record Player

This command displays the Record Player dialog. The dialog allows previously recorded performances to be played back, or exported as standard MIDI files.

Chord Dictionary

This command displays the Chord Dictionary dialog. The dialog lets you edit the chord dictionary via a tabular interface, which is typically more convenient than using a text editor. The dialog is modeless, so the rest of the application's user interface is accessible while the dialog is open.

Help

Help topics

Use this command to display the help's table of contents and default topic.

ChordEase on the Web

Use this command to launch your web browser to ChordEase's home page.

Check for updates

Use this command to determine if a more recent version of ChordEase is available. If a newer version is available, you'll be asked whether you want to download and install it. For more information, see Automatically check for updates.

Demo

Use this command to run the demo. The demo lets you try out ChordEase, even if you don't have a MIDI instrument. The demo loads an example song and begins playing it. You should hear the chords of the song, along with a metronome click. If not, make sure the volume is turned up on your computer, and on your audio equipment if any. Otherwise see below.

The demo also displays the piano dialog. To play notes, left-click the keys within the piano dialog. Alternatively, you can play notes via the letter keys on your computer keyboard. Play only the white keys at first. The notes you hear are not necessarily the same as the notes you play. This isn't a bug, it's the whole point of ChordEase! Your notes are being translated to fit the song's chord progression.

The demo uses the Microsoft GS Wavetable Synth, which is built into Windows. This software synth is normally the first MIDI output device, with a device index of zero. If it has a different device index, the demo won't work, unless you change the output port for each part. Use the MIDI devices bar to see what output devices are available and what indices they have. If the Microsoft synth isn't listed at all, it may have been removed or disabled, in which case you'll need a MIDI instrument.

There may be significant latency, i.e. delay between pressing a key and hearing the corresponding note. This is the fault of the Microsoft synth, and it shouldn't occur when a proper MIDI instrument is used.

About

Use this command to display ChordEase's copyleft notice, version number, and license.

Options

Chart

This Options dialog page contains preferences related to the chart view. To display the Options dialog, use Edit/Options or Shift+O. To reset all options to their default states, press the Reset All button.

Measures per line

This is the number of measures shown per line in the chart view. It may be convenient to show fewer measures per line in order to avoid horizontal scrolling, e.g. if the measures are very wide due to a large font or many chords per measure.

Font

This button lets you select the font used in the chart view. Pressing the button displays a common font dialog. Select the desired chart font and press OK. The change doesn't take effect until you exit the options dialog by pressing OK again.

Default font

This button resets the chart view font to a system default. The change doesn't take effect until you exit the options dialog by pressing OK.

Record

This Options dialog page contains preferences related to recording.

Always record

This setting enables or disables the continuous recording feature. Normally, recordings are explicitly started via the record command. However if this setting is enabled, ChordEase automatically starts recording as soon as it's launched, and continues to record until it exits. This prevents performances from being accidentally lost due to operator error. Because recording is automatic, the user is not prompted for the file names of the recordings. Instead, the file names are generated automatically from the song title, date and time, just as if prompt for filename were unchecked. The recording files are saved in the record output folder. The performance is automatically broken up into songs: opening a new song closes the current recording and begins a new one. Note that if continuous recording is enabled, the Record command is superfluous and gives the error message "Locked to always record."

Prompt for filename

This setting determines whether the record command prompts the user for a filename. If it's checked, the record command displays a file dialog, which allows the user to specify the file name and folder for the recording. If it's unchecked, the file name is generated automatically from the song title, date and time, and the recording files are saved in the record output folder. Unchecking this option enables "one touch" recording, i.e. the record command starts recording immediately. Note that if always record is enabled, filename prompting is implicitly disabled.

Buffer size

This is the size of the record buffer, in events. The default value should be adequate for most scenarios. If you wish to increase the buffer size, note that each event occupies 16 bytes, so the amount of memory required equals the buffer size in events × 16.

MIDI file resolution

This is the timing resolution of the output MIDI file, in pulses per quarter note (PPQ). Higher values allow more precision for capturing the rhythmic subtleties of performances. The default value of 960 should be compatible with most applications. The most commonly used PPQ values are integer multiples of 24. Note that this setting is unrelated to the patch PPQ setting.

When ChordEase saves a recording, in addition to creating a standard MIDI file, ChordEase also creates a .cemr file, which has much better timing resolution than a MIDI file. If the PPQ of a recorded MIDI file is later deemed unsatisfactory, the corresponding .cemr file can be converted to a new MIDI file with a different PPQ, via the Record Player dialog. The procedure is as follows:

  1. First set the desired PPQ in the Record Options.
  2. Display the Record Player dialog, via View/Record Player.
  3. Press the Open button, navigate to the recording's .cemr file, and press OK.
  4. Press the Export button, change the filename if needed, and press OK to save the recording as a MIDI file.

Fix duplicate notes

This setting determines whether duplicate notes are fixed when a recording is exported as a MIDI file. If you need to play your MIDI files with an instrument or software synth that can't handle duplicate notes, you should enable this setting. Enabling it only affects subsequent recordings and exports. To fix duplicate notes in an existing recording, first enable this setting and then reexport the recording, by opening its .cemr file in the Record Player and using the dialog's Export button.

Output folder

This is the destination folder for recording files if filename prompting is disabled, or continuous recording is enabled. By default, it's a subfolder called Recordings within the application data folder. To specify a different location, left-click the Custom radio button, and then either type the desired path in the edit box, or press the Browse button to display a folder dialog, navigate to the desired folder, and press OK.

Other

This Options dialog page contains miscellaneous preferences.

Automatically check for updates

This option determines whether ChordEase automatically checks for updates when it launches. If a newer version is available, you will be prompted with the message "A newer version of ChordEase is available. Do you want to download and install it?" The options are as follows:

YesDownload and installThe newer version is downloaded and installed.
NoSkip this versionThe newer version is NOT downloaded, and no further notifications are given for this version, though you'll continue to be notified of subsequent versions.
LaterDefer the updateThe newer version is NOT downloaded, but you'll be notified about it again the next time you launch ChordEase.

To disable automatically checking for updates, uncheck this option. Note that automatic checking costs you nothing in terms of performance, because it's done from a worker thread. Regardless of whether automatic checking is enabled, you can always manually check for a newer version via Check for Updates.

ChordEase must exit before it can be reinstalled. The update procedure attempts to close ChordEase, however if there's an unsaved document, the update stalls until you respond to the "Save changes" dialog. In this case a console window will be visible, repeatedly displaying the message "Waiting for ChordEase to exit...".

Show tooltips

This option enables or disables tooltips throughout the entire application. The only exception is toolbar tooltips, which are always shown.

Application data folder

This option lets you customize the location of the folder in which ChordEase expects to find its data files, including the chord dictionary and the current patch. The default location depends on whether you're using the installed or portable version of ChordEase. For the installed version, it's a subfolder called ChordEase within your profile's local AppData folder, e.g. C:\Users\foo\AppData\Local\ChordEase, where foo is a placeholder for your user name. For the portable version, it's the folder that contains the ChordEase executable. To specify a different location, left-click the Custom radio button, and then either type the desired path in the edit box, or press the Browse button to display a folder dialog, navigate to the desired folder, and press OK.

If you change the location of the data folder, you must copy the chord dictionary (ChordDictionary.txt) to the new location, otherwise the next time you run ChordEase it will display a file not found error for the dictionary, and will be unable to read song files. You should also copy the current patch (ChordEasePatch.ini) to avoid losing your settings. Also note that the record output folder defaults to a subfolder of the data folder. Consequently if you relocate the data folder, you may also be relocating the record output folder.

Dialogs

Chord Dictionary

This dialog lets you edit the chord dictionary, using a tabular interface. To display the dialog, use the View/Chord Dictionary command. Each row defines a chord type, by associating a unique chord symbol with a scale and mode, along with other properties, as shown in the table below. All the usual editing commands are supported, including unlimited undo/redo. The chord types can also be reordered by dragging and dropping one or more rows.

NameThe chord symbol to define.
ScaleThe scale to associate with this chord symbol.
ModeThe mode to associate with this chord symbol.
Comp AThe chord's primary spelling for comping, as a comma-separated list of chord tone numbers, each of which ranges from 1 to 7, e.g. 1,3,5,7. The list can contain from zero to seven tones, though triads and tetrachords are typical. Spaces can be used as separators instead of commas.
Comp BThe chord's secondary spelling. This variation typically substitutes one or more tensions for chord tones, e.g. 2,3,5,6.
Alias OfWhich chord type this symbol is an alias of, or "None" if it's not an alias.

To rename a chord type, select the corresponding row and then left-click the chord name, or press F2; alternatively you can select Rename from the dialog's Edit menu or context menu. To edit a chord type's other properties, left-click the property to display a popup drop list or edit box. After making the desired change, save it by pressing Enter, or by left-clicking outside of the popup control. You can also press Tab or Shift+Tab to save your change and then proceed to the next or previous column. To cancel an edit, press Esc.

It's often useful to define multiple symbols for a given chord type, e.g. maj7 and M7 for a major seventh chord. The additional symbols are aliases. A chord type and its aliases form a group, the members of which stay synchronized with each other; any change made to the properties of one member is automatically propagated to the others. To create a new alias for a chord type, copy and paste it, and then rename the copy. To convert an existing chord type into an alias, left-click its Alias Of property, and then select the desired chord type from the drop list.

You can use any symbols you like, so long as every symbol is unique, but remember that songs are restricted to the chord symbols defined in the dictionary. If you edit the dictionary while a song is open, and you attempt to undefine a symbol used by the song or its undo history, you will get an error message.

The chord types can be sorted via the dialog's Edit/Sort submenu, but note that the sort commands reorder the dictionary itself, as opposed to merely changing its presentation. Consequently you should avoid using the sort commands if you've put effort into a custom ordering.

You can have multiple chord dictionaries providing different definitions for the same chord types, and seamlessly switch between dictionaries while performing; see chord substitution for details. When it's set up correctly, the names of your chord dictionaries appear in the dialog's Subs menu.

Chord Properties

This modal dialog lets you edit the properties of an existing chord, including its duration, root, type, and bass note. First select the desired chord in the chart view, and then display the dialog by selecting Properties from the chart view's context menu. Adjust the properties as desired, and then press OK to save your changes. The dialog is identical to the Insert Chord dialog, except that the insert type is disabled. A chord's root, type, and bass note can also be changed via the Chord bar.

Insert Chord

This modal dialog lets you specify the properties of a chord to be inserted into the song. To display the dialog, use Edit/Insert or the Insert key, or select Insert from the chart view's context menu. Adjust the properties as desired, and then press OK to insert the specified chord. The dialog remembers your previous settings.

RootThe root of the chord.
TypeThe chord type. The available types depend on the chord dictionary.
BassThe chord's optional bass note. The default setting is "Root" which means the bass note is the same as the root.
DurationThe duration of the chord, specified in either measures or beats.
Insert typeWhether to insert the chord before or after the current position. After is easier for entering multiple chords in a row.

MIDI Assignments

This dialog lists all MIDI targets to which controllers are currently assigned. Assignments from the patch and from all the parts, which are normally accessed separately, are merged. The resulting master list of assignments can be useful for debugging your MIDI setup. Assignments can be deleted by selecting one or more rows and then choosing Delete from the context menu, or pressing the Delete key. Assignments can also be edited by selecting one or more rows and then choosing Properties from the context menu, or pressing Alt+Enter. To display the dialog, use MIDI/Assignments.

The input to output MIDI note mappings for each part are not included in this dialog, because they have their own dialog; see below.

Properties

This dialog lets you edit the properties of one or more MIDI assignments. It's particularly useful for changing the port and/or channel of multiple MIDI assignments at once. Any changes you make in the dialog are applied to all of the selected assignments. If the selected assignments currently have different values for a given property, that property will be blank in the dialog. To display the dialog, choose Properties from the MIDI Assignments dialog's context menu, or press Alt+Enter.

MIDI Devices

This dockable bar contains two lists, one showing all available MIDI input devices, and the other showing all available MIDI output devices. Inputs are on the left, and outputs are on the right. The device indices shown in these lists are synonymous with ports in ChordEase. Throughout ChordEase, input ports correspond to MIDI input devices, and output ports correspond to MIDI output devices.

Device indices are zero-origin, i.e. the first device is always device zero, unlike MIDI channel numbers which start at one. Devices indices are unique and contiguous within each list, but not between lists, i.e. there can be an input device zero and an output device zero.

The device lists are updated automatically when MIDI devices are inserted or removed. In this case Windows will renumber the MIDI devices as needed to keep them contiguous, and ChordEase will attempt to similarly renumber all ports referenced in the current patch. However if a device that was in use is removed, ChordEase will be unable to correct the situation, and will issue a warning.

To show or hide the bar, use MIDI/Devices.

MIDI Input

This dockable bar displays input MIDI events in real time, which can be useful for debugging your MIDI setup. By default, the bar shows all input received from all MIDI input devices. To filter the data, so that only a subset of the events are shown, use the drop lists above the column headings. The filtering is non-destructive, i.e. if you remove a filter, any events that were rejected by that filter reappear. Each column's filter is initially set to a wildcard (shown as an asterisk), which means filtering is disabled for that column. Multiple filters can be applied simultaneously, in which case an event must pass all filters to be displayed. To reset all filters to wildcards and show all events, select Reset Filters on the bar's context menu.

For example, to only see events on channel 10, select 10 in the Chan column's drop list. To only see Note On messages, select "Note On" in the Message column's drop list. Note that for the Message column, two special wildcards are available: "Channel *" shows only channel messages, and "System *" shows only system messages.

To pause the display, set the Timestamp column's drop list to "Pause" or select Pause in the bar's context menu. Events continue to accumulate while paused, so you will not miss any. To resume the display, set the Timestamp column's drop list back to * or reselect Pause in the context menu. The context menu also allows you to clear the event history, via Clear History. It's also possible to show controllers by name instead of only by number, again via the context menu.

To show or hide the bar, use MIDI/Input. To display output events, use the MIDI Output bar, which works similarly.

MIDI Note Mappings

This dialog lists the input to output note mapping for each part. The note mappings from all the parts, which are normally accessed separately, are merged. The resulting master list of note mappings can be useful for debugging your MIDI setup. Each row corresponds to a part. For each part, the input port, input channel, input zone, output port, and output channel are displayed, along with the mapping functions. These properties can be edited by selecting one or more rows and then choosing Properties from the context menu, or pressing Alt+Enter. To display the dialog, use MIDI/Note Mappings.

Properties

This dialog lets you edit certain properties of one or more parts. It's particularly useful for changing the port and/or channel settings of multiple parts at once. Any changes you make in the dialog are applied to all of the selected parts. If the selected parts currently have different values for a given property, that property will be blank in the dialog. To display the dialog, choose Properties from the MIDI Note Mappings dialog's context menu, or press Alt+Enter. You can also get to this dialog directly from the Parts List.

MIDI Output

This dockable bar displays output MIDI events in real time, which can be useful for debugging your MIDI setup. By default, the bar shows all output sent to all MIDI output devices. For event filtering and other details, see the MIDI Input bar. To show or hide the bar, use MIDI/Output.

Output Notes

This dockable bar dynamically displays the output notes on a virtual piano keyboard. To show or hide the bar, use View/Output Notes. The piano keyboard's orientation can be horizontal or vertical, depending on whether the bar is docked horizontally or vertically. This bar is useful for examining the behavior of the mapping functions. To monitor MIDI output messages other than notes, e.g. controllers, use the MIDI Output bar instead. To display input notes, use the Piano dialog.

By default, output notes are displayed for all ports and all channels, except the port and channel used by the metronome. To restrict the display to a particular port and/or channel, use the port and channel submenus of the bar's context menu. The context menu also lets you to change the size of the piano keyboard, show or hide the key labels, rotate the key labels, and enable or disable the display of metronome notes.

Context menu

PortTo restrict the display to a particular port, select the corresponding submenu item, or select "All" to show notes from all ports.
ChannelTo restrict the display to a particular channel, select the corresponding submenu item, or select "All" to show notes from all channels.
Piano SizeTo resize the keyboard, select a standard piano size from the submenu, or select "Custom" to specify a custom size.
Key LabelsNoneNo labels are shown on the piano keys.
Output NotesDisplay output note names (including octave) on the piano keys. If the labels are too small, rotate them via the Rotate Labels option (see below).
IntervalsShow intervals on the piano keys, relative to the root of the current chord. The labels are updated dynamically as the chords change.
Scale TonesShow scale tones on the piano keys, using numbers from 1 to 7. Keys that aren't scale tones are left blank. The labels are updated dynamically as the chords change.
Rotate LabelsRotate the key labels 90° counterclockwise, so that they're vertical instead of horizontal. This may allow the labels to use a larger font. This option is only supported when the bar is docked horizontally.
MetronomeDisplay metronome notes, which are normally hidden.
Color VelocitiesColor the keys to show the velocities of the output notes. The colors range spectrally from blue (softest) to red (loudest).

Path List

This dialog lets you enter and edit a list of file paths. To insert a path at the current selection, press the Insert button, or the Insert key. A file dialog will be displayed. Navigate to the desired file, select it, and press OK. To delete a path from the list, select it and then press the Delete button, or the Delete key. The list also can be reordered by selecting and dragging paths one by one. When you're done, press OK to save your changes, or Cancel to abandon them.

This dialog is currently used to edit the list of chord dictionary paths for chord substitution.

Piano

This modeless dialog is a virtual piano that lets you play ChordEase via your computer's mouse or keyboard. This allows you to try out ChordEase even if you don't have a MIDI instrument. To display the dialog, use View/Piano. To play notes, left-click the piano keys, or press letter keys on your computer keyboard. Note that the letter keys only play notes while the piano dialog has focus. If you don't hear any output, ChordEase may be configured incorrectly; you may want to try the demo. To see if output notes are being generated, show the output notes bar and/or the MIDI output bar. The dialog will also display notes played on an external MIDI device, provided the notes are transmitted on the appropriate port and channel. The dialog has various settings, which are described below.

Port

This drop list lets you select which input port notes will be sent to. This setting, in combination with the piano's channel setting (see below) determines which part(s) will receive the notes. Since multiple parts can have the same input port and channel, it's possible to layer parts, i.e. play several parts at once. Keyboard splits are also possible if the part input zones are configured correctly. For a list of the ports, channels, and zones used by all parts, see the MIDI note mappings dialog.

Channel

This drop list lets you select which input channel notes will be sent to. This setting, in combination with the piano's port setting (see above) determines which part(s) will receive the notes.

Start note

This drop list lets you specify the virtual piano's lowest note. In combination with the key count setting (see below), it lets you emulate the layout of any standard or nonstandard piano. Standard layouts can also be selected via the context menu's Piano Size submenu.

Key count

This drop list lets you specify how many keys the virtual piano should have. It's usually used in combination with the start note setting (see above).

Velocity

This slider sets the velocity of notes played via the piano dialog.

Context menu

Piano SizeThis submenu lets you select a standard piano size. For nonstandard sizes, use the start note and key count drop lists.
Key LabelsNoneNo labels are shown on the piano keys.
ShortcutsThe labels show keyboard shortcuts, i.e. the correspondence between your computer keyboard and the piano keys.
Input NotesThe labels show the names of the input notes, i.e. for each key, what note is input to the mapping function. The labels are unaffected by chord changes, transposition, etc.
Output NotesThe labels show the names of the output notes, i.e. for each key, what note is output by the mapping function. The labels vary depending on the current chord scale, and are updated dynamically as the chords change. The labels are also affected by various settings including global transposition and the part's input transposition. Note that a forward slash shown on a key indicates that the key is mapped to the comp function.
IntervalsThe labels show the intervals created by each piano key, e.g. relative to the root of the current chord. The labels are updated dynamically, as described above.
Scale TonesThe labels show the scale tones created by each piano key, as numbers from 1 to 7. Keys that don't generate a scale tone are left blank. The labels are updated dynamically, as described above.
VelocitiesThe labels show the velocities of the input notes numerically.
Key ColorsInput NotesColor the keys to show which input notes are currently on.
VelocitiesColor the keys to show the velocities of the input notes. The colors range spectrally from blue (softest) to red (loudest).
Scale TonesColor the keys so that scale tones are linearly mapped to a rainbow palette: 1=red, 2=orange, 3=yellow, 4=green, 5=blue, 6=indigo, 7=violet.
ThirdsColor the keys so that scale tones are mapped to a rainbow palette in thirds: 1=red, 3=orange, 5=yellow, 7=green, 2=blue, 4=indigo, 6=violet.
Rotate LabelsThis setting rotates the key labels 90° counterclockwise, so that they're vertical instead of horizontal. This may allow the labels to use a larger font.
Show OctavesThis setting determines whether note names displayed on the piano keys include the octave number. Including the octave lengthens the labels, which may reduce the font size and thereby make the labels harder to read. Only key label types that show notes are affected.
Vertical KeyboardThis setting rotates the entire piano keyboard 90° counterclockwise, so that it's oriented vertically instead of horizontally. This may allow the key labels to use a larger font. The Rotate Labels setting has no effect in this case.

Record Player

This dialog lets you play back previously recorded performances. To display the dialog, use View/Record Player. If you've just completed a recording, the dialog opens it automatically. Otherwise you must select a recording, via the dialog's Open button. To listen to the recording, press the Play button. Press it again to pause playback. To stop playback and rewind to the beginning, press the Stop button. To skip around within the recording, use the position slider.

The dialog opens .cemr files, which the record function creates in addition to standard MIDI files. The .cemr file includes the port and channel associations, i.e. for each part, which port and channel it was output to. This is in contrast to standard MIDI files, which are incapable of storing port associations. If the recording was made with a MIDI setup involving multiple output devices, playing the resulting MIDI file can give unexpected results: parts that were originally on different devices may share the same timbre, and may no longer be distinguishable. The .cemr file avoids this problem. When a .cemr file is played back, assuming the output MIDI setup is identical to what it was when the recording was made, the performance should sound exactly as it originally did.

This dialog also lets you modify the port and channel associations of an existing recording. This facilitates playing back a recording through a different MIDI setup. It's recommended to stop playback first, otherwise stuck notes may occur. To change a port or channel, left-click the port or channel within the list control, and type a new value in the popup edit box. The part names can similarly be edited, and individual parts can be enabled or disabled using the checkboxes. After changing the part information, you can save the edited recording via the Save As button. You can also export the recording as a new standard MIDI file, via the Export button. The export feature allows you to create a MIDI file with a different resolution than the original MIDI file had.

Section List

This dialog displays a list of all sections in the current song. The list lets you view the name, start position, length, and repeat count of each section. To show the dialog, use Edit/Section/List or select Section/List from the chart view's context menu. In addition to sections you explicitly create, the list may also include implicit sections. For example, if two explicit sections are separated by one or more chords, the space between the two sections appears in the list as an implicit section. To edit section properties, use the Section Properties dialog.

Section Properties

This dialog lets you edit the properties of an existing section, including its start position, length, repeat count, and name. To edit a section's properties, position the chart view's cursor anywhere within the section, and use Edit/Section/Properties or select Section/Properties from the chart view's context menu.

Start

This is the section's start position, in measures, beats, and ticks. Note that measures and beats are one-origin, i.e. the beginning of the song is 1:1:0. The start position is rounded as needed so that section begins on a chord boundary.

Length

This is the section's length, in measures, beats, and ticks. The length is rounded as needed so that section ends on a chord boundary.

Repeat

This is the section's repeat count. A section with a repeat count greater than zero loops the specified number of times, unless it's exited prematurely via the Next Section command. A section with a repeat count of zero loops forever, or until it's exited via the Next Section command.

Name

This is the section's optional name. The name appears in the Section List dialog but is otherwise unused.

Song Properties

This dialog lets you edit certain properties of the current song, including its time signature and key signature. To display the dialog, use the File/Properties command. You can also specify optional properties such as tempo, transposition to a different key, and comments. If tempo is zero, the song is played at the current tempo specified by the patch.

If the song's time signature is changed, the chord durations are automatically scaled, in an attempt to preserve each chord's length in terms of measures. This scaling can potentially cause rounding errors, because ChordEase uses integers to represent chord durations. If applying the specified time signature to the current song would cause rounding errors, a warning is displayed. In some cases the user is offered a different but equivalent time signature that would avoid the rounding errors.

For example, converting a song from 4/4 to 3/4 involves scaling each chord's duration by 75%. If the song doesn't contain split measures, the scaling can be accomplished without rounding errors. However if the song does contain split measures, since each half-measure chord has a duration of 2 in 4/4, and 75% of 2 isn't an integer, rounding errors would result. In this case the user is given the opportunity to convert to 6/8 instead, which achieves the same effect as 3/4 but avoids the rounding errors.

Loose ends

Scales

ChordEase supports a fixed set of scales, shown in the table below. All chord types listed in the chord dictionary must be defined in terms of these scales. User-defined scales are not currently supported. Only heptatonic (7-note) scales are allowed, due to design constraints. Workarounds are available for certain non-heptatonic scales, as follows: The whole tone scale is approximated via the Locrian mode of the Neapolitan major, and the symmetric diminished is approximated by removing one note, yielding the "asymmetric diminished".

NameNotes (in C)
MAJORC D E F G A B
MELODIC_MINORC D Eb F G A B
HARMONIC_MINORC D Eb F G Ab B
HARMONIC_MAJORC D E F G Ab B
NEAPOLITAN_MAJORC Db Eb F G A B
NEAPOLITAN_MINORC Db Eb F G Ab B
DOUBLE_HARMONICC Db E F G Ab B
ASYM_DIMINISHEDC Eb F Gb Ab A B

Modes

#Name
IIONIAN
IIDORIAN
IIIPHRYGIAN
IVLYDIAN
VMIXOLYDIAN
VIAEOLIAN
VIILOCRIAN

Chord types

ChordEase can support any set of chord types. All chord symbols in a song must be defined in the chord dictionary, which is a user-editable plain text file called ChordDictionary.txt. The chord dictionary shipped with ChordEase defines the most commonly used chord symbols, and should be adequate for most users. Advanced users may want to add new symbols, or redefine existing symbols, by associating them with different scales and modes. Before editing the chord dictionary, you should familiarize yourself with its format.

Chord dictionary

The chord dictionary defines the chord types permitted in a song. Each line of the dictionary is either a definition, or an alias. A definition must contain the following items, all separated by one or more spaces:

  1. The chord symbol to be defined.
  2. The name of the scale to use for this chord type.
  3. The name of the mode to use for this chord type.
  4. The two chord variations (A and B) to use for comping. Each variation consists of a comma-separated list of chord tone numbers, enclosed in square brackets. Valid chord tone numbers range from 1 to 7.

The names of the scales and modes must be upper case, with words separated by underscores. Here's a sample dictionary definition, defining the symbol maj7 as the Lydian mode of the major scale:

maj7 MAJOR LYDIAN [1,3,5,7] [2,3,5,6]

Aliases let you equate a chord symbol with another chord symbol. An alias consists of a chord symbol, followed by an equals sign, followed by the chord symbol to which the alias refers. These items must be separated by one or more spaces. Note that forward references are not permitted, i.e. an alias can't refer to a symbol that hasn't been defined yet. Here's a sample alias, defining the symbol M7 to be the same as maj7:

M7 = maj7

Chord symbols may consist of any number of non-whitespace printable characters. Spaces are not permitted within chord symbols. To create an empty symbol, use the special keyword NULL. The empty symbol is normally reserved for the major triad.

Editing the chord dictionary

The recommended way to edit the chord dictionary is via the chord dictionary dialog, because it provides a convenient tabular interface and restricts you to syntactically correct choices. It's also possible to edit the chord dictionary with an ordinary text editor such as Notepad, but you should familiarize yourself with the dictionary's syntax before attempting this, and you may encounter permissions problems as explained below.

The chord dictionary normally resides in same folder as the ChordEase application, and if you're using the installed version of ChordEase, you may lack sufficient privileges to modify the dictionary file. This can be solved by running as administrator, but if that isn't an option, you may instead override the default dictionary, by copying ChordDictionary.txt from the application folder to your user profile. The profile folder path is typically C:\Users\foo\AppData\Roaming\ChordEase, where foo is a placeholder for your user name. The copy of ChordDictionary.txt in your profile can be modified as needed, and will take precedence so long as you continue to log in as the same user.

Another option which may be more convenient is to change the location of the application data folder to something other than your profile, but in this case be careful to also copy ChordEasePatch.ini, otherwise you'll lose your default patch settings. Note that ChordEase only reads the chord dictionary once during initialization, so if you edit it while ChordEase is running, your changes won't take effect until you exit and restart ChordEase. All of these complications can be avoided by using the chord dictionary dialog instead of directly editing the dictionary file.

Chord substitution

Chord substitution is supported by switching between two or more chord dictionaries. A chord dictionary defines the set of chord types that a song can use, by mapping each type to a scale and mode. Substituting a different dictionary alters the harmonic content of all your songs at once, by redefining their chord types. Substitution can be remotely controlled via MIDI, so it's possible to switch dictionaries seamlessly during a performance. For example you might have one dictionary for playing melodies and another dictionary for soloing, with a third dictionary containing unorthodox definitions for playing "out".

Note that for chord substitution to be effective, all chord dictionaries must define the same chord symbols in the same order, otherwise switching performance will be greatly reduced, timing of notes may be disrupted, and audible glitches may result.

To set up basic chord substition, use the following steps:

  1. Create a primary chord dictionary, by saving the current chord dictionary under a new name (e.g. "primary chord dictionary.txt") via the Chord Dictionary dialog's File/Save As command. The destination can be any folder you like, but the application data folder would be a good choice.
  2. Create an alternate chord dictionary, by editing the definitions of one or more chord symbols. Be careful to avoid renaming or reordering the symbols themselves. When you're done, save the chord dictionary under another name (e.g. "alternate chord dictionary.txt") as explained above, ideally in the same folder as your primary dictionary.
  3. Use the Subs/Edit command to bring up the Substitute Chord Dictionaries dialog. This dialog lets you create a list of the paths to your chord dictionaries. Use this dialog's Insert command to insert your primary chord dictionary. Then similarly insert your alternate chord dictionary. Note that the path list can be reordered via dragging. Press OK to save your changes. If you get a message warning that your chord dictionaries are incompatible, it's because you violated the requirement that they must define the same chord symbols in the same order.

The names of your chord dictionaries should now appear as items in the Chord Dictionary dialog's Subs menu. To switch to a different chord dictionary, simply select its corresponding menu item. For seamless switching, it's recommended to assign a MIDI controller to the Chord Dictionary MIDI target.

Song file format

A song file consists of tokens, separated by whitespace (spaces, tabs or newlines). There are two mandatory tokens which must appear in order at the beginning of a song: the time signature, and the key signature. These must be followed by one or more chord tokens. A chord token consists of three mandatory elements (chord duration, root, type) and one optional element (bass note). A chord token must not contain any embedded spaces.

DurationAn integer specifying the duration of the chord in beats.
RootThe root of the chord, as a note name, e.g. C, Bb, F#, etc.
TypeThe chord type, e.g. maj7, -7, etc. Only chord types defined in the chord dictionary are permitted.
BassA slash followed by a bass note name, e.g. /E. This element is optional. The bass function only respects alternate bass notes if the slash chords setting is enabled.

The simplest possible song file is given below. It's in 4/4 time and the key of C, and consists of a single measure of C major.

4/4 C
4C

Here's a slightly more complicated song. It's in 4/4 time and the key of Bb, and consists of II, V, I, followed by a minor turnaround back into II. Note that the final measure is split into two chords. The total length is four measures or 16 beats.

4/4 Bb
4C-7 4F7 4Bbmaj7 2D-7b5 2G7b9

Comments are permitted, though only comments at the start of the file are guaranteed to be preserved. The single-line comment delimiter is two consecutive slashes. Property assignments may also be specified at the start of the file, after the time and key signatures but before the first chord token. Currently the only properties supported are T (tempo) and K (transposition to the specified key). Here's an example showing comments, property assignments, and an alternate bass note.

// this song specifies a tempo of 140
// and transposition to the key of Eb
4/4 Bb T=140 K=Eb
4C-7 4F7/C 4Bbmaj7 2D-7b5 2G7b9

Songs can contain sections, which repeat a specific number of times or indefinitely. A section is defined by enclosing one or more chords in square brackets. The brackets must be separated from the chord symbol(s) they enclose by one or more spaces. The section's closing bracket can optionally specify a repeat count. The repeat count must be an integer greater than zero, and must immediately follow the closing bracket. If no repeat count is specified, the section is repeated indefinitely, or until the section is advanced via the Next Section command. Here's an example that demonstrates sections. The first section repeats indefinitely, whereas the second section repeats twice.

4/4 C
[ 4D-7 4G7 ]
[ 4E-7b5 4A7b9 ]2

Sections can optionally be named. To create a named section, the section's opening bracket must be immediately preceded by the section name, which must not contain any spaces. The following example demonstrates named sections.

4/4 C
vamp[ 4D-7 4G7 ]
break[ 4E-7b5 4A7b9 ]2

Durations

Several ChordEase parameters are relative durations that scale with tempo, just like note durations. The unit of a duration is whole notes, i.e. a duration of one equals a whole note. Durations are usually expressed as fractions of a whole note. Duration parameters include harmonic anticipation, arpeggio period, and bass approach length.

A special type of combo box is provided for specifying durations. Common values are selectable via the drop list. Alternatively a fraction or a floating-point value can be typed in the edit box. Triplet values can be specified by preceding the fraction with the letter T, e.g. T1/4 for a triplet quarter note. Dotted notation is also supported: the first dot increases the value by half, a second dot increases it by an additional quarter, and so on. For example 1/2. equals 3/4, 1/2.. equals 7/8, etc. Negative values may be accepted, depending on the parameter. For triplet values, the minus sign must precede the T, e.g. −T1/4. The table below lists some common durations.

1/1whole
T1/1triplet whole (2/3)
1/2half
T1/2triplet half (1/3)
1/4quarter
T1/4triplet quarter (1/6)
1/8eighth
T1/8triplet eighth (1/12)
1/16sixteenth
T1/16triplet sixteenth (1/24)
1/32thirty-second
T1/32triplet thirty-second (1/48)
1/64sixty-fourth

Durations are displayed as fractions if they can be represented using a denominator that's a reasonably small power of two, otherwise they're shown in floating-point notation. Durations can be specified very precisely, but the resulting actual durations may be considerably less precise; the achievable resolution depends on the current tempo and PPQ.

Duplicate notes

Duplicates notes describes a situation where multiple instances of the exact same MIDI note exist simultaneously on a single channel of an instrument. This situation can easily arise when using ChordEase, and some instruments don't handle it correctly, resulting in glitches due to notes being cut off prematurely. To determine whether an instrument handles duplicates notes correctly, use the following procedure:

  1. Select the Lead mapping function.
  2. Make sure the Non-diatonic notes setting is "Allow".
  3. Make sure the current scale is something other than C major.
  4. Find a pair of adjacent keys (one white, one black) that map to the same note. The easiest way to do this is by playing the chromatic scale. If you don't find any duplicates, transpose to a different key signature and try again.
  5. Depress both keys simultaneously, and then quickly release one but not the other. If the note gets cut off, the instrument isn't handling duplicate notes correctly.

It's recommended to only use instruments that handle duplicate notes correctly. However it is possible to fix duplicate notes when exporting a recording to a MIDI file. This is useful if you need to play your MIDI files with an instrument or software synth that can't handle duplicate notes.

Duplicate notes are properly handled via reference counting. The instrument maintains a counter for each MIDI note, which reflects how many instances of that note currently exist. Note On commands increment the appropriate count, Note Off commands decrement it, and the note is sustained until its count drops to zero.

Latency

Latency is the time interval between the performer triggering a note on an instrument and hearing the audio corresponding to that note. The expected latency of a typical ChordEase setup is between 5 and 8 milliseconds. By far the largest share of this latency is incurred by the MIDI hardware protocol itself, which takes between 2 and 3 ms to send a single message. Because each note has to take a roundtrip from the instrument to the computer and then back to the instrument, the latency resulting from MIDI hardware alone is in the range of 4 to 6 ms.

Most modern MIDI interfaces use USB, and this may add an additional delay in both directions, depending on the USB driver's implementation. The MIDI instrument may also introduce delay between pressing a key and sending the corresponding Note On command, and between receiving a Note On command and playing the corresponding audio. ChordEase also has computational overhead, but it's comparatively small and doesn't contribute significantly to latency, provided ChordEase is running on a modern multi-core CPU, with minimal competition from other applications. Here are some things you can do to reduce latency:

Note that using a software synthesizer as your output MIDI device may increase latency, sometimes drastically. The Microsoft GS Wavetable Synth that ships with Windows is particularly bad: it exhibits latency on the order of 250 milliseconds, which makes it unusable except for testing.

Relative intervals

−12octavebelow
−11major seventh
−10minor seventh
−9major sixth
−8minor sixth
−7perfect fifth
−6tritone
−5perfect fourth
−4major third
−3minor third
−2major second
−1minor second
0unisonN/A
1minor secondabove
2major second
3minor third
4major third
5perfect fourth
6tritone
7perfect fifth
8minor sixth
9major sixth
10minor seventh
11major seventh
12octave

MIDI target list

Patch Targets
NameTypeDescription
TempoFaderTempo, in beats per minute
Tempo MultipleFaderTempo multiplier
Tap TempoMomentarySet tempo via tapping
TransposeFaderKey transposition, in semitones
Lead-inFaderLead-in length, in measures
Tag LengthFaderLength of tag, in measures
Tag RepeatFaderTag repeat count, or zero for indefinite
Metro. EnableToggleEnable metronome
Metro. VolumeFaderOutput volume, or -1 if none
PlayTogglePlay or stop song
PauseTogglePause or resume song
RewindMomentaryRewind to start of song
RepeatToggleRepeat song
Next SectionMomentaryContinue to next section
Next ChordMomentarySkip forward to next chord
Previous ChordMomentarySkip backward to previous chord
Song PositionFaderSong position, in chords
Start TagMomentaryStart a tag ending on the current measure
Chord RootFaderCurrent chord's root
Chord TypeFaderCurrent chord's type
Chord BassFaderCurrent chord's bass note if any
Chord ScaleFaderCurrent chord's scale
Chord ModeFaderCurrent chord's mode
Chord DictionaryFaderSelect substitute chord dictionary
Part Targets
NameTypeDescription
Part EnableToggleEnable this part
Part FunctionFaderPart mapping function
Input Zone LowFaderLowest note of input range
Input Zone HighFaderHighest note of input range
Input TransposeFaderInput transposition, in semitones
Input Vel. OffsetFaderInput note velocity offset
Input Non-DiatonicFaderHandling for non-diatonic input notes
Input CC NoteFaderNote input via continuous controller
Input CC Note VelocityFaderVelocity of note input via continuous controller
Output PatchFaderPatch number, or -1 if none
Output VolumeFaderOutput volume, or -1 if none
Output Harm. AnticipationFaderHarmonic anticipation, as fraction of whole note
Output Fix Held NotesToggleCorrect held notes that become non-diatonic
Bank Select MSBFaderMost significant byte of bank select, or -1 if none
Bank Select LSBFaderLeast significant byte of bank select, or -1 if none
Harmonizer IntervalFaderGeneric harmony interval, in diatonic steps
Harmonizer Omit MelodyToggleTrue if harmonizer should omit melody note
Harmonizer CrossingToggleTrue if harmony can cross melody
Harmonizer Static MinFaderMinimum static harmony interval, in semitones
Harmonizer Static MaxFaderMaximum static harmony interval, in semitones
Harmonizer Chord DegreeFaderConstrain harmony to chord of this diatonic degree
Harmonizer Chord SizeFaderConstrain harmony to chord of this size, in notes
Comp VoicingFaderChord voicing type
Comp VariationFaderChord variation scheme
Chord Resets AlternationToggleTrue if chord change resets variant alternation
Comp Arp PeriodFaderTime between arpeggio notes, in whole notes
Comp Arp Period QuantFaderTime between arpeggio notes, in quantized units
Comp Arp OrderFaderArpeggio note order
Comp Arp RepeatToggleTrue if arpeggio repeats; false for one-shot
Comp Arp AdaptToggleAdapt arpeggio to chord changes
Bass Lowest NoteFaderLowest bass note allowed
Bass Slash ChordsToggleRespect slash chord bass notes
Bass Approach LengthFaderFixed bass approach length, as fraction of whole note
Bass Approach TriggerMomentaryTrigger bass approach to target chord
Bass Target AlignmentFaderAlignment of triggered bass approach target, in measures
Auto PlayTogglePlay part automatically
Auto WindowFaderStart of auto-play pitch window
Auto VelocityFaderAuto-play note velocity

Shortcuts

Ctrl+ASelect AllSelect the entire document
Ctrl+CCopyCopy the selection and put it on the Clipboard
Ctrl+EEdit Song TextEdit the current song as text
Ctrl+GGo ToJump to specified song position
Ctrl+LMIDI LearnLearn MIDI target assignments
Ctrl+MTap TempoSet tempo via tapping
Ctrl+NNewCreate a new song
Ctrl+Shift+NNew PatchCreate a new patch
Ctrl+OOpenOpen an existing song
Shift+OEdit optionsEdit the options
Ctrl+Shift+OOpen PatchOpen an existing patch
Ctrl+PPrintPrint the active document
Ctrl+RRecordRecord performance
Ctrl+SSaveSave the current song
Ctrl+Shift+SSaveSave the current patch
Ctrl+TStart TagStart a tag ending on the current measure
Ctrl+VPasteInsert Clipboard contents
Ctrl+BackspaceRepeatRepeat song
Alt+BackspaceUndoUndo the last action
DeleteDeleteDelete the selected items
Shift+DeleteCutCut the selection and put it on the Clipboard
Shift+EscPanicReset all MIDI notes
F2RenameRename the selected item
F6Next PaneSwitch to the next window pane
Shift+F6Previous PaneSwitch back to the previous window pane
Ctrl+F6Next DocumentActivate the next MDI child window
Ctrl+Shift+F6Previous DocumentActivate the previous MDI child window
F7Next ChordSkip forward to next chord
Shift+F7Previous ChordSkip backward to previous chord
InsertInsertInsert a new item
Ctrl+InsertCopyCopy the selection and put it on the Clipboard
Shift+InsertPasteInsert Clipboard contents
Ctrl+EnterNext SectionContinue to next section
Alt+EnterEdit propertiesEdit properties of selected items
Ctrl+SpacePlayPlay or stop song
Shift+SpacePausePause or resume song
Ctrl+WRewindRewind to start of song
Ctrl+XCutCut the selection and put it on the Clipboard
Ctrl+YRedoRedo the previously undone action
Ctrl+ZUndoUndo the last action
Ctrl+TabNext DocumentActivate the next MDI child window
Ctrl+Shift+TabPrevious DocumentActivate the previous MDI child window