living circuits I
An entirely autonomous performing/composing instrument, using 12 tone serialism.

Written in Pure Data, an internal variable score defines a semi-fixed structure. A 12 tone pitch matrix is automatically built, and the various transformations, inversions, and retrogrades are triggered to playback via a Euclidean rhythm generator.

Audio output is routed back into the system for automated processing and spatialization via scored event triggers, and weighted random number generators.

Every performance is unique.

Peter van Haaften -- Living Circuits I


Living Circuits I is comprised of two broad components. The first of these is a micro/macro score editor (described below in part A), the second a collection of algorithmic control processes (described in part B). Briefly, the score editor is used to define general sets of values for algorithmic control processes across time.

PART A (Score Editor)

Figure 1, the micro score editor.
Figure 1, the micro score editor. (click to expand)

There are two score editors used in Living Circuits I, a micro and a macro editor.

The micro editor is used to visually define each parameter of an individual score message.

        There are 128 score blocks available in the score editor, and for each block there are eight possible score messages. Using the micro editor, the composer begins by writing message one into block one. After message one has been written, it can be copied and pasted into each of the following seven messages in block one.  

       Each particular element controlled by the micro editor is described in part B of this paper. Adding subtle or dramatic changes to each message of a block allows the composer to define how varied or alike each performance of that particular score block will be. Score messages are organized as follows:

Figure 2, score block organization.
Figure 2, score block organization. (click to expand)

For each score block, a single score message is played for X number of bars, and Y number of score messages will be performed before the next score block is triggered.

        The message to be performed is chosen using a random number generator, from the eight possible block messages. As soon as a particular message has been chosen, it will not be played again until all other messages within that block have been performed. The global organization of messages across time is handled by the macro score editor.

Figure 3, the macro score editor.
Figure 3, the macro score editor. (click to expand)

        The columns of note in the macro editor are NUMtimes, and NUMchange. NUMtimes defines how many bars to play a particular chosen message, while NUMchange defined how many messages to play (of NUMtimes length) before switching to the next block. Currently, blocks are always played out in a descending sequential order, from block 0 to block 127.

        The 'alt1', 'alt2', 'alt3', and 'alt4' number boxes have yet to be implemented into Living Circuits. In future revisions of the software, it will allow the composer to identify up to four alternate score block destinations, following the performance of the currently selected block. In this way, it will be possible to add a much greater degree of divergence and flexibility, allowing for performances of varied structure and length.

PART B (Control Processes)
Figure 4, global block diagram..
Figure 4, a basic block diagram of Living Circuits I. (click to expand)

        The system described in the above diagram is for a summarized four instrument version of Living Circuits I, while the completed piece features 16 individual instrument streams. The internal sampler has been left out of the diagram for simplicity.

There are eight main components to Living Circuits I. These are as follows:

1) Master metric clock.

        A traditional meter based clock is used to control when events are triggered in time. The clock itself has a logic input, allowing the score to modulate tempo, note division, and bar length.

2) Clock divisions.

        For each of the 16 instrument streams (eight tone matrix generators, and eight sample players), it is possible to select a different note division. The clock defaults to a 16th note division, both for the global clock and each of the 16 divisions. New clock divisions per instrument can be defined directly in the micro editor window.

3) Master variable score.

        A master score is used to create some level of fixed structure throughout the piece. At measure positions defined in the Macro score editor, new control information is passed to the Euclidean rhythm generator, tone matrix generator, and automatic signal processors.

        Each score message is composed of 168 unique individual elements. Each of these defines a wide array of compositional variations. An example of a simple, summarized, 18 element one measure score message is as follows:

numoctaves1 7; numvoices1 3;
numoctaves2 2; numvoices2 1;
numoctaves3 1; numvoices3 1;
numoctaves4 5; numvoices4 2;
processorinst1 2; eucin1 8;
processorinst2 3; eucin2 9;
processorinst3 5; eucin3 5;p
processorinst4 1; eucin4 2;
mastbpm 75;mastbeatsperbar 13;

Which translates like this...

        a) 'numoctaves' instrument 1-4 controls how many possible octaves a particular pitch can be played in.

        b) 'numvoices' instrument 1-4 controls how many possible voices can be played at once.

        c) 'processorinst' instrument 1-4 controls the kind of processing used on each instrument (there are 16 processors to choose from).

        d) 'eucin' instrument 1-4 defines how many pitches will be triggered in a given bar, by the Euclidean rhythm generator. Since eucin1 is set to 8, there well be eight hits in each bar.

        e) 'mastbpm' sets the tempo of the master clock in beats per minute.

        f) 'masterbeatsperbar' a global setting for the number of beats in a given bar. In this example, every bar will have 13 beats.

4) Euclidean rhythm generator.

        The Euclidean rhythm generator receives two integers from the master score. The first integer defines the number of hits per bar for a given instrument, and the second integer describes the number of beats per bar for a given instrument. Start and stop are defined as well by the master score. Rhythms are outputted as bang messages, and routed directly out to both the tone matrix generator, and the internal sampler.

5) Tone matrix generator.

Figure 5, a 12 tone matrix compiled into COLL object.
Figure 5, a 12 tone matrix, automatically calculated in Pure Data. (click to expand)

        A 12 tone matrix is built up automatically from a table of possible prime tone rows. The individual row transformations, inversions, retrogrades, and retrograde inversions are controlled by incoming triggers from the Euclidean rhythm generator.

        Score messages can be sent to the tone matrix generator, to allow triggering multiple consecutive notes at once (allowing for multiple voices). A 'numoctaves' message can also be used to allow for a wider range of pitch choices; where each consecutive frequency is added to a random multiple of 12.

        It is possible to select the specific kind of matrix playback for each individual tone matrix stream. Alternatively, a weighted random number generator decides whether a prime row, inversion, retrograde, or retrograde inversion is outputted.

        There are currently eight tone matrix generators available, as controlled by eight individual Euclidean rhythm streams. Each generator looks to the same original tone matrix.

5) Internal Sampler.

        To accompany the tone matrix generators, eight internal sample player instruments are included. Each sampler is designed to load a 48khz 24 bit wav file, and the sample preset choices for each stream and measure are selectable via the Micro score editor window. Weighted random number generators are used to create shifts in pitch and playback direction (forwards, reverse) of the given sample. Generally, a sample has a 5-20% chance of being affected in this way.

6) Virtual instrument rack.

        A rack of eight virtual instruments are hosted in Plogue Bidule. Instrument choices allow for subtractive, wavetable, granular, and additive synthesis. Patch selection for each instrument is dynamically modifiable, using patch change score messages.

        Midi clock and note data is sent out of Pure Data, and into Plogue Bidule. Audio signals from each of the eight instruments are routed back into Pure Data for processing via JACK.

7) Automatic signal processors.

        Each of the eight automatic signal processors receive a different incoming audio signal from Plogue Bidule (via JACK). Each signal processor itself contains 16 selectable signal processors, controlled by weighted random number generators.

        Processing effects available in Living Circuits include several kinds of delay, bit crushing, high pass, low pass, band pass, comb filter, and pitch shifting. Effects are clock synchronized, and automatically modulated. The Soundhack library is used extensively.

8) Mixer and stochastic spatialization system.

        Signals are routed out into a 16 channel score-controlled mixer, and sent through a stereo stochastic spatializer. Spatialization of the individual channels is decided by weighted random number generators. Lower frequencies are more likely to appear at the centre of the field, while higher frequencies are more likely to appear at the left or right.

PART C (Future Goals)

        Some modifications likely to be included for the next major version: automatic recording/beat slicing, external pitch and speed shifting using the Rubber Band library, improved 'automatic processors', score block 'alternate choice' mode (described above), and automated spatialization using distance based amplitude panning (DBAP).

        More details are to come.