Some more specific Csound information:
Max Mathews wrote what was probably the first computer program to synthesize music, Music 1, in 1957 on a punch card machine. He refined the program, expanding its capabilities until he had finished Music 5 in the 1960's. Barry Vercoe saw a version of Music 4 and ported it to the IBM 360, calling it Music 360. He then introduced his own concepts into a later port to the PDP-11, and Music 11 was born. Music 11 was gradually translated into C, and was combined with Vercoe's own Synthetic Performer program to become Csound. Csound has since gone through several major revisions in content, but few in terms of its structure.
Csound processes two files to produce its output- aptly named the score (.sco) file and the orchestra (.orc) file. Each has a substructure illustrated below.
The score file is analogous to a MIDI file, specifying the notes to be played, rather than the specifics of how to generate them. A score file consists of:
- Initialization statements: These set the tempo and generate data tables that will be used later by the orchestra file.
- Flow-control statements: These divide the performance into sections and allow for repeating sections
- Note statements: These specify which notes are to be played, when, and in what manner.
Some elementary preprocessing is done to the score file. All events in the score are sorted by time. Once the preprocessor has determined the times for the note events, it sends the note events to be processed by the orchestra file.
The orchestra file's closest relative is the soundfont. The orchestra file specifies code- written by the end user- that renders the notes given it by the score into output (as a sound file, or as audio playback). An orchestra file consists of:
- Global Initializations: These set the sample rate and number of channels for audio and control signals.
- Instrument blocks: These define the sound of a particular instrument as a function of input parameters from the score. They take the form of sequences of assignment statements to variables from functions and data tables, with limited flow control.
Evaluation is not done on a strictly sample-by-sample basis for all signals. Different signals are evaluated at different rates; each signal is calculated as few times per second as possible while still maintaining fidelity. This speeds up calculation greatly. There are 3 different rates that variables in instruments can be updated with-
- i- rate: When a note is first played, i- rate variables are given values. They do not change while the note is being played.
- k- rate: During a note's performance, k- rate variables may change at some user-specified rate (default: 4410 hz) at or slower than the audio sampling rate.
- a- rate: During a note's performance, a- rate variables may change at the audio sampling rate. (default: 44100 hz)
These rates remain unchanged throughout the calculation of the .sco file's output.
The Csound Book (a compilation of essays edited by Richard Boulanger)
The Csound help files