[bit.listserv.emusic-l] Algorithmic composition with MOXC

FNELSON@OBERLIN.BITNET (02/09/90)

Here is the info ... hope its not too long.


Algorithmic Approaches
to Interactive Composition
by
Gary Lee Nelson
Professor
Electronic and Computer Music
Oberlin College
Oberlin, OH 44074

Goal

The aim of this research is to produce a personalized system for automating
aspects of my composition technique so that a fine level of control can be
exerted during live performance.  The focus on interaction and realtime
decision making is intended to reintroduce improvisation as a fundamental
component of musical creation with technological media.

Hardware

The equipment used in this project includes a Macintosh SE/30 computer,
with a 1MHZ MIDI interface, Yamaha TX816 and TX81Z modular
synthesizers, a DX7 keyboard synthesizer, and MIDI wind controllers.

The "solo" instruments consist of the DX7, a WX7 MIDI wind controller, and a
custom-designed "MIDI Horn".  The MIDI outputs of these three instruments
are merged through the a Southworth JamBox 4+.  The composite MIDI signal
is then presented to the Macintosh.  Three different MIDI transmission
channels are used so that the keyboard and the wind instruments can be
active simultaneously.  The Macintosh immediately echoes MIDI signals from
the Horn and the WX7 to the Macintosh MIDI output port.  The WX7 and the
MIDI Horn produce no sound by themselves so the solo signals are routed to
the TX81Z.  The TX816 functions as an accompanying ensemble of 128
players grouped in eight timbral choirs.  A Roland SRV2000 digital
reverberation unit, a Fostex 2050 mixer (for the TX8), and a Tascam M106
mixer round out the system.  All components are mounted in portable cases
for travel.

Software

All of the programs are written in Think C for the Macintosh to achieve
maximum speed, flexibility in development, fine tuning, and alterability.
The skeleton of my programs is MOXC.  MOXC was written at Carnegie Mellon
University by Roger Dannenberg for the IBM PC.  MOXC was originally ported
to the Macintosh by John Maloney at CMU and further optimized and
enhanced by the present writer.   MOXC is in the public domain and can be
purchased from the Center for Art and Technology, Carnegie-Mellon
University, Pittsburgh, PA 15213.  My last information  was that they were
charging $20 for a disk with all source code and a nice manual.  Both IBM
and Mac versions are available.  You must purchase the appropriate C
compiler separately.

MOXC consists of three parts, a parser, an interpreter, and a scheduler.
The parser is an interrupt driven MIDI reader.  It buffers MIDI bytes,
collects them into data packets (key up, key down, program change, etc.) and
immediately informs the composer's program that a MIDI event has
occurred by calling event handling functions.  Standard means for filtering
MIDI input data are provided so that voluminous signals like keyboard
aftertouch can be removed.

The interpreter consists of a set of composer-written functions that handle
each MIDI event.  These functions are given prescribed names by the parser
and must be present in the user program.  Events that are of no interest to
the user can be discarded by providing empty functions.  The instructions in
the event handlers constitute the composer's protocols for interaction
between solo events and events generated for the accompaniment.

The scheduler maintains a queue of pending events and executes them when
their action times arrive.  The interpreter can post future events with a
scheduling function.  The arguments of this function give the time delay
before the event is to occur,  the function that is to be executed, and the
arguments to be used for the scheduled function.  Scheduled functions may,
in turn, schedule other events so that event chains may be launched.  The
CMU scheduler operates in a polling mode but my version will eventually be
interrupt driven.

The simplest use of MOXC is the communication between the MIDI wind
controllers and the TX81Z for the solo voice.  Input events from the wind
controllers are parsed in MOXC and passed to the interpreter.  The
interpreter transposes the solo channel to one of the TX81Z receive channels
and echoes the event.  Likewise, the WX7 transmits on channel 3 and
produces sound by mapping onto channel 10, a second TX81Z receive
channel.  The parser and interpreter are fast enough to permit performance
without noticeable time delay as the MIDI signals pass through the
Macintosh.  The scheduler has, thus far, permitted quite complicated real
time algorithmic composition without distortion of musical time.

Programming Techniques

The works composed to date are represented as program modules or
function groups that define the musical materials for each piece and specify
strategies of interaction.  Materials range from predefined sequences of
pitches and durations to real time composition algorithms.  Each module
includes an initialization function that loads appropriate voices into the
synthesizers and sets performance parameters.

Global variables determine how the "orchestra" reacts to the solo performers.
Reactions can be running accompaniments where the soloist takes on the role
of conductor by shaping large scale parameters such as dynamics, tone color,
tempo, and spatial location.

Tighter interactions involve interpretation of particular combinations of solo
events as "seeds" for accompaniment algorithms.  This provides a rich
environment where the soloist can begin by improvising and fine tune a
piece by learning and selecting actions and the consequent reactions.
My most recent experiments involve real time fractal algorithms and the
generation of hierarchical formal structures with  self-similarity through
various layers.

Performance Techniques

The main performance strategy is the mapping of MIDI events from the
WX7, Horn, or keyboard into wider musical domains.  For example, the
continuous changes in breath pressure are mapped into key velocity  so that
the soloist can control the dynamics and timbre of the accompaniment.  The
foot switches, pedals, and other continuous controllers can be mapped onto
any parameter of the accompaniment or composition algorithm.

A particularly promising technique was inspired by Max Mathews and his
digital drum.  A sequence or tune is stored in the Macintosh.  When the
soloist holds a particular fingering the program steps through the sequence.
If the soloist wants to play freely, a succession of different notes are
fingered and the Macintosh echoes them without change to the TX81Z.  This
strategy introduces a performance mode where the player can concentrate
on rhythm and articulation.

Conclusion

The results described briefly here represent about two year's work with an
exciting set of inexpensive yet flexible tools that have only recently come
together.  There are many alternatives for organizing interactive composition
and performance with computers and digital synthesizers.  It will be
essential in all work of this type to maintain an openness in musical thought.
We must make no assumptions about the nature of musical instruments or
music programs.  We are on the verge of a fundamental change in the way
music is made.  We can only guess what the art will be like in an
environment where individual expression is free from the technological,
esthetic, and social constraints that have characterized the music making of
the past.

Samples

If you get into MOXC and want to see the source code for these pieces, send
me a blank diskette and return postage.

I have a cassette of the music I have performed in more than 50 concerts
since 1988.  If you would like a copy, send me $10 to cover copying costs
and postage.  If anyone is interested, I can post program notes that describe
the music more than the technology.