S I L E N C E
Version 2.0

Vineyard Productions
150 West 95th Street
Apartment 4-D
New York NY 10025
Telephone: (212) 222-4079
Email: gogins@nyc.pipeline.com

L I N M U S E . E X E
16 October 1996

A Win32 program for generating Csound scores and Midi files from Lindenmayer systems.

Turtle Commands
Score Generation
Score Rendering

Welcome
What is WCsound?
Software License
Download and Installation
Bibliography

Copyright (C) 1996 by Michael Gogins.
All rights reserved.

 


LinMuse.exe

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.

Introduction to Lindenmayer Systems

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.

Note Space

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:

  1. Instrument choice or Midi channel, represented as "i" in the LinMuse language.
  2. Starting time of a note, in seconds, represented as "s" in the LinMuse language.
  3. Length of the note, in seconds, represented as "l" in the LinMuse language.
  4. Octave of pitch, where middle C = 8.0, represented as "o" in the LinMuse language.
  5. Decibels of loudness, from 0 to 84, represented as "d" in the LinMuse langauge.
  6. Pan in stereo from left at -1 through 0 at center to +1 at right, represented as "p" in the LinMuse language.

Turtle Commands

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:

Score Generation

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:

  1. Select the "File" menu "New..." command to create a new .mln file.
  2. Enter an axiom.
  3. Enter one or more productions. Remember, you are not limited to the above commands; you can use any series of characters you like as a symbol, as long as it contains no spaces. You can use meaningful names like "LittleMotive" or "GoBackToF".
  4. Enter one or more pitch-class set transformations. Each one is indentified by a symbolic character or name, and specifies for each of the 12 pitch-classes what pitch-class it is to be replaced with. For example, 0 0 4 4 4 7 7 7 7 0 0 0 moves pitches to fit into a major triad.
  5. Select the "Music" menu "Iterate" command. LinMuse will think, perhaps for a fairly long time, and then open a WCsound dialog displaying the generated score.
  6. Save the generated score using the "File" menu "Save As..." command.

Score Rendering

  1. Select the "Music" menu "Score" command to open the WCSound score dialog, if it is not already open.
  2. You may find that you wish to adjust the lowest pitch, pitch range, or duration of the generated score. You can do this using the "Score" menu "Scale" command's "Note Scale" dialog.
  3. Select the "Output Midifile" menu "Play" command to play the score immediately as a Midi sequence.
  4. Select the "Output Midifile" menu "Edit" command to save the score as a Midi sequence file and open the file with your Midi sequencer.
  5. Create or import a Csound orchestra and wavetable definitions, select instruments into an arrangement, and select the "Output Soundfile" menu "Mix" command to export Csound .orc and .sco files, and realize the score as a soundfile. When that is completed, you may...
  6. Select the "Output Soundfile" menu "Play" command to listen to the soundfile, or
  7. Select the "Output Soundfile" menu "Edit" command to open the soundfile in your waveform editor.