Players of guitar-like instruments need to know which notes to play to produce a desired chord or scale. For any chord, there are a number of ways of playing it, and the most appropriate depends on the desired sound and the surrounding chords. Most players use lists of common chords as a starting point and then modify them by hand.
This becomes less convenient when you want an unusual chord, or you're playing an instrument with an uncommon tuning. An automated tool could suggest ways of playing chords based on a few simple heuristics: a player can reach N notes at once spread over N positions on the neck of the instrument, and can pick 1 to N contiguous strings to play.
Features that would be useful in chordtool:
- The ability to specify instrument tunings and heuristic parameters such as maximum reach, number of fingers used by the player, minimum number of notes to constitute a useful chords, and so on.
- Convenient input format for chords. If I enter "Gm7b5sus4/Db", it should be able to decompose that into "G", with the modifiers "m", "7", "b5", "sus4" and the root note "Db". Each modifier would be represented internally by a list of the notes relative to the root that it turns on and off.
- The ability to perform basic music-theoretical operations, such as showing the notes in a chord or transposing a set of chords into a new key. (This might be worth generalising to a Matlab-style domain-specific language for music.)
- Tab-style and neck displays. The tool should show multiple ways of playing a chord in order of preference.
- "Find me the chord closest to this one." If I'm trying to shift rapidly between two chords, I'm likely to prefer to only move one finger, even if the resulting chord isn't as "easy" as it could be.
chords.py is my partial implementation of this; it's able to automatically find how to play chords for a few instruments. Fretboard is a PalmOS tool that knows about more instruments and chords, but doesn't try to find hand positions.