ABC plus
The ABC data format was originally designed for monophonic folksongs. ABC plus is an extension of the data format to accomodate polyphonic music, although the representation is not completely generalized for complex graphical notation.
- http://abcplus.sourceforge.net ABC plus homepage
- http://abcplus.sourceforge.net/abcplus_en-1.2.0-pre4.pdf Tutorial on ABC plus
- http://en.wikipedia.org/wiki/Abc_notation Wikipedia page about ABC
Beethoven Sonata Example in ABC plus
The following music is a fairly complex example of ABC Plus musical data. Compare a graphical version of the original edition (edited by Paul Dukas and published in 1915):
Here is graphical notation resulting from sending the data found below into the program abcm2ps:
Note that dynamics were not encoded in the example (and therefore were not printed in the above PDF file). ABC plus allows for up to two voices on a staff (original ABC format only allowed for one voice on a staff).
As a comparison, here is the same music entered into a general-purpose music notation editor which allows more control over layout (such as stem direction and slur placement):
The ABC data starts with a header:
X: 1 T: Piano Sonata no. 1 in F minor, mvmt. 1 C: Ludwig van Beethoven %%abc-version 2.0 %%gracespace 0 6 6 %%notespacingfactor 2 %%scale 0.7 %%continueall 1 %%barnumbers 0 L: 1/4 M: 2/2 Q: "Allegro" 1/2=120 %%staves {1 2} V: 1 clef=treble V: 2 clef=bass K: Ab
Traditional ABC header entries start with a single capital letter followed by a colon. ABC plus extensions are listed as ABC comments which start with the % symbol.
Header marker |
Meaning |
---|---|
X | Start of music |
T | Title |
C | Composer |
L | Basic rhythmic unit |
M | Meter |
Q | Tempo marking |
V | Voice information |
K | (Initial) Key signature |
Following the header is the musical data. In this case each line represents one measure of music for a particular staff in the score. The left- and right-hand staves are interleaved, with [V:1] being the top staff in the system and [V:2] being the bottom staff. The layout of the data by measures is arbitrary, and any segmentation of the left and right hand parts can be done. For example all of staff one's data could be given and then all of staff two's data, as in the lilypond example.
Here is the pick-up measure and first full measure of the piece:
[V:1] .C | [V:2] z | [V:1] .F.A.c.f [I:setbarnb 2]| [V:2] z4 |
The line:
[V:1] .C |
contains a staccato note on middle C. The period before the "C" represent the staccato, and the upper-case C represent middle C. The z in the second line is a quarter-note rest.
The line:
[V:1] .F.A.c.f [I:setbarnb 2]|
Contains four quarter notes on pitches F3 A3 C4 and F4, all of which have staccatos. The string [I:setbarnb 2] is an embedded header entry which causes the next barline to be labeled as measure 2 (because the first measure is a pickup and should be labeled as measure 0). The fourth line above (z4) is a whole-note rest.
Look at the automatically generated notation output for the following data to see what the codes mean in terms of notation.
X: 1 T: Piano Sonata no. 1 in F minor, mvmt. 1 C: Ludwig van Beethoven %%abc-version 2.0 %%gracespace 0 6 6 %%notespacingfactor 2 %%scale 0.7 %%continueall 1 %%barnumbers 0 L: 1/4 M: 2/2 Q: "Allegro" 1/2=120 %%staves {1 2} V: 1 clef=treble V: 2 clef=bass K: Ab [V:1] .C | [V:2] z | [V:1] .F.A.c.f [I:setbarnb 2]| [V:2] z4 | [V:1] (a3/(3g//f//=e//.f)z | [V:2] z[F,A,C][F,A,C][F,A,C] | [V:1] .G.c.=e.g | [V:2] [=E,G,B,C]zz2 | [V:1] (b3/(3a//g//f//.g)z | [V:2] z[=E,G,B,C][E,G,B,C][E,G,B,C] | [V:1] {/c}(a3/(3g//f//=e//.f)z | [V:2] z[F,A,C][F,A,C][F,A,C] | [V:1] {/c}(b3/(3a//g//f//.g)z | [V:2] z[G,B,=E][G,B,E][G,B,E] | [V:1] !arpeggio![c2f2a2c'2](b/a/g/f/) | [V:2] z[A,CF]z[B,DG] | [V:1] {=e/f/g/}(fe)!fermata!zz | [V:2] z[CG]!fermata!z.G,, | [V:1] z4 | [V:2] .C,._E,.G,.C | [V:1] z4 | [V:2] (E3/(3=D//C//=B,//.C).C | [V:1] zz/ (3(e//_d//c//.d).d & A4- | [V:2] [C4F4] | [V:1] d4- & A3/(3(B//A//G//).A.A | [V:2] [B,4F4] | [V:1] d3/(3(e//d//c//.d).d & G4 | [V:2] [B,4E4] | [V:1] zz/ (3(d//c//=B//.c).c & A4 | [V:2] [A,4E4] | [V:1] (cB2A) & F4 | [V:2] D2=D2 | [V:1] .G(ed)c- | [V:2] Ezz([CE] | [V:1] (cB2A | [V:2] [D2F2])[=D2F2] | [V:1] G)([Ee][_D_d][Cc])- | [V:2] Ezz([C,E,] | [V:1] ([Cc][B,2B2][A,A] | [V:2] [D,2F,2])[=D,2F,2] | [V:1] [G,G])zz(_f | [V:2] E,/E/E,/E/ E,/E/E,/E/ | [V:1] edBG) | [V:2] E,/E/E,/E/ E,/E/E,/E/ | [V:1] (_F>E.A)(_f | [V:2] (D2C)x & E,E,E,/E/E,/E/ | [V:1] edBG) | [V:2] E,/E/E,/E/ E,/E/E,/E/ | [V:1] (_F>E.A)(_f | [V:2] (D2C)x & E,E,E,/E/E,/E/ | [V:1] edBG) | [V:2] E,/E/E,/E/ D/E/D/E/ | [V:1] z/ (G/B/A/) z/ (=A/c/B/) | [V:2] C/E/C/E/ G,/E/G,/E/ | [V:1] z/ (=B/d/c/) z/ (=d/a/d/) | [V:2] A,/E/A,/E/ F,/=D/A,/D/ | [V:1] ezz/ (=d/a/d/) | [V:2] E,/E/G,/E/ F,/=D/A,/D/ | [V:1] ezz/ (g/_f'/g/) | [V:2] E,/E/G,/E/ _D,/B,/_F,/B,/ | [V:1] azz/ (g/_f'/g/) | [V:2] C,/A,/E,/A,/ D,/B,/_F,/B,/ | [V:1] z/ (g/b/a/) z/ (=a/c'/b/) | [V:2] C,/A,/E,/A,/ G,,/G,/E,/G,/ | [V:1] z/ (=b/d'/c'/) z/ (c'/e'/d'/) | [V:2] A,,/A,/E,/A,/ B,,/B,/E,/B,/ | [V:1] z/ (=d'/f'/e'/ _d'/c'/b/a/ | [V:2] C,E,2A, | [V:1] g/f/e/d/ c/B/A/G/) | [V:2] D,F,2B, | [V:1] (F/E/=D/E/ D/E/D/E/ | [V:2] E,A,2C | [V:1] =D/E/F/E/ D/E/F/E/) | [V:2] (_DB,G,D,) | [V:1] z/ (a/f'/e'/ d'/c'/b/a/ | [V:2] C,,E,,2A,, | [V:1] g/f/e/d/ c/B/A/G/ | [V:2] D,,F,,2B,, | [V:1] F/E/D/C/[K:clef=bass] B,/A,/G,/F,/ | [V:2] E,,A,,2C, | [V:1] E,/F,/G,/A,/ B,/C/D/B,/ | [V:2] (D,B,,G,,E,,) | [V:1] A,)[K:clef=treble]z{/=D}(_c3/B/) | [V:2] A,,A,z.[=D,F,A,_C] | [V:1] A2(G3/e/) | [V:2] z.[E,A,=C]z.[E,B,D] | [V:1] (eA){/=D}(_c3/B/) | [V:2] z.[A,C]z.[=D,F,A,_C] | [V:1] A2(G3/e/) | [V:2] z.[E,A,=C]z.[E,B,D] | [V:1] (eA){/=d}(_c'3/b/) | [V:2] z.[A,C][K:clef=treble]z.[=DFA_c] | [V:1] a2(g3/e'/) | [V:2] z.[EA=c]z.[EBd] | [V:1] [d4g4e'4] | [V:2] [A,4B,4D4E4G4] | [V:1] [cea]zz :|]|: [V:2] [A,CEA]zz :|]|: [V:1] .E | [V:2] [K:clef=bass]z | [V:1] .A.c.e.a [I:setbarnb 50]| [V:2] z4 | [V:1] (c'3/(3b//a//g//.a)z | [V:2] z[A,CE][A,CE][A,CE] | [V:1] {/d}(d'3/(3c'//b//=a//.b)z | [V:2] z[G,B,DE][G,B,DE][G,B,DE] | [V:1] .B.d.g.b | [V:2] z4 | [V:1] {/d}(d'3/(3c'//b//=a//.b)z | [V:2] z[G,B,D=E][G,B,DE][G,B,DE] | [V:1] {/d}(d'3/(3c'//b//=a//.b)z | [V:2] z[_G,B,D=E][G,B,DE][G,B,DE] | [V:1] =azz(_g | [V:2] F,/F/F,/F/ F,/F/F,/F/ | [V:1] fec=A) | [V:2] F,/F/F,/F/ F,/F/F,/F/ | [V:1] (_G>F.B)(_g | [V:2] (E2D)z & F,F,F,/F/F,/F/ | [V:1] fec=A) | [V:2] F,/F/F,/F/ F,/F/F,/F/ | [V:1] (_G>F.B)(_g | [V:2] (E2D)z & F,F,F,/F/F,/F/ | [V:1] fec=A) | [V:2] F,/F/F,/F/ E/F/E/F/ | [V:1] z/ (=A/c/B/) z/ (B/d/c/) | [V:2] D/F/D/F/ C/F/C/F/ | [V:1] z/ (c/e/d/) z/ (=B/=d/c/) | [V:2] B,/F/B,/F/ A,/^F/A,/F/ | [V:1] =Bzz(a | [V:2] G,/G/G,/G/ G,/G/G,/G/ | [V:1] gf=d=B) | [V:2] G,/G/G,/G/ G,/G/G,/G/ | [V:1] (A>G.c)(a | [V:2] (F2E)x & G,G,G,/G/G,/G/ | [V:1] gf=d=B) | [V:2] G,/G/G,/G/ G,/G/G,/G/ | [V:1] (A>G.c)F/=D/ | [V:2] (F2E)(A, & G,G,G,x | [V:1] F/=D/F/D/ F/D/F/D/ | [V:2] G,F,=D,=B,,) | [V:1] z(=Bc)z & F/=D/F/D/ E/C/E/C/ | [V:2] (A,,>G,,.C,)(_G, | [V:1] z4 & E/C/E/C/ E/C/E/C/ | [V:2] F,E,C,=A,,) | [V:1] z(=AB)z & E/C/E/C/ D/B,/D/B,/ | [V:2] (_G,,>F,,.B,,)(_F, | [V:1] z4 & D/B,/D/B,/ D/B,/D/B,/ | [V:2] E,D,B,,G,,) | [V:1] z2G2 & D/B,/D/B,/ D/B,/D/B,/ | [V:2] (_F,,E,,2)E,- | [V:1] z2A2 & C/A,/E/A,/ E/A,/E/A,/ | [V:2] E,C,2C,,- | [V:1] z2F2 & D/A,/D/A,/ D/A,/D/A,/ | [V:2] C,,D,,2D,- | [V:1] z2G2 & D/G,/D/G,/ D/G,/D/G,/ | [V:2] D,B,,2B,,,- | [V:1] z2=E2 & C/G,/C/G,/ C/G,/C/G,/ | [V:2] B,,,C,,2C,- | [V:1] z2F2 & A,/F,/C/F,/ C/F,/C/F,/ | [V:2] C,A,,2A,,, | [V:1] z2F2 & D/F,/D/F,/ D/F,/D/F,/ | [V:2] z(B,,,2B,,) | [V:1] =D/F,/[A,/D/F/]F,/ [A,/D/F/]F,/[A,/D/F/]F,/ | [V:2] z(=B,,,2=B,,) | [V:1] [G,C=E]zz(c | [V:2] C,,/C,/=E,/C,/ E,/C,/E,/C,/ | [V:1] .A)zz(f | [V:2] F,/C,/F,/C,/ F,/C,/A,/C,/ | [V:1] .=e)zz(c' | [V:2] G,/C,/G,/C,/ G,/C,/B,/C,/ | [V:1] .f)z([f2f'2] | [V:2] A,/C,/C/C,/ =B,/C,/=D/C,/ | [V:1] [=e=e'])zz(!trill!c{=Bc} | [V:2] C/C,/=E,/C,/ E,/C,/E,/C,/ | [V:1] .A).Az(!trill!f{=ef} | [V:2] F,/C,/F,/C,/ F,/C,/A,/C,/ | [V:1] .=e).ez(!trill!c'{=bc'} | [V:2] G,/C,/G,/C,/ G,/C,/B,/C,/ | [V:1] .f).fz([ff'] | [V:2] A,/C,/C/C,/ =B,/C,/=D/C,/ | [V:1] .[=e=e']).[ee']z([_d_d'] | [V:2] C/C,/C/C,/ B,/C,/B,/C,/ | [V:1] .[cc']).[cc']z([ff'] | [V:2] A,/C,/C/C,/ =B,/C,/=D/C,/ | [V:1] .[=e=e']).[ee']z([dd'] | [V:2] C/C,/C/C,/ _B,/C,/B,/C,/ | [V:1] .[cc']).[cc']z([ff'] | [V:2] A,/C,/C/C,/ =B,/C,/=D/C,/ | [V:1] .[=e=e'])zz2 | [V:2] (.C.C.C.C) | [V:1] z4 | [V:2] (.C.C.C.C) | [V:1] zz/ (3(A//_G//F//.G)z | [V:2] (.[CD].[CD].[CD].[CD]) | [V:1] zz/ (3(e'//d'//c'//.d')z | [V:2] (.[B,D].[B,D].[B,D].[B,D]) | [V:1] zz/ (3(F//=E//=D//.E)z | [V:2] (.[B,C].[B,C].[B,C].[B,C]) | [V:1] zz/ (3(d'//c'//=b//.c')z | [V:2] (.[A,C].[A,C].[A,C].[A,C]) | [V:1] zz/ (3(E//=D//C//.D)z | [V:2] (.[A,B,].[A,B,].[A,B,].[A,B,]) | [V:1] zz/ (3(c'//b//=a//z.b) | [V:2] (.[G,B,=E].[G,B,E].[G,B,E].[G,B,E]) | [V:1] .F.A.c.f | [V:2] [F,A,C]zz2 | [V:1] (a3/(3g//f//=e//.f)z | [V:2] z[F,A,C][F,A,C][F,A,C] | [V:1] .G.c.=e.g | [V:2] [=E,G,B,C]zz2 | [V:1] (b3/(3a//g//f//.g)z | [V:2] z[=E,G,B,C][E,G,B,C][E,G,B,C] | [V:1] {/c}(a3/(3g//f//=e//.f)z | [V:2] [F,2A,2C2]z2 | [V:1] {/c}(b3/(3a//g//f//.g)z | [V:2] [G,2B,2=E2]z2 | [V:1] !arpeggio![c2f2a2c'2](b/a/g/f/) | [V:2] [A,CF]z[B,DG]z | [V:1] {=e/f/g/}(f=e)!fermata!zz | [V:2] [CG]z!fermata!z.C, | [V:1] z4 | [V:2] .F,.A,.C.F[K:clef=treble] | [V:1] z4 | [V:2] (A3/(3G//F//=E//).F.F | [V:1] (b3/(3a//_g//f//.g).g | [V:2] [F4_G4] | [V:1] _g4- & zz/ (3_d//c//=B//.c.c | [V:2] [E4_G4] | [V:1] g3/(3(_g//f//=e//.f).f & c4- | [V:2] [E4=A4] | [V:1] f4 & c3/(3c//B//=A//.B.B | [V:2] [D4F4] | [V:1] zz/ (3(g//f//=e//)(fg & =B4 | [V:2] (F3=E) & =D4- | [V:1] a=ef=B) | [V:2] (FGAF) & D4 | [V:1] (c=efg | [V:2] (=EGFE & C4- | [V:1] a=ef=B | [V:2] FBAF)[K:clef=bass] & C2_D2 | [V:1] [=Ec])zz(d | [V:2] C,/C/C,/C/ C,/C/C,/C/ | [V:1] cBG=E) | [V:2] C,/C/C,/C/ C,/C/C,/C/ | [V:1] (D>C.F)(d' | [V:2] (B,2A,)z & C,C,C,/C/C,/C/ | [V:1] c'bg=e) | [V:2] C,/C/C,/C/ C,/C/C,/C/ | [V:1] (d>c.f)(d' | [V:2] (B,2A,)z & C,C,C,/C/C,/C/ | [V:1] c'bg=e) | [V:2] C,/C/C,/C/ B,/C/B,/C/ | [V:1] z/ (=e/g/f/) z/ (f/a/g/) | [V:2] A,/F/C/F/ G,/=E/B,/E/ | [V:1] z/ (g/b/a/) z/ (=b/f'/b/) | [V:2] F,/C/A,/C/ D,/=B,/F,/B,/ | [V:1] c'zz/ (=b/f'/b/) | [V:2] C,/C/=E,/C/ D,/=B,/F,/B,/ | [V:1] c'zz/ (=e/d'/e/) | [V:2] C,/C/=E,/C/ _B,,/G,/D,/G,/ | [V:1] fzz/ (=e/d'/e/) | [V:2] A,,/F,/C,/F,/ B,,/G,/D,/G,/ | [V:1] z/ (=e/g/f/) z/ (f/a/g/) | [V:2] A,,/F,/C,/F,/ =E,,/=E,/C,/E,/ | [V:1] z/ (g/b/a/) z/ (=a/c'/b/) | [V:2] F,,/F,/C,/F,/ G,,/G,/C,/G,/ | [V:1] z/ (c'/f'/e'/ d'/c'/b/a/ | [V:2] A,,C,2F, | [V:1] g/f/e/d/ c/B/A/G/) | [V:2] B,,D,2G, | [V:1] (F/=E/D/C/ =B,/C/B,/C/ | [V:2] C,F,2A, | [V:1] =B,/C/D/C/ B,/C/D/C/) | [V:2] (B,G,=E,B,,) | [V:1] z/ (c'/f'/e'/ d'/c'/b/a/ | [V:2] A,,C,2F, | [V:1] g/f/e/d/ c/B/A/G/ | [V:2] B,,D,2G, | [V:1] F/=E/D/C/ =B,/C/B,/C/) | [V:2] C,F,2A, | [V:1] (=B,/C/D/C/ C/_B,/A,/G,/ | [V:2] zC,,C,,C,, | [V:1] F,)z{/=B,}(A3/G/ | [V:2] F,,F,z.[D,F,A,=B,] | [V:1] F2)(=E3/c/) | [V:2] z.[C,F,A,C]z.[C,G,_B,] | [V:1] (cF){/=B,}(A3/G/ | [V:2] z.[F,A,]z.[D,F,A,=B,] | [V:1] F2)(=E3/c/) | [V:2] z.[C,F,A,C]z.[C,G,_B,] | [V:1] (cF){/B}(a3/g/ | [V:2] z.[F,A,][K:clef=treble]z.[DFA=B] | [V:1] f2)(=e3/c'/) | [V:2] z.[CFAc]z[K:clef=bass].[B,CG] | [V:1] ([c4_e4c'4] | [V:2] ([=A,4C4F4] | [V:1] [Bdf])zzz/ [B/d/b/] | [V:2] [B,DF])zzz/ [B,/D/F/] | [V:1] ([B4d4b4] | [V:2] ([G,4B,4E4] | [V:1] [Ace])zz.[Aca] | [V:2] [A,CE])zz.[F,D] | [V:1] .[GBd].[GBg].[FAc].[FAf] | [V:2] .[G,D].[=E,C].[F,C].[D,D] | [V:1] .[FGdf]z.[=EGBc=e]z | [V:2] .[B,,D,G,B,]z.[C,=E,G,C]z | [V:1] .[FAcf]zz :|] [V:2] .[F,,A,,C,F,]zz :|]