CSound [Vercoe, 1992] is a Music-N language that was first designed to make this technology portable and available in any platform with the only requirement of having a C language compiler. CSound has suffered several revisions during the years and now includes contributions from many different collaborators, most of them computer music composers. But, above all, CSound is the project of Barry Vercoe [www-BarryVercoe, ].
CSound has gained a great acceptance in the academic community but has not become a mainstream tool, possibly because of the relative complexity of the language and the requirement of some previous programming experience.
In CSound an orchestra definition file is a regular text file written according to a specified protocol. This orchestra file is made up of a header and a list of instruments. In the header we can find global parameters such as the output sampling rate (sr) or the control frequency (kr).
The instrument definition starts with an instrument label and finishes with an end declaration. In between those two statements, different declarations are included. These declarations define the modules or functions that will be used and the way that they will interact.
The CSound score file is also a standard text file that follows a particular syntax and protocol. As a matter of fact it is just an ordered list of labels and numbers separated by a whitespace.
The score file can begin by defining a set of function tables that will be used to generate the synthesis waveforms. From the score body itself there is the possibility of sending messages to these functions or to an instrument in the orchestra. If the message is to be sent to a function it will start with ``f(x)'' and if it is intended to affect an instrument with ``i(x)'', where in both cases ``(x)'' is the number of the function or the instrument in the orchestra where the message is addressed. The next elements in a message are the temporal definition of the event start and its duration. The following values are addressed to the different parameters and their meaning is determined by the particular instrument definition.
In the following example we can see the two different kind of instruments available in a score. The first one is addressed to a table that generates sinusoidal waveforms and the second one is addressed to an orchestra instrument, asking it to produce a 5 seconds note starting at time 0.
f1 0 4096 10 1
i1 0 5 ... ... ... ... ... ... ...