# The ABC Notation Thread



## Mr. Big Noodles (Dec 9, 2014)

Alright, here's a little tutorial on ABC notation. I taught myself this stuff a couple of months back, and I hope that this tool can benefit this message board. Before I begin and for the sake of convenience, let me put some useful links at the top of this thread.

abcnotation.com | home - Official ABC website with tune search, tutorials, links to resources, and standard reference.

CONCERTINA.net - Tune-O-Tron: Converter - Basic online converter.

abc Converter - Online converter with a few more utilities, including tab, MIDI, and MusicXML output.

EasyABC - Open source downloadable editor with plenty of utilities.

GM1 Sound Set - General MIDI Level 1 Sound Set (GM1). Useful for breaking up the monotony of the &#8220;Acoustic Grand Piano&#8221; (MIDI program 1) sound that most playback programs default to.


Read and enjoy!


----------



## Mr. Big Noodles (Dec 9, 2014)

What is ABC notation? An excellent question; I'm glad you asked! ABC is an open-source plain text code developed for the transmission of music over the internet. It began as a shorthand used by musicians in the traditional/folk music circle in the pre-internet days, but was later adapted by the venerable Chris Walshaw (abcnotation.com | home) as a means of coding and rendering electronic scores. The nice thing about ABC is its portability and ease of use. If you're familiar with LilyPond you'll notice some similarities, but you don't need to be anal-retentive in order to use it. Let's have a look at a bit of code:


```
X:17
T:Blackberry Blossom
C:Fiddlin' Arthur Smith (1898-1971)
M:4/4
L:1/8
Q:1/4=120
R:Hornpipe
K:G
"G"GABG "D"FGAF|"C"EFGE "G"D4|"C"EFGE "G"D2GA|"Em/G"B2B2"D7"cBAB|
"G"GABG "D"FGAF|"C"EFGE "G"D4|"C"EFGE "G"D2GA|BG"D"AG- "G"G4:|
|:"Em"B2eB de3|edBA BAGE|B2eB de3|edBA "B7"B4|
"Em"(3Bde gb aged|"B7"(3^ABd (3ABd "Em"B=AGE|"G"DEBA "C"GDED|"G"BG"D"AG- "G"G4:|
```
This is what a typical tune will look like when written in ABC. If you know what's going on, you could actually sightread this. Some do. However, the strength of this tool comes through with the help of a conversion utility. Copy-paste that code into the field in this link:

CONCERTINA.net - Tune-O-Tron: Converter

After clicking the "Submit" button, you should see a page with a low-resolution image of a musical score:







Pretty nifty, huh? A higher resolution PDF copy can also be obtained on the same page. Now that we've seen the basic capabilities of ABC, let's examine how all that jargon works.

====================

An ABC file consists of two parts: a header and a body. The header contains a number of fields formatted as a letter followed by a colon. Different fields receive different input. Here is the header from the tune we just did. I will explain what each field means.


```
X:17
T:Blackberry Blossom
C:Fiddlin' Arthur Smith (1898-1971)
M:4/4
L:1/8
Q:1/4=120
R:Hornpipe
K:G
```
"X:" is the file reference number. What follows this field does not really matter, but it must be populated if you want things to work; when you're writing, you'll probably put "X:1" most of the time. This field tells the software that the file is starting. "X:" must always be the first field in the header.

"T:" is the title field. Really simply, whatever you put in "T:" will be rendered at the top of the tune as text. If you put a second "T:", it will be rendered as a subtitle.

"C:" is the composer field. Like "T:", whatever you enter in this field will be rendered on the score as text, but over in the top right hand corner of the page.

"M:" is the meter field. This field determines what the time signature displays as. In this example we're using 4/4, but you can do anything as long as it's numerical, including irrational time signatures (try plugging in 4/7, for example). This field only affects how the time signature is displayed and does not determine how the measures are barred. That is taken care of in the tune body. Common time ("M:C") and cut time ("M:C|") abbreviations are also available.

"L:" is the unit note length. This is the standard duration of a note in the tune. If I have "L:1/8", any pitch that I enter will be the duration of an eighth note. If I have "L:1/16", any pitch that I enter will be the duration of a sixteenth note. L:1/32 is a thirty-second note, L:1/4 is quarter note, L:1/2 is half note, and L:1/1 is whole note. Capiche? We will revisit rhythm in the tune body; this is just to set the default duration.

"Q:" is the tempo field. Really simply, this sets the tempo for the tune. I could have put "Q:120" in our file, but I chose "Q:1/4=120" instead. They produce the same result in this file, but "Q:120" allows the program to make the decision on which duration receives the click. You have a bit more control with the "Q:1/4=120" format. I could also do "Q:1/8=240" for example, and the tempo marking would display an eighth note at 240 BPM. Oddly enough, this field is proportional. If you want, you can enter "Q:2/8=120" and it would read the same as "Q:1/4=120". This comes in handy with compound meters, where "Q:3/8=100" would display as a dotted quarter note at 100 BPM.

"R:" is the rhythm field. This serves to tell the performer the style of the piece. Some programs have a playback utility that will be affected by certain input into this field. Since ABC was conceived with folk and traditional music in mind and with Irish traditional music in particular, those programs typically respond to names for Irish dances: "Reel" and "Hornpipe" will get you something approaching swing playback, while "Jig", "Slip Jig" and "Slide" will interpret this notation...






... with this playback:






"K:" is the key field. This sets the key signature and must be the last field in the header. This tells the program to start the tune body. All of the standard major/minor keys are available as well as some non-standard key signatures, but let's only tackle the standard ones for now. For keys with a natural tonic, just plug the letter-note name. If it's flat (such as D&#9837; major), then you need to follow the letter with "b" ("Db"). If it's sharp, then follow it with "#". For major keys, you don't need to put anything except for the name of the tonic. "K:G" is shorthand for G major. Any other mode requires further qualification. If we want G minor, the corresponding input is "K:Gmin" or "K:Gm". Actually, you can write "K:Gminor" if you want, but the program only reads the mode name to three characters. Examples:

C# locrian = K:C#loc
B&#9837; phrygian = K:Bbphr
F aeolian = K:Faeo
E dorian = K:Edor
E&#9837; mixolydian = K:Ebmix
C&#9837; ionian = K:Cbion
F# lydian = K:F#lyd

Every header must start with X: and end with K:. All of the other fields are optional. There are more fields, but the ones I demonstrated here are the ones that I find most useful.


----------



## Mr. Big Noodles (Dec 9, 2014)

Let's have a look at the tune body now. The body is where the actual music happens.

*Pitch* - Pitch is notated with a more practical variant of Helmholtz pitch notation. Middle C (C4) is written "C". The C an octave above that (C5) is written "c". A C major scale starting from C4 and going up an octave to C5 is written thus: CDEFGABc

If we want to go to the next octave (C6), then we need to add an '. Here is a C major scale going from C5 to C6: cdefgabc'
To keep going up through the octaves, keep adding '. From C6 to C8: c'd'e'f'g'a'b'c''d''e''f''g''a''b''c'''

Lower octaves are accomplished with the similar application of ,. From C4 descending to C3: CB,A,G,F,E,D,C,
From C3 to C2: C,B,,A,,G,,F,,E,,D,,C,,

Pitches will conform to the key signature unless otherwise specified (unlike in LilyPond). If you have "K" and you want a C natural, you need to write =C. Accidentals are as follow:

Natural =
Flat _
Sharp ^

Accidentals last through to the barline, just like written music.

*Rhythm* - All durations are proportional to "L:", the default duration. As I said before, if "L:1/8", then all of the notes you enter will be eighth notes, and if "L:1/16", then all of the notes you enter will be sixteenth notes. You can change this in the body by typing a number after the note.


```
X:1
L:1/8
K:C
E E2 E3 E4 E6 E8
```
What this does is multiply the default duration (L by whatever number you put next to the note. Durations may also be halved with /.

c/ c3/ c//

By the way, c and c2/ are the same exact thing.

The last modifiers are > and <. These halve the duration of one note in a group of two, and give it to the other note. Examples:

C>E C<E

Ties are handled with -. Example: C3-C or C3- C

Tuplets are notated as such:
(2AB
(3ABc
(4ABcd
(5ABcde

And so on. You can fiddle around inside the tuplet a bit, but not much.

(3A>Bc

*Beaming* - Beaming is handled by the use of spaces, which break beams. Compare the following measures:


```
X:1
M:3/4
L:1/8
K:Am
dcBA^GA|dc BA ^GA|dcB A^GA|d c B A ^G A|]
```
*Rests* - Rests behave the same way as other notes. z is the input for a rest, and different durations can be had like so: z//, z/, z2, z3, z3/, z4, z6, z8, etc. Invisible rests are also possible, using x.

*Barlines, Repeats, and Endings* - To insert a barline, type |. Double barline is ||. You can even do triple, quadruple, quintuple barlines and beyond. Not that there is any use for it, but the program allows you to do this: |||||||||||||

Dotted barline :
The double barline that goes at the end |]

Repeat signs are handled with these symbols:

Start of repeat section |:
Repeat :|
First and second endings [1notes here:|[2
Multiple endings [1,2,3notes here:|[4,5,6

There are little shortcuts here and there. For example, :||: can be written as ::

*System Breaks* - To begin a new staff system, all you need to do is hit enter/return and start writing a new line of music.

*Chord Symbols* - Chord symbols are engraved above a note by placing the symbol in quotes before the note where it takes effect. Examples:

"Cmaj7" "D9" "F#ø7/A" "B°7" "G5" "Fm"


```
X:1
T:Giant Steps
C:John Coltrane
M:4/4
L:1/4
K:C
"Bmaj7"^f2 "D7"d2|"Gmaj7"B2 "Bb7"G>_B-|"Ebmaj7"B4|"Am7"=B>A- "D7"A2|
"Gmaj7"d2 "Bb7"_B2|"Ebmaj7"G2 "F#7"^D>^F-|"Bmaj7"F4|"Fm7"G2 "Bb7"=F>_B-|
"Ebmaj7"B4|"Am7"=B2 "D7"A>d-|"Gmaj7"d4|"C#m7"^d2 "F#7"^c>^f-|
"Bmaj7"f4|"Fm7"g2 "Bb7"=f>_b-|"Ebmaj7"b4|"C#m7"^f>f- "F#7"f2:|
```
Also, any text can be engraved above the staff by using quotation marks in the same manner. You might want to do this for instructions such as &#8220;D.S. al coda&#8221; or something similar (and you can generate a segno with !segno!).

*Chords* - Next I&#8217;ll talk about is having two or more pitches simultaneously on the same stem. For this, you write the pitches you want and enclose them in brackets, like so:

[CGce]

To alter the duration of the chord, put the modifier after the brackets.

[CGce]4

*Fields Within the Tune Body* - Fields may be changed within the tune by enclosing the field within brackets, like so: [Km] [M:7/8] [L:1/16]. This is usually done to change meter or key, but most fields may be used within the body of a tune.


```
X:20
T:Ice House Schottische #1
C:Nigel Eaton
M:4/4
L:1/8
K:A
|:"A"cde2 cdef|eABc "E7"dcBA|"A"c2(3ccc "D"d3c|"E7"BABd "(A)"c2"E"e2|
"A"cde2 cdef|eABc "E7"dcBA|"A"c2(3ccc "D"d3c|"E7"BABd "(A)"c2"E"e2:|
[K:Amin]|:"Am"Aedc A2AG|"F"A2A2 ABcd|"C"e2dc "Am"A2AE|"Dm"dcAG "Am7"A2G2|
"Am"Aedc A2AG|"F"A2A2 ABcd|"C"e2dc "Am"A2AE|"Dm"dcAG "Am"A4:|
```
Fields may also be changed by putting them between system breaks, but I prefer the brackets. Notice that I have to put a backslash at the end of the first line of the body to join the next measure to the first staff system.


```
X:1
T:Nitzanim
T:Nitzanim Niru Baaretz
O:Israel
M:2/4
L:1/8
K:Bm
|:"Bm"Bf fa|"Em"gf/e/ "Bm"fd|"Em"e2 e2|"G"Be "A"ef|"Bm"d/c/d- de-|\
M:3/4
"A"ec"Bm"B4:|
M:2/4
|:"Bm"fb b2|fb b2|"D"a^g/a/ "E"bg|"F#m"f2 f2|"Bm"Bf fa|"Em"gf/e/ "Bm"f2|"Bm"d/c/d- "(G)"dd|"A"ed/c/ "Bm"B2:|
```
Occasionally, you need both the brackets and the between-the-lines methods to make the code do what you want it to do.


----------



## Mr. Big Noodles (Dec 9, 2014)

I hope this is enough to get you guys started. We&#8217;ve just scratched the surface here; while this notation is primarily meant for single-line melodies for instruments, ABC is pretty flexible and can handle multiple staves, polyphony, and lyrics for starters. Here are a few samples of some of the things that are possible with a bit of know-how.

(Heads up: Some of these won't work in the online converters. I used EasyABC to write these.)


```
X:1
T:Invention No.1
C:J.S. Bach (1685-1750)
M:C
L:1/16
K:C
Q:100
%%MIDI program 6
%%staves {1 2}
V:1
zCDE FDEC G2c2!uppermordent!B2c2|dGAB cABG d2g2!uppermordent!f2g2|eagf egfa gfed cedf|
edcB AcBd cBAG ^FAGB|A2D2 !mordent!c3d BAG^F EGFA|GBAc Bdce dB/c/dg !uppermordent!B2AG|G2z2z4 zGAB cABG|
!uppermordent!^F2 z2z4 zABc dBcA|B2z2z4 zdcB AcBd|c2z2z4 zedc Bd^ce|d2^c2d2e2 f2A2=B2c2|
d2^F2^G2A2 B2c2d4-|dE^F^G AFGE edce dcBd|ca^gb aefd ^Gfed c2BA|
Aagf egfa g8-|gefg afge f8-|fgfe dfeg f8-|fdef gefd e8-|
ecde fdec defg afge|fgab c'abg c'2g2 e2dc|c_BAG FAGB A=BcE DcFB|[cGE]16|]
V:2
[K:clef=bass]z8 zC,D,E, F,D,E,C,|G,2G,,2z4 zG,A,B, CA,B,G,|C2B,2C2D2 E2G,2A,2B,2|
C2E,2^F,2G,2 A,2B,2C4-|CD,E,^F, G,E,F,D, G,2B,,2C,2D,2|E,2^F,2G,2E,2 B,,3C, D,2D,,2|zG,,A,,B,, C,A,,B,,G,, D,2G,2^F,2G,2|
A,D,E,^F, G,E,F,D, A,2D2C2D2|G,[K:clef=treble]GFE DFEG F2E2F2D2|EAGF EGFA G2F2G2E2|F_BAG FAGB AGFE DFEG|
FEDC B,DCE D[K:clef=bass]CB,A, ^G,B,A,C|B,2E,2 !lowermordent!D3E CB,A,=G, ^F,A,^G,B,|A,CB,D CEDF E2A,2E2E,2|
A,2A,,2z4 zEDC B,D^CE|D8- DA,B,C DB,CA,|B,8- B,DCB, A,CB,D|C8- CG,A,_B, CA,B,G,|
A,2_B,2A,2G,2 F,2D2C2B,2|A,2F2E2D2 ED,E,F, G,E,F,D,|E,2C,2D,2E,2 F,D,E,F, G,2G,,2|[C,C,,]16|]
```


```
X:12
T:Puer natus in Bethlehem
C:J.S. Bach (1685-1750)
M:3/4
L:1/4
%%staves {1 2 3 4}
K:Am
V:1
A|A2A|B2B|(cB)A|!fermata!G3|c2d|c2B|!fermata!c2c|c2c|
B2A|AB^G|!fermata!A2A|=G2A|B2B|c2B|A2^G|!fermata!A2|]
V:2
E|E2A|G2G|G2F|E3|G2^G|A2=G|G2G|A2^F|
G2G-|G^FE|E2D|DED|D2F|EFG-|G^FE|E2|]
V:3
C|C2D|D2D|CEC|C3|E3-|EDD|E2E|EDD|
DEE|DB,B,|C2A,|B,CA,|G,B,D|CD2|C2B,|^C2|]
V:4
A,,|A,G,^F,|G,D,=F,|E,C,F,|!fermata!C,3|C,CB,|A,^F,G,|!fermata!C,2C|A,^F,D,|
G,E,^C,D,^D,E,|!fermata!A,,2F,-|F,E,^F,|G,^F,^G,|A,D,E,|F,^D,E,|!fermata!A,,2|]
```


```
X:1
T:Mugur, Mugurel
T:Little Buds
C:Romania
C:Words: Nicolai Costenco
M:5/8
L:1/8
K:Em
|:"Em"E3 E2|"Am"A3 A2|"Em"BG2 A2|B3- B2|"E7"d2^c de|"Am"c2B ce|"Em"(B3- B2|e3- e2):|
w:Mu-gur, mu-gur, mu-gu--rel._ Mu--gur,_ mu-gu---rel.
w:Ca neam sat-ur-at_ de iar-na, Mu--gur,_ mu-gu---rel.
w:Ba-tei Doan-me pe cio-co-li,_Mu--gur,_ mu-gu---eel.
|:"Em"e2 B3|"Am"cA2- A2|"G"B2 G3|"D"FD2 F2|"C"G2F GA|"F"=F2E "B7"G^F|[1"Em"E2F GA|"B7"B2c (3^cd^d:|[2"Em"E3- E2|E3-E2|]
w:I-a fa-te_ mai mar-i-cel,_ Mu-gur,__ mu-gu---rel.
w:Si de ra-u--ta-ten ta-ra,_ Mu-gur,__ mu-gu---rel.
w:Cum ne bat si_ ei pei noi,__ Mu-gur,__ mu-gu---rel.
```


----------



## AugmentedFourth (Dec 9, 2014)

Wow, this is cool stuff. I am in the process of writing a program in Python that will take melodies and automatically mutate them against each other or copies of themselves to optimize counterpoint-a-bility, and I'm glad you posted this.

Originally I was just going to have users input notes one at a time, but being able to read these is a wayyyyy better option.  Looks like it's time to switch from scientific to Helmholtz notation.

EDIT: My first transcription is complete:


```
X:1
T:What a Queer Bird the Frog Are
T:Frog Round
C:Unknown
M:3/4
L:1/8
Q:1/4=90
K:C
c/c/B c3 G|c2 C3 C/D/|
w:What a queer bird, the frog are When he
EE EE ED/E/|FF FF FE/F/|
w:sit he stand (al-most) When he walk he fly (al-most) When he
GG GG GG|AG c/B3/ c/CG/|
w:talk he cry (al-most) He ain't got no sense, hard-ly He
AG c/B3/ c/C3/|c/CC/ C/D/E/F/ G/A/B/c/:||
w:ain't got no tail, nei-ther, hard-ly He sit on what he ain't got hard-ly
```


----------



## Hollowway (Dec 9, 2014)

Holy crap this is cool! And thank the god of your choice that Walshaw didn't pull a Silicon Valley douche move and try to "monetize" it. I love this! And those conversion programs rock. 

@Aug4th - that's an awesome idea - I'd love to see that thing in action when you finish coding it. And we should write your screen name in ABC!


----------



## AugmentedFourth (Dec 9, 2014)

Hollowway said:


> And we should write your screen name in ABC!



Done. (See user title.)


----------



## Mr. Big Noodles (Dec 10, 2014)

A transcription of the first piece in Bartók's 44 Duets for Violin. In this transcription, I am showcasing another method for writing polyphony (called 'voice overlay' on abc:standard:v2.1). There are also dynamics, crescendo and diminuendo, and breath marks.


```
X:1
T:1
T:Necklied/Teasing Song/Párosító
C:Béla Bartók
M:2/2
L:1/4
Q:1/2=52 Andante
%%MIDI program 41
K:E
V:1
!p!gab2|bag2|gab2|bag2|!<(!b2b2|befg!<)!|b!>(!agf|!>)!e2e2!breath!|
[K:Em]!mf!B,CD2|DCB,2|B,CD2|DCB,2|D2D2|DG,A,B,|DCB,A,|
G,2G,2|z4|z4|[K:E]!p!b2b2|befg|!>(!bagf|!>)!e2e2|]
V:2
%%MIDI program 41
!p!e3c|d2f2|e3d|c2^B2|=B2!<(!A2|G2F^E|!<)!F2!>(!BA|G!>)!FE2!breath!|
[K:Em]z2d2&\
[K:Em]x2!mf!D2-|\
A2D2&\
D2x2|\
d2(AB)&\
D2D2|\
A2(DG)&\
D2x2|\
=F4-|FE=FD|E3^F|
G2DE|B,4-|B,3z|[K:E]!p!B2A2|G2F^E|!>(!FzB,2|!>)!=E4|]
```
The backslashes at the ends of lines 19, 21, 23, and 25 are not necessary, but they make part extraction easier. Also, the [K:] at line 18 is redundant on paper, but for some reason the playback won't recognize the [K:] in line 17 for both voices. In order to get it to play back properly, both voices need to have the same [K:] applied.

It is also possible to transcribe this piece like this:


```
X:1
T:1
T:Necklied/Teasing Song/Párosító
C:Béla Bartók
M:2/2
L:1/4
Q:1/2=52 Andante
%%MIDI program 41
K:E
V:1
!p!gab2|bag2|gab2|bag2|!<(!b2b2|befg!<)!|b!>(!agf|!>)!e2e2!breath!|
[K:Em]!mf!B,CD2|DCB,2|B,CD2|DCB,2|D2D2|DG,A,B,|DCB,A,|
G,2G,2|z4|z4|[K:E]!p!b2b2|befg|!>(!bagf|!>)!e2e2|]
V:2
%%MIDI program 41
!p!e3c|d2f2|e3d|c2^B2|=B2!<(!A2|G2F^E|!<)!F2!>(!BA|G!>)!FE2!breath!|
[K:Em]z2d2&[K:Em]x2!mf!D2-|A2D2&D2x2|d2(AB)&D2D2|A2(DG)&D2x2|=F4-|FE=FD|E3^F|
G2DE|B,4-|B,3z|[K:E]!p!B2A2|G2F^E|!>(!FzB,2|!>)!=E4|]
```


----------



## Mr. Big Noodles (Dec 26, 2014)

One of the things about ABC that quickly becomes tedious is the need to qualify the octave of each and every pitch. If you're coding something that has a lot of high notes or a lot of low notes, you could end up with a line that looks like C,,D,,E,,F,,G,,A,,. After writing a million commas, it gets pretty old. Wouldn't it be nice if we could write that same line as CDEFGA? Now you can!

By specifying the middle note of the staff, we can make our code more compact. This will modify the clef:



```
X:1
M:7/4
L:1/4
K:C clef=bass middle=D'
CDEFGAB|cdefgab|[K:clef=treble middle=B]CDEFGAB|cdefgab|]
```
Clef may be specified either in V: (voice field) or K: (key field). If you desire a clef change somewhere in the body, only [K:] can be used inline. The "middle=B" in measure 3 is redundant; [K:treble] would have sufficed, but I wanted to show how it's done in case somebody wants to get fancy with this.

Examples:

V:1 clef=treble middle=B (Standard treble clef.)

V:1 clef=treble middle=B,

V:1 clef=treble middle=B'

V:1 clef=bass middle=D

V:1 clef=bass middle=D, (Standard bass clef.)

V:1 clef=bass middle=D'

K:C clef=treble middle=B''

[K:C clef=bass middle=D,,]

The limitation of this is that you can't change the "middle=notename" without engraving a clef, at least on the converters I've provided in the first post. Therefore, something like this will result in redundant clefs:


```
X:2
M:7/4
L:1/4
K:C clef=bass middle=D'
CDEFGAB|[K:middle=D]CDEFGAB|[K:clef=treble middle=B]CDEFGAB|[K:middle=B,]CDEFGAB|]
```
A little planning is therefore necessary, but knowing this trick makes bass clef much more friendly.


```
X:1
T:Super Mario Bros
T:Main Theme (Overworld)
C:Koji Kondo
M:4/4
L:1/8
Q:1/4=200
%%staves {1 2}
K:C
V:1 clef=treble
P:Introduction
[^Fe][Fe]2[Fe] z[Fc][Fe]2|[gB]2 z2 G2 z2||
[P:1]|:[cE]2 z[GC] z2 [EG,]2|z [AC]2[BD] z[_B_D] [AC]2|[L:1/4](3.[GC].[eG].[gB] [L:1/8][ac]2 [fA][gB]|z[eA]2[cE] [dF][BD] z2:|
P:2
|:z2 [ge][_g_e] [fd][^dB] z[=ec]|z[^GE] [AF][c=G] z[AC] [cE][dF]|z2 [ge][_g_e] [fd][^dB] z[=ec]|z[fgc']2[fgc'] [fgc']2 z2|
z2 [ge][_g_e] [fd][^dB] z[=ec]|z[^GE] [AF][c=G] z[AC] [cE][dF]|z2[_e_A]2 z[dF] z2|.[cE]2 z2 z4:|
P:3
[c_A][cA]2[cA] z[c_A] .[d_B]2|[eG][cE] z[AE] [GC]2 z2|[c_A][cA]2[cA] z[c_A] [d_B][eG]|z8|
[c_A][cA]2[cA] z[c_A] [d_B]2|[eG][cE] z[AE] [GC]2 z2|[^Fe][Fe]2[Fe] z[Fc][Fe]2|[gB]2 z2 G2 z2||
P:1
|:[cE]2 z[GC] z2 [EG,]2|z [AC]2[BD] z[_B_D][AC]2|[L:1/4](3.[GC].[eG].[gB] [L:1/8][ac]2 [fA][gB]|z[eA]2[cE] [dF][BD]z2:|
P:4
|:[ec][cA]2[GE] z2 .[^GE]2|[AF][fc]2[fc] [AF]2 z2|[L:1/4](3.[BG].[af].[af] (3.[af].[ge].[fd]|[L:1/8][ec][cA]2[AF] [GE]2z2|
[ec][cA]2[GE] z2 [^GE]2|[AF][fc]2[fc] [AF]2 z2|[GE][fd]2[fd] [L:1/4](3.[fd].[ec].[dB]|[L:1/8][cG]E2E C2z2:|
P:3
[c_A][cA]2[cA] z[c_A][d_B]2|[eG][cE]2[AE] [GC]2z2|[c_A][cA]2[cA] z[c_A] [d_B][eG]|z8|
[c_A][cA]2[cA] z[c_A][d_B]2|[eG][cE]2[AE] [GC]2z2|[^Fe][Fe]2[Fe] z[Fc][Fe]2|[gB]2 z2 G2 z2||
P:1
|:[cE]2 z[GC] z2 [EG,]2|z [AC]2[BD] z[_B_D] [AC]2|[L:1/4](3.[GC].[eG].[gB] [L:1/8][ac]2[fA][gB]|z[eA]2[cE] [dF][BD] z2:|
V:2 clef=bass middle=D
DD2D zDD2|g2 z2 G2 z2||
|:G2 zE z2 C2|zF2G z_G F2|[L:1/4](3.E.c.e [L:1/8].f2 de|zc2A BG z2:|
|:C2 zG z2 c2|F2 zc c2 F2|C2 zG z2 Gc|z4 z2 G2|
C2 zG z2 c2|F2 zc c2 F2|C2 _A2 z_B z2|c2 zG G2 C2:|
_A,2 z_E z2 _A2|G2 zC z2 G,2|_A,2 z_E z2 _A2|G2 zC z2 G,2|
_A,2 z_E z2 _A2|G2 zC z2 G,2|DD2D zD D2|g2 z2 G2 z2||
|:G2 zE z2 C2|zF2G z_G F2|[L:1/4](3.E.c.e [L:1/8].f2de|zc2A BG z2:|
|:C2 z^F G2 c2|=F2 F2 cc F2|C2 zF G2 B2|G2 G2 cc G2|
C2 z^F G2 c2|F2 F2 cc F2|G2 zG [L:1/4](3.[G].[A].[B]|[L:1/8].c2 G2 C2 z2:|
_A,2 z_E z2 _A2|.G2 zC z2 G,2|_A,2 z_E z2 _A2|G2 zC z2 G,2|
_A,2 z_E z2 _A2|G2 zC z2 G,2|DD zD zD D2|g2 z2 G2 z2||
|:G2 zE z2 C2|zF2G z_G F2|[L:1/4](3.E.c.e [L:1/8].f2de|zc2A BG z2:|
```


----------



## AugmentedFourth (Dec 31, 2014)

Creating an ABC interpreter is looking a slight bit more intimidating with that...

Haven't got much to show for my program yet, but here's the whole thing so far with some skeletal features. You can write melodies, including rests, although I haven't tidied up the writer to not put accidentals on every single note yet. 

Currently the program only stores pitches using sharps and naturals, there is no such thing as B# or Eb. Only C and D#. The reason being that there is no reason to differentiate between D# and Eb unless you are either making human-readable notation or are doing analysis (which can be done within the meat of the program, when 'note' objects are being thrown around it's easier to not differentiate).

Oh yeah, you need Python 3.x for this:

EDIT: Feel free to pick apart my code and tell me any time it fails... I'm pretty new to this.


----------



## AugmentedFourth (Jan 2, 2015)

Actually, I have a clarifying question on that post. I understand what you are accomplishing by modifying the clefs in the code, but should the denoted (concert?) pitch be different in, say, this example:



Mr. Big Noodles said:


> ```
> X:2
> M:7/4
> L:1/4
> ...



From bar to bar? Because when I copy pasted this code into EasyABC, while the different bars read as different octaves when sight-reading, when doing MIDI playback it feeds the same octave of CDEFGAB through every time. So when I'm programming something to just take the raw pitch values from an ABC file, should I take the clef changes into account, or not, as EasyABC seems to?


----------



## Mr. Big Noodles (Jan 3, 2015)

I have the same issue with playback. I haven't found a solution yet. However, it seems that Kctave=-2 has the same effect on the notation as K:middle=d and plays back properly, but playback is not affected when octave= is used in an inline field. I imagine these specifications are volatile. If you want to be safe, go with the big strings of commas and apostrophes.


----------



## Mr. Big Noodles (Jan 5, 2015)

*Notating for Drumset*

It took me a while to figure this one out. Notation is easy enough - specifying &#8220;clef=perc&#8221; in K: or V: will get you a percussion clef, and &#8220;pitches&#8221; are mapped to the staff the same as treble clef (as in the bottom line is E, the top line is f). However, getting the file to play back with the proper sounds took some research. I&#8217;ll get to that after I lay down the basics.

When notating the instruments of the drumset, there is no single established convention. It is not uncommon to provide a key to the notation, so that the drummer can decipher what is going on. Here are a couple of examples of drum keys:











In general, regular noteheads indicate drums (bass, snare, toms, floor tom, conga, bongos), &#8220;x&#8221; noteheads indicate metals (cymbals, tam tam, gong), and triangle noteheads indicate woods (wood block, temple blocks, cowbell [though technically metal]). As far as I can tell, triangle noteheads aren&#8217;t supported in EasyABC, so we&#8217;ll only deal with regular noteheads and x&#8217;s.


```
X:5
T:Drum Key
M:
L:1/4
K:C clef=perc
"^Bass"F|"^Snare"c|"^High tom"e|"^Mid tom"d|"^Low tom"B|"^Floor tom"A|
"^China/Other Cymbal"^b|"^Crash"^a|"^Hi-hat"^g|"^Ride"^f|"^Hi-hat Pedal"^D|]
```
Writing a note as though it were sharp tells the program to use x noteheads. Writing flats, such as _g, will give you a circled x notehead (not shown here, but experiment with it).

* Not related to drums, but notice also that I&#8217;ve preceded the text above the staff with ^, such as in &#8220;^China/Other Cymbal&#8221;. I&#8217;ve done this so that the program ignores the text, otherwise it will think that we are entering chord symbols and it would read &#8220;China/Other Cym&#9837;al&#8221;.

Alright, let&#8217;s make some beats. I like to put the bass drum, snare, and hi-hat pedal with the stems down, and everything else stems up, but there are no hard and fast rules. In order to get this result, one can either us two voices with the V: field, or use & to achieve voice overlay.


```
X:6
T:Purdie Shuffle
C:Bernard Purdie
M:4/4
L:1/8
%%staves (1 2)
K:C clef=perc
V:1
(3^gc!open!^g (3^gc!open!^g (3[^gc]c!open!g (3^gc!open!^g|\
(3^gc!open!^g (3^gc!open!^g (3[^gc]c!open!g (3^gc!open!^g|]
V:2
[F^D]2(3:2:2^D2F^D2(3:2:2^D2F|\
[F^D]2(3:2:2^D2F^D2(3:2:2^D2F|]
```


```
X:6
T:Purdie Shuffle
C:Bernard Purdie
M:4/4
L:1/8
K:C clef=perc
(3^gc!open!^g (3^gc!open!^g (3[^gc]c!open!g (3^gc!open!^g\
&[F^D]2(3:2:2^D2F^D2(3:2:2^D2F|\
(3^gc!open!^g (3^gc!open!^g (3[^gc]c!open!g (3^gc!open!^g\
&[F^D]2(3:2:2^D2F^D2(3:2:2^D2F|]
```
The circle articulation (notated by writing !open! before the affected note) indicates an open hi-hat. Closed hi-hat (or cymbal choke, etc.) is notated with !+!.

A simple rock beat:


```
X:2
M:4/4
L:1/8
K:C clef=perc
^a^g^g^g ^g^g^g^g & FF/F/ cF F2cF/F/|\
^g^g^g^g ^g^g^g^g & F2c2 FF/F/ Fc|\
^g^g^g^g ^g^g^g^g & FF/F/ cF F2cF/F/|\
(3eee (3ddd (3BBB c/c/c/c/ & F2^D2^D2^D2|
^a^f^f^f ^f^f^f^f & FF/F/ cF F2cF/F/|\
^f^f^f^f ^f^f^f^f & FF/F/ cF F2cF/F/|\
^f^f^f^f ^f^f^f^f & F>Fc2 Fc F>c|\
^a2-z2 z4 & F2z2 z4|]
```
The open tie on the crash cymbal in the last measure indicates to the player to let the cymbal ring. Durations of a half note or larger are generally avoided in drum and percussion writing.



*Mapping MIDI Drums*


If you use playback to listen to what we just wrote, it&#8217;s going to be on the default MIDI program, which is piano sounds. Not good. By specifying &#8220;%%MIDI channel 10&#8221; in the header, you get the percussion sounds. In order to make these sounds match our notation, we need to map the lines and spaces on the staff to the sounds we want. The program for this is

%%MIDI drummap [pitch name] [MIDI pitch]

These are the MIDI pitches for channel 10, followed by their equivalent in ABC:


```
35. Acoustic Bass Drum   B,,,
36. Bass Drum 1   C,,
37. Side Stick   ^C,,
38. Acoustic Snare   D,,
39. Hand Clap   ^D,,
40. Electric Snare   C,,
41. Low Floor Tom   F,,
42. Closed Hi Hat   ^F,,
43. High Floor Tom   G,,
44. Pedal Hi-Hat   ^G,,
45. Low Tom   A,,
46. Open Hi-Hat   ^A,,
47. Low-Mid Tom   B,,
48. Hi Mid Tom   C,
49. Crash Cymbal 1   ^C,
50. High Tom   D,
51. Ride Cymbal 1   ^D,
52. Chinese Cymbal   E,
53. Ride Bell   F,
54. Tambourine   ^F,
55. Splash Cymbal   G,
56. Cowbell   ^G,
57. Crash Cymbal 2   A,
58. Vibraslap   ^A,
59. Ride Cymbal 2   B,
60. Hi Bongo   C
61. Low Bongo   ^C
62. Mute Hi Conga   D
63. Open Hi Conga   ^D
64. Low Conga   E
65. High Timbale   F
66. Low Timbale   ^F
67. High Agogo   G
68. Low Agogo   ^G
69. Cabasa   A
70. Maracas   ^A
71. Short Whistle   B
72. Long Whistle   c
73. Short Guiro   ^c
74. Long Guiro   d
75. Claves   ^d
76. Hi Wood Block   e
77. Low Wood Block   f
78. Mute Cuica   ^f
79. Open Cuica   g
80. Mute Triangle   ^g
81. Open Triangle   a
```
If we wanted to assign &#8220;Bass Drum 1&#8221; to F we would type &#8220;%%MIDI drummap F 36&#8221;. You can do these all yourself, or use the drum map that I made. I like to follow the line with the name of the MIDI instrument to make debugging easier. The program will ignore the text if it is preceded with %.

%%MIDI drummap F 36 %bass drum 1


```
X:5
T:Drum Key
M:
L:1/4
%%MIDI channel 10
%%MIDI program 0
%%MIDI drummap F 36 %bass drum 1
%%MIDI drummap c 38 %acoustic snare
%%MIDI drummap ^D 44 %pedal hi-hat
%%MIDI drummap ^f 51 %ride cymbal 1
%%MIDI drummap ^g 42 %closed hi hat
%%MIDI drummap ^a 49 %crash cymbal 1
%%MIDI drummap ^b 52 %chinese cymbal
%%MIDI drummap e 50 %high tom
%%MIDI drummap d 48 %hi mid tom
%%MIDI drummap B 45 %low tom
%%MIDI drummap A 41 %low floor tom
K:C clef=perc
"^Bass"F|"^Snare"c|"^High tom"e|"^Mid tom"d|"^Low tom"B|"^Floor tom"A|
"^China/Other Cymbal"^b|"^Crash"^a|"^Hi-hat"^g|"^Ride"^f|"^Hi-hat Pedal"^D|]
```
If you&#8217;re using two voices rather than voice overlay, you&#8217;ll need to specify a MIDI program for both voices.


```
X:6
T:Purdie Shuffle
C:Bernard Purdie
M:4/4
L:1/8
%%staves (1 2)
%%MIDI channel 10
%%MIDI program 0
%%MIDI drummap ^g 42 %closed hi hat
%%MIDI drummap c 38 %acoustic snare
K:C clef=perc
V:1
(3^gc!open!^g (3^gc!open!^g (3[^gc]c!open!g (3^gc!open!^g|\
(3^gc!open!^g (3^gc!open!^g (3[^gc]c!open!g (3^gc!open!^g|]
V:2
%%MIDI channel 10
%%MIDI program 0
%%MIDI drummap F 36 %bass drum 1
%%MIDI drummap ^D 44 %pedal hi-hat
[F^D]2(3:2:2^D2F^D2(3:2:2^D2F|\
[F^D]2(3:2:2^D2F^D2(3:2:2^D2F|]
```
Because of that, I like to use the voice overlay method so that I can copy-paste my MIDI program and have everything in one place.


```
X:2
M:4/4
L:1/8
%%MIDI channel 10
%%MIDI program 0
%%MIDI drummap F 36 %bass drum 1
%%MIDI drummap c 38 %acoustic snare
%%MIDI drummap ^D 44 %pedal hi-hat
%%MIDI drummap ^f 51 %ride cymbal 1
%%MIDI drummap ^g 42 %closed hi hat
%%MIDI drummap ^a 49 %crash cymbal 1
%%MIDI drummap ^b 52 %chinese cymbal
%%MIDI drummap e 50 %high tom
%%MIDI drummap d 48 %hi mid tom
%%MIDI drummap B 45 %low tom
%%MIDI drummap A 41 %low floor tom
K:C clef=perc
^a^g^g^g ^g^g^g^g & FF/F/ cF F2cF/F/|\
^g^g^g^g ^g^g^g^g & F2c2 FF/F/ Fc|\
^g^g^g^g ^g^g^g^g & FF/F/ cF F2cF/F/|\
(3eee (3ddd (3BBB c/c/c/c/ & F2^D2^D2^D2|
^a^f^f^f ^f^f^f^f & FF/F/ cF F2cF/F/|\
^f^f^f^f ^f^f^f^f & FF/F/ cF F2cF/F/|\
^f^f^f^f ^f^f^f^f & F>Fc2 Fc F>c|\
^a2-z2 z4 & F2z2 z4|]
```

One last thing: MIDI notes are absolute. MIDI does not differentiate between a note and its enharmonic equivalent, so if you want to use both e and _f for two different things, you're out of luck as far as playback goes.


----------



## Mr. Big Noodles (Jan 24, 2015)

A quick rundown about writing transposed parts. By indicating "transpose=[value]" in the K: or V: field, you can get a part to sound different than it reads. For example, an octave transposition:


```
X:1
M:3/2
L:1/4
K:C transpose=-12
CDEFG2|FEDCD2|EFGAG2|
CDEFG2|FEDCD2|EFGDC2|]
```
If you want a transposition above, simply put the number (this will sound a tritone higher than written: transpose=6). If you want a transposition below, use negative numbers (this will sound a tritone below: transpose=-6). The number indicates the amount of half-steps. 1 is a minor second, 2 is a major second, 3 is a minor third, 4 is a major third, so on and so forth.

From what I can tell, this won't work in inline fields. However, it is possible to have transposition when using multiple instruments.


```
X:43
M:3/2
L:1/4
K:C
V:1 name="C instrument" snm="in C"
CDEFG2|FEDCD2|EFGAG2|
CDEFG2|FEDCD2|EFGDC2|]
V:2 transpose=-2 name="B&#9837; instrument" snm="in B&#9837;"
K:D
DEFGA2|GFEDE2|FGABA2|
DEFGA2|GFEDE2|FGAED2|]
```
These should sound the same. V:1 is in concert pitch, whereas V:2 is in B&#9837;.


----------



## Mr. Big Noodles (Jan 24, 2015)

I was running into playback problems while I was writing out a score, so I did some research and found that this format produces the intended result.

I am using %%score to tell the program how to group the staves. I'll have four voices. If I do them like this, they will appear as four separate staves:

%%score 1 2 3 4

I can also combine staves with the following:

%%score (1 2)(3 4)

^This will put the contents of V:1 and V:2 into one staff, and V:3 and V:4 into another staff.

Individual staves can be bracketed together with [] or {}. This would be something you could use for two violins and a piano:

%%score [1 2]{3 4}

After that, I define the voices and voice properties in the header. In the body, we'll use [V:]. After populating all of the V: fields in the header, we should be able to assign MIDI instruments to each voice. The drums were particularly difficult to figure out, so I'll demonstrate how I did them here.


```
X:1
M:12/8
L:1/8
%%score 1 2 (3 4)
V:1 name=Guitar snm=Gtr. clef=treble transpose=-12
V:2 name=Bass snm=Bass clef=bass octave=-2 transpose=-12
V:3 name=Drumset snm=D.S. clef=perc
V:4 clef=perc
%%MIDI program 1 25 %acoustic guitar (nylon)
%%MIDI program 2 34 %electric bass (finger)
%%MIDI program 3 0 %drums
%%MIDI program 4 0 %drums
K:E
[V:1]
[E,B,]2[E,B,] [E,c,]2[E,c,] [E,B,]2[E,B,] [E,c,]2[E,c,]|[A,E]2[A,E] [A,F]2[A,F][A,E]2 [A,E] [A,F]2[A,F]|
[V:2]
E2E (A^AB) E2E (=A^AB)|=A2A (d^de) ^c2c =c2c|
[V:3][K:C]
%%MIDI channel 10
%%MIDI drummap ^g 42 %closed hi hat
^g^g^g ^g^g^g ^g^g^g ^g^g^g|^g^g^g ^g^g^g ^g^g^g ^g^g^g|
[V:4][K:C]
%%MIDI channel 10
%%MIDI drummap F 36 %bass drum 1
%%MIDI drummap c 38 %acoustic snare
F3 c2F F3 FcF|F3 c2F F3 FcF|
```

(Notice that I neutralized the key signature for the drum staves.)

The MIDI assignment seems a little inconsistent; I couldn't get V:1 to play %%MIDI program 1 [#] when I did it in the header, but it seems to play fine when I assign it in the body. This has better playback in EasyABC for me:


```
X:1
M:12/8
L:1/8
%%score 1 2 (3 4)
V:1 name=Guitar snm=Gtr. clef=treble transpose=-12
V:2 name=Bass snm=Bass clef=bass octave=-2 transpose=-12
V:3 name=Drumset snm=D.S. clef=perc
V:4 clef=perc
%%MIDI program 2 34 %electric bass (finger)
%%MIDI program 3 0 %drums
%%MIDI program 4 0 %drums
K:E
[V:1]
[COLOR=Yellow]%%MIDI program 1 25 %acoustic guitar (nylon)[/COLOR]
[E,B,]2[E,B,] [E,c,]2[E,c,] [E,B,]2[E,B,] [E,c,]2[E,c,]|[A,E]2[A,E] [A,F]2[A,F][A,E]2 [A,E] [A,F]2[A,F]|
[V:2]
E2E (A^AB) E2E (=A^AB)|=A2A (d^de) ^c2c =c2c|
[V:3][K:C]
%%MIDI channel 10
%%MIDI drummap ^g 42 %closed hi hat
^g^g^g ^g^g^g ^g^g^g ^g^g^g|^g^g^g ^g^g^g ^g^g^g ^g^g^g|
[V:4][K:C]
%%MIDI channel 10
%%MIDI drummap F 36 %bass drum 1
%%MIDI drummap c 38 %acoustic snare
F3 c2F F3 FcF|F3 c2F F3 FcF|
```
Don't spend it all in one place.


----------



## Mr. Big Noodles (Jan 25, 2015)

Some more stuff I've learned about scores. If you use the directive %%score, the program will NOT draw barlines between staves. Usually, that is not what we want. This is remedied by using %%staves instead. Also, you can get bar numbers by placing %%barnumbers 0 in the header. 0 puts the measure number at the start of every staff system, 1 puts the numbers every one measure, 2 is every two measures, blah blah blah. If you have first and second endings, you also need %%contbarnb 1 if you want the bar numbers to be counted correctly. Lastly, one of the things you can do with the [V:] field. If you don't like having a long string of measures for every voice and you would prefer to be able to see corresponding measures grouped together, you can do so like this:

%1
[V:1]
x|x|x|x|
[V:2]
x|x|x|x|
[V:3]
x|x|x|x|
%5
[V:1]
x|x|x|x|
[V:2]
x|x|x|x|
[V:3]
x|x|x|x|

The measure numbers (%1 and %5) are unnecessary and don't affect the program or the score, but they make it easier to find your place. Similarly, you could do something like this:

%verse
[V:1]
x|x|x|x|
x|x|x|x||
[V:2]
x|x|x|x|
x|x|x|x||
[V:3]
x|x|x|x|
x|x|x|x||
%chorus
[V:1]
x|x|x|x|
x|x|x|x||
[V:2]
x|x|x|x|
x|x|x|x||
[V:3]
x|x|x|x|
x|x|x|x||

Whatever you need to do to make it easier to look at the code.


```
X:1
M:12/8
L:1/8
%%staves 1 2 (3 4)
%%barnumbers 0
%%contbarnb 1
V:1 name=Guitar snm=Gtr. clef=treble transpose=-12
V:2 name=Bass snm=Bass clef=bass octave=-2 transpose=-12
V:3 name=Drumset snm=D.S. clef=perc
V:4 clef=perc
%%MIDI program 2 34 %electric bass (finger)
%%MIDI program 3 0 %drums
%%MIDI program 4 0 %drums
K:E
%1
[V:1]
%%MIDI program 1 25 %acoustic guitar (nylon)
[E,B,]2[E,B,] [E,c,]2[E,c,] [E,B,]2[E,B,] [E,c,]2[E,c,]|[A,E]2[A,E] [A,F]2[A,F][A,E]2 [A,E] [A,F]2[A,F]|
[V:2]
E2E (A^AB) E2E (=A^AB)|=A2A (d^de) ^c2c =c2c|
[V:3][K:C]
%%MIDI channel 10
%%MIDI drummap ^g 42 %closed hi hat
^g^g^g ^g^g^g ^g^g^g ^g^g^g|^g^g^g ^g^g^g ^g^g^g ^g^g^g|
[V:4][K:C]
%%MIDI channel 10
%%MIDI drummap F 36 %bass drum 1
%%MIDI drummap c 38 %acoustic snare
F3 c2F F3 FcF|F3 c2F F3 FcF|
%3
[V:1]
[E,B,]2[E,B,] [E,c,]2[E,c,] [E,B,]2[E,B,] [E,c,]2[E,c,]|[E,B,]2[E,B,] [E,c,]2[E,c,] [E,B,]2[E,B,] [E,c,]2[E,c,]|
[V:2]
E2E (A^AB) E2E (=A^AB)|E2E (A^AB) E2E (=A^AB)|
[V:3]
^g^g^g ^g^g^g ^g^g^g ^g^g^g|^g^g^g ^g^g^g ^g^g^g ^g^g^g|
[V:4]
F3 c2F F3 FcF|F3 c2F F3 FcF|
%5
[V:1]
[B,F]2[B,F] [B,G]2[B,G] [B,F]2[B,F] [B,G]2[B,G]|[A,E]2[A,E] [A,F]2[A,F][A,E]2 [A,E] [A,F]2[A,F]|
[V:2]
BBB BBB f=fe d=dB|=A2A (d^de) ^c2c =c2c|
[V:3]
^g^g^g ^g^g^g ^g^g^g ^g^g^g|^g^g^g ^g^g^g ^g^g^g ^g^g^g|
[V:4]
F3 c2F F3 FcF|F3 c2F F3 FcF|
%7
[V:1]
[E,B,]2[E,B,] [E,c,]2[E,c,] [E,B,]2[E,B,] [E,c,]2[E,c,]|[1[B,F]2[B,F] [B,F]2[B,F] [B,F][B,F][B,F] [B,F][B,F][B,F]:|
[V:2]
E2E (A^AB) E2E (=A^AB)|[1BBB BBB BBB BBB:|
[V:3]
^g^g^g ^g^g^g ^g^g^g ^g^g^g|[1^g^g^g ^g^g^g ^g^g^g ^g^g^g:|
[V:4]
F3 c2F F3 FcF|[1F3 c2F F3 FcF:|
%9
[V:1]
[2[B,F]2[B,F] [B,F]2[B,F] [B,F][B,F][B,F] [B,F][B,F][B,F]|[F,A]2[E,G]- [E,G]3- [E,G]6|]
[V:2]
[2BBB BBB BBB BBB|E12|]
[V:3]
[2^g^g^g ^g^g^g ^g^g^g ^g^g^g|^a2zz3z6|]
[V:4]
[2F3 c2F F3 FcF|F2zz3z6|]
```

I'm still looking for a way to only display the 1st and 2nd endings on the top staff of the score, yet have the file play back correctly.


----------

