Beethoven Symphony No. 7, Movement 2

The abc musical notation language which was developed by Chris Walshaw <C.Walshaw@GREENWICH.AC.UK> was originally designed to handle folk tunes. However, some of the applications which handle abc files have been incorporating experimental features which are capable of encoding music of much greater complexity.

I've transcribed all of each voice, then all of the next voice. There's a lot to be said for interleaving single staves (or pages) worth of music so that the abc file reads like score sheets; i.e., the first section of all the voices, followed by the next section of all the voices. I think it is important to test the ability of abc applications to determine their own staff and page breaks using the scheme I've got here. However, I remain unconvinced about whether interleaving sections of music is a better idea.

I'm sure I don't like the coding style I've used here, but it is convenient for proofreading during data entry. I'm not done proofreading, so there are probably typos, and I rather suspect the printed score from which I was working also contains errors.

Feel free to offer other suggestions for reformatting this file. Remember, however, that many of these features are experimental -- thus not part of the standard that all abc applications are likely to support.

The inputs, outputs, and tools used

First is a new layout of the symphony I'm using henceforth. It is now complete, has been proofheard as MIDI, and mostly proofread. Note that the same input is acceptable for abc2ps, abc2midi, and abcm2ps (although some custom tweaking could be used to maximize the beauty of their outputs).

This is a rework which uses a separate "V:" line for each part of each instrument instead of combining both parts into chords. My original scheme produced PS which more nearly matched the original score, but it caused grief to high-end MIDI gear which knew that, e.g., flutes can't play chords. The PS output of this can be improved with trivial effort (but I've been otherwise occupied).

abc input
This is the philosophically right way to do the voices. There are 19 instrumental parts = abc "V:" voices = MIDI tracks. There are 11 distinct instruments = MIDI channels in use. The original score has 12 staves, but the PS outputs have more for different reasons. The dynamics are included for typesetting as lyrics.
MIDI output from abc2midi-1.5.6
7 minutes and 12 seconds of synthetic sound, with constant MIDI velocity all the way through.
abc input with crude dynamics
A quick hack of the input file which adds the dynamics as handled by abc2midi-1.5.7. This sounds more like Beethoven intended, but still lacks lots of dynamic information. My preference is that the dynamics be handled in some other way than this in-the-melody-line notation.
MIDI output from abc2midi-1.5.7
7 minutes and 12 seconds of synthetic sound, with MIDI velocity adjusted using the new features. If your MIDI card only supports 16 notes at a time (as my SB16) you'll definitely hear the premature cutoffs of some voices during the busier sections of the music.
PostScript output from abc2ps-1.3.2
Note the cool bar numbering. Parts are not combined into single staves, so it overfills the pages.
Adobe PDF output from above PS
Converted from PS to PDF by Aladdin GhostScript. (about 1 Mbyte)
PostScript output from abcm2ps-0.9.5
All I can say is "wow". Look at the numbering of the measures at the beginning of each staff. The final voice is a duplicate for MIDI only, but there's no way to prevent typesetting.
Adobe PDF output from above PS
Converted from PS to PDF by Aladdin GhostScript. (about 1 Mbyte)

Remarks about syntax differences and other things

slurred staccato (portato) notes
e.g., where the input code reads (.e .e) to indicate a particular bowing or tongueing effect
abc2ps typesets this very nicely. abc2midi interprets these as staccatos, which is arguable, but about the best thing it can do without actually changing to MIDI patches with samples of the different playing style for the duration of such notes.
clef designations and transposition
Whereas the same syntax is acceptable to the latest version of both programs, the semantics are not identical. This is still too experimental to expect standardization, and I still don't think we know what we ultimately want. This is complicated by the ability of abc2midi to transpose, and by the fact that different MIDI implementations choose different octave shifts for their instruments.
abbreviation of repetitive rests in tacit stretches
It would be nice not to require indefinite numbers of bars containing nothing more than z4, and to have conventions for not typesetting null staves.
ties with chords
abc2midi emits text indicating it is not completely happy with my syntax -- but the full implications of the syntax are not entirely clear.
abc2ps accepts code such as (A (B) C) indicating a slur from A to B and another from B to C.
abc2midi warns this as a nested slur.
abc typesetting apps and WYSIWYG editors need bar numbering
This becomes painfully obvious as soon as you contemplate communicating with anyone else about this score. This probably requires ways to control and reset the numbering scheme. See that abcm2ps has made a first effort at providing this feature.
The typeset instrumental voices are not labelled.
available as of abc2ps-1.3.1
Tuplets and slurs
The abc notation for tuplets uses unmatched parentheses. Slurs use matched parens. The combination of triplets and slurs in this movement make for a syntax which is pretty nearly impossible to verify by eye.
There are some sections where the strings do measured tremolos, sometimes with chords. The abc notation lacks this and, as a result, is awkwardly verbose. While we're fixing this, we should also think up a notation for unmeasured tremolos.
I've attempted to indicate how dynamics might be transcribed by making use of the w: convention of abc2ps. This uses a syntax of > and < characters which abc2ps naturally does not typeset in the desired fashion, and I do not seriously propose that the particular tokens I've used are workable -- this is purely for initial demonstration. I do believe that the dynamics should not be inline with the music but on a separate lyrics-like line. The transcription of dynamics is now complete, but it remains to be seen how an audio playback application might ever be able to make use of such directives.
MIDI playback
abc2midi is doing an excellent job of producing output. Nonetheless, professional musicians (indeed, amateur musicians) have nothing to fear from this technology at this time.
General MIDI conformance
The MIDI programs (instrumental voices) used should produce correct sound on any device that conforms to General MIDI, but beware that different MIDI implementations may have octave shifts for some of their instruments. Also beware that some MIDI implementations can only produce 16 notes at a time, and in some of the busier stretches of this movement that may cause premature termination of some of the notes as others take precedence.
combining voices for typesetting
Traditional musical scores combine two or three instruments on one staff. The original appearance of the score that I'm working from cannot be achieved without this ability (not even by using chords).

abcm2ps can create output where the pairs of instrumental parts are combined onto single staves, and the appearance of this much more nearly matches the original score sheets. abcm2ps-0.9.5 does the job.

combining voices for MIDI
The 16 channel limit of MIDI means that only 16 distinct instruments can be playing simultaneously; and with General MIDI's consumption of channel 10 for percussion this is reduced to 15 instruments. This is a pain.
abc2midi does provide the mechanisms to assign each abc voice to a particular channel, but the MIDI control commands must be issued in a particular order to do the job exactly right.
In the fully general case it will be necessary for the MIDI output to be broken into separate files, each using no more than 16 channels, which will be combined later by professional MIDI gear that can bypass the limitation of the MIDI file format. Such MIDI files will probably not be conformant with General MIDI so they will probably require manual tweaking before they can be played back, but high-end MIDI users are accustomed to this.
information density
The abc input file is about 143600 bytes, and this reduces to 60100 bytes if the unnecessary spaces are removed. The MIDI output is about 84600 bytes. This means that abc notation is about as dense as MIDI, yet abc is human-readable and e-mailable. I doubt that any other musical notation language can make such a claim.
The music industry is the original patron of almost all intellectual property rights law. The technology used in this demonstration accelerates the collision course between hobbyist afficionados and lawyers of musicians. This Beethoven piece is in the public domain, and I can only urge others to proceed with due caution when attempting similar transcriptions of more recent works.


Thanks go to De Clarke for providing the original sheet music, for proofreading, and also for using professional MIDI gear to produce audio output far surpassing my pitiful SoundBlaster 16. I wish I could export her stereo mix (produced using Proteus sample players) in net-accessible form.

Thanks also to

Chris Walshaw
for inventing abc and popularizing it so well
James Allwright
for inventing the multi-voice notation in abc and because abc2midi produced excellent output a priori, which only improved in response to the challenge of this input
Michael Methfessel
for doing such an excellent job with abc2ps, and improving it also in response to this input
Henrik Norbeck
for confirming my vision of the capabilities of abc when he expressed the sentiment that he would love to touch-type a symphony
Jean-Francois Moine
for demonstrating that multiple voices on one staff is within reach of current abc apps, thus priming me for this effort
and thanks to all the other abc developers and users who have contributed ideas and test implementations.
More general information about abc.
Creative Commons License
This work is licensed under a Creative Commons License.
Steve Allen <>

Initial deployment: 1998-06-21
Updated: 1998-09-02
Licensed: 2004-05-29