ChordPro Implementation: Chords
In ChordPro files, lyrics are interspersed with chords between
brackets [
and ]
. Strictly speaking it doesn’t matter what you put
between the []
, it is put on top of the syllable whatever it is. But
there are situations where it does matter: for chord diagrams and
transpositions.
In general, ChordPro will try to interpret what is between the
brackets as a valid chord name, unless the first character is an
asterisk, *
. In that case ChordPro will remove the asterisk and
treat everything else as a text that will be printed just like the
chord names. This can be used to add small annotations, e.g. [*Coda]
and [*Rit.]
.
ChordPro can parse chord names in two modes: strict and relaxed.
In strict mode, enabled by default, chord names are only recognized if they consist of
- a root note, e.g.
C
,F#
orBb
. - a qualifier, e.g.
m
(minor),aug
(augmented), or empty. - an extension, which must be one of the extension names built-in.
In relaxed mode, the same rules apply for root note and qualifier,
but the extension is not required to be known. You are free to make up
your own. In relaxed mode, [Coda]
would be a valid chord name: root
C
plus extension oda
.
Many ChordPro implementations (formatters) provide chord diagrams at the end of a song, using a built-in list of known chords and fingerings. Clearly, this can only work when the chords in the ChordPro file can be recognized, either in strict mode, or in relaxed mode.
For transposition it is slightly easier. For example, when you’re transposing from A to C, you can replace everything chord-like that starts with ‘A’ by ‘C’ and whatever follows the ‘A’. ‘Am7’ becomes ‘Cm7’ and ‘Alpha’ would become ‘Clpha’, who cares?
Although the ChordPro File Format Specification deliberately doesn’t say anything about valid chords, it is advised to stick to commonly accepted chord names. The ChordPro Reference Implementation supports at least:
- A, B, C, …, G (European/Dutch), H (German)
- I, II, III, …, VII (Roman)
- 1, 2, 3, …, 7 (Nashville)
b
for flat, and#
for sharp- Common qualifiers like
m
,dim
, etc. - Common extensions like
7
,alt
, etc.
ChordPro Implementation: Notes
If enabled in the config, ChordPro will understand lowercase root-only chords to mean note names. Note names will be treated (shown, transposed) exactly as chords, but will not account for diagrams.
This can be used for example for intro’s that start with some single notes before the chords:
{comment: Intro [f] [g] [a] [E] }
ChordPro Implementation: Understandable versus known
An often made mistake is to confuse understandable with known.
For example, in the default configuration for guitar, the chord Bbm
is understood to be the root key B♭
and qualifier m
for minor.
Likewise, Besm
and B♭m
are understood to mean the same chord, and
so are Aism
and A#m
and A♯m
.
When it comes to transposing and transcoding, ChordPro knows how to handle
these.
Root key names and equivalents are defined in the
notes
section
of the config files.
However, when a chord diagram must be drawn, the chord must be known
by name.
In the default configuration a chord with name Bbm
is defined, so it is
known and has the information to draw the chord diagram. The chord
named Besm
is not defined, hence it is not known, and ChordPro can not
draw a diagram for it.
Chords are defined in the
chords
section
of the config files, usually in an instrument specific config file,
e.g. guitar
or ukulele
.
ChordPro Implementation: Chord Extensions
The following chord extensions are currently built-in.
Extensions for major chords
Note that ^
is an alternative for maj
.
2
3
4
5
6
69
7
7-5
7#5 7#9 7#9#5 7#9b5 7#9#11
7b5 7b9 7b9#5 7b9#9 7b9#11 7b9b13 7b9b5 7b9sus 7b13 7b13sus
7-9 7-9#11 7-9#5 7-9#9 7-9-13 7-9-5 7-9sus
711
7#11
7-13 7-13sus
7sus 7susadd3
7+
7alt
9
9+
9#5
9b5
9-5
9sus
9add6
maj7 maj711 maj7#11 maj13 maj7#5 maj7sus2 maj7sus4
^7 ^711 ^7#11 ^7#5 ^7sus2 ^7sus4
maj9 maj911
^9 ^911
^13
^9#11
11
911
9#11
13
13#11
13#9
13b9
alt
add2 add4 add9
sus2 sus4 sus9
6sus2 6sus4
7sus2 7sus4
13sus2 13sus4
Extensions for minor chords
A minus sign -
may be used instead of the m
to denote a minor
chord.
m#5
-#5
m11
-11
m6
-6
m69
-69
m7b5
-7b5
m7-5
-7-5
mmaj7
-maj7
mmaj9
-maj9
m9maj7
-9maj7
m9^7
-9^7
madd9
-add9
mb6
-b6
m#7
-#7
msus4 msus9
-sus4 -sus9
m7sus4
-7sus4
Other extensions
aug +
dim 0
dim7
h h7
h9