S I L E N C E
|
L I N M U S E .
E X E
|
Welcome
|
Copyright (C) 1996 by Michael Gogins.
|
LinMuse.exe is a part of Silence, a system for making music on computers by means of software alone. LinMuse requires the installation of Csound.exe and WCSound.dll on your computer.
The purpose of LinMuse is to use Lindenmayer systems as an instrument of musical composition. Lindenmayer systems are context-free grammars designed to model the growth and branching of plants. If you imagine that the leaves of a tree are replaced by musical notes, you will understand how LinMuse works.
Lindenmayer systems were invented by Aristid Lindenmayer, a Swedish botanist. They have been developed by him and others into one of the most successful computer-based scientific models. There are many pages concerning Lindenmayer systems on the Internet.
Lindenmayer systems are context-free grammars whose actions control the movements of a computer graphics turtle. The command include such actions as "turn left", "turn right," "take a step", "put your pen on the paper" and "remove your pen from the paper." There are also commands instructing the turtle to remember where it is (push state on stack) and go back to where it was (pop state from stack). In Noam Chomsky's hierarchy of formal languages, the kind of Lindenmayer system used in this program is a finite, regular, context-free grammar. Such languages are quite easy to program on a computer. In Lindenmayer's hierarchy, the kind of system used in this program is a context-free, parametric OL-system.
Formally speaking, a LinMus system consists of an ordered quadruplet <Vocabulary, Parameters, Axiom, Productions> where the Vocabulary is the set of terminal tokens each standing for a turtle command plus an alphabet for writing user-defined tokens, the Parameters are the set of real numbers, the Axiom is a nonempty set of tokens from Vocabulary and Parameters, and the Productions are rules specifying for any word composed of tokens from Vocabulary and Parameters another nonempty set of tokens from Vocabulary and Parameters that will replace it.
To produce the actual Lindenmayer system, the axiom is examined, and each of its tokens is replaced by the word specified by the relevant Production, if one exists, or by itself if one does not. This procedure is iterated a specified number of times until the original axiom has become a very long and complex string of commands.
When the iterations are complete, the string of commands is rendered as the drawing of a plant, in the original usage, or as a musical score, in my application. The turtle starts at one end of the string and interprets the commands one after the other, pushing its state onto a stack if the "push" command is encountered, and popping its state from the stack if the "pop" command is encountered. This enables the turtle to draw branches.
Although Lindenmayer's original systems controlled a plant-drawing turtle in 2 or 3 dimensional space, the system in LinMuse controls a score-writing turtle in 6-dimensional space. The dimensions are the same as the note space used in Silence:
The actual commands that control the score writing turtle in LinMuse have been designed specifically for making music, and have been extended to control the tonality of the score space. The mathematical basis for these commands are matrices for translating, rotating, and scaling points and vectors in six-dimensional space. The location of the turtle is specified by a six-dimensional point, and the orientation and size of step of the turtle is specified by a six-dimensional vector.
Each turtle command takes one numerical parameter, which specifies the number of times the command is to be applied in sequence; this number can be a fraction. Parameters are denoted N. Each command operates on a dimension which is denoted by D. Other symbols are denoted by C. For example, "+DN" could stand for "+o1" which means move up in pitch one octave. Commands must be separated by spaces. The commands are:
n | Make a note. The current position of the turtle is translated into a Csound instrument statement (note), which is stored in a score file. |
aDN | Move to absolute position N on dimension D. |
+DN | Add N to dimension D of the turtle's position. |
-DN | Subtract N from dimension D of the turtle's position. |
*DN | Multiply dimension D of the turtle's step vector by N. |
/DN | Divide dimension D of the turtle's step vector by N. |
**N | Multiply all dimensions of the turtle's step vector by N. |
//N | Divide all dimensions of the turtle's step vector by N. |
+mN | Move forward N steps along the direction of the turtle's step vector. |
-mN | Move backward N steps along the direction of the turtle's step vector. |
DDN | Rotate from the first dimension to the second by an angle of N times 2 pi; i.e. N=1 is a complete rotation, N=.25 is 90 degrees. |
[ | Push the position and step vector of the turtle onto a stack. |
] | Pop the position and step vector of the turtle from the stack. |
mSN | When creating a note, apply the pitch-class set transformation N; if the pitch-class of the note is not a member of N, replace the pitch-class of the note with the nearest member of N. In other words, make the note fit a scale or chord. |
+SN | Transpose the root of the pitch-class set transformation up by N semitones. To begin with, the first pitch-class of the set is C, so +S5 moves the transformation up a fourth to F. |
-SN | Transpose the root of the transformation down by N semitones. |
*SN | Multiply the root of the transformation by N semitones. |
/SN | Divide the root of the transformation by N semitones. |
aSN | Make the root of the transformation the absolute pitch-class N. |
LinMuse stores axioms and productions in .mln files, which may also include, inside themselves, WCsound score or .osc files, which in turn may include Csound score and orchestra files. To generate a score: