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
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
[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
Any aspect of
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
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
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]
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.
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
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