abcsound: an abc Front End for CSound


abcsound: a Textual Score Interpreter for CSound

abcsound is a preprocessor that accepts Chris Walshaw's "abc" notation for writing musical scores as plain text, and emits Csound score data. Here's an example of this abc score as rendered by abcsound using Karplus-Strong string instruments. And here the same score rendered using simple FM instruments (not a great rendition, but it shows abcsound's flexibility). Many thanks to Matt Conroy for pointing out abc's existence to me before I went too far down the road of developing my own textual music notation, and to the members of the Csound community for providing valuable feedback during abcsound's development.

My intent is for abcsound to fully support the abc notation. At the moment, it supports most of abc, except for a couple of hopefully-little-used corners. Specifically:

  • The [Kx] format for changing the key signature (or other global parameters) within a line of musical notation is not supported; instead, you must write such directives alone on their own line.
  • It doesn't do anything with decorations, other than those used to control Csound.
  • It doesn't do anything with guitar chord notation.
  • It supports only the basic n-let syntax (n, not the general n-let syntax (x:y:z
Any aspect of abc notation that isn't supported, other than those listed above, is a bug, and can be reported to jk.usenet at kneuro dot net. (Of course, abcsound does not do anything with the purely notational and clerical aspects of abc notation, such as the T: field.) I don't necessarily promise to fix all such bugs, because for me, abcsound is primarily a composition and transcription tool, not a means of playing existing abc scores -- in other words, I will mainly use it to play scores that I write or transcribe, so supporting every weird corner of existing abc practice doesn't interest me much. However, I will do my best, and if I choose not to fix something, I'll explain why.

Also, abcsound.py is licensed under the GNU General Public License Version 3, so you may feel free to implement fixes at will. Check out the developers link for a technical overview.

abcsound also supports some extensions to the abc format in order to drive the Csound program:

  • The instr directive names a Csound instrument and supplies any necessary parameter values.

    For example, this line:

    instr Oboe [p1=104:p6=13.2:p7=99:p4=amp:p5=pitch] [is:p1=105] [s:p1=106:p6=20.0]

    means: The instrument named "Oboe" corresponds to Csound instrument 104, except that initial slurred notes are rendered with instrument 105, and successive slurred notes are rendered with instrument 106. Csound field p4 should be set to the amplitude and p5 to the pitch; fields p6 and p7 should be set to 13.2 and 99, respectively; except that slurred notes should be rendered with p6=20.0.

  • The voices directive tells abcsound how many parallel lines of abc notation to expect, and which instruments (defined with the instr directive) to associate with each line. For example:

    voices Oboe Flute Viola

    tells abcsound to treat each group of three lines of music as parallel staves, and voice them with the Oboe, Flute, and Viola instruments. By default, one voice named "default" is specified, a simple Karplus-Strong plucked instrument.

I intend in the near future to implement a general notation for controlling all of Csound's pfield values from within an abc score. This should allow some interesting compositions!

Here is an extended example of abc/abcsound notation: John Dowland's choral work, "Can She Excuse My Wrongs". And here is the resulting MP3, as rendered by Csound. You can download the source archive here. It includes the example score and a CSD template file.

-- Joe Knapka


Last changed:
09-07-09 01:21:46


This page was rendered by LittleSite.
LittleSite is Copyright (c) 2005 by J.Knapka.
Questions and comments to JK