PETERVANHAAFTEN.com //home//discography//research//cv//contact
E.L.A.P.S.
E.L.A.P.S.
an [E]xpressive [L]ive [A]lgorithmic [P]erformance [S]ystem

A system for improvised electroacoustic music using algorithmic processes, tangible control interfaces, and the open-source Pure Data. A four track E.P. of live music, Process & Control, composed in real-time with the E.L.A.P.S. system is available now through Julien Bayle and François Larini's Bordille Records.

NOTES ON THE FUTURE OF E.L.A.P.S.

E.L.A.P.S. has been steadily rebuilt over the last many months into the upcoming PVHLib, a GPL licensed library of high level objects for algorithmic composition in Pure Data. This library has already found its way into several projects, including the two player space-survival game W.U.R.M.: Escape from a Dying Star, and Erin Gee's Swarming Emotional Pianos.

Likewise, PVHLib also forms the basis of Portable-X, a score-based live performance system for algorithmic music. Portable-X is designed specifically for public-space guerrilla performance, using an 18AH SLA battery, compact low-power amplifiers, and home-stereo speakers.

While Portable-X is still under development, the project code base is available on the Portable-X Github.

Four example objects from PVHLib.

From left to right: a four operator FM synthesizer, an automated 12 tone serialism generator, an eight step clock sequencer with adjustable glide per-step, and a number transformation system inspired by the work of Tom Johnson.

E.L.A.P.S.: Studies in Improvised Live Electronics

    The following paper will serve to document the on-going development of an expressive live algorithmic performance system (E.L.A.P.S.). The project goal entails the creation of a system for improvised electroacoustic music, utilizing an assortment of hacked external tangible input devices, and the open source data-flow programming language Pure Data.

    E.L.A.P.S. is currently comprised of four individual performance instruments, which are synchronized together in time. The first of the performing/composing instruments deals with only note trigger information, while the second and third deals with defining the particular note frequency which is triggered. The fourth instrument records the outgoing streams for further re-processing, and allows for meter synched re-assembly of recorded signals.

    Sound sources controlled by the second and third instruments (the Markovian chain sequencer and serialism generator) are virtual instruments, hosted in Plogue Bidule. Midi note and clock information is routed into Bidule, and audio signals are sent back out over Jack into Pure Data for re- structuring and processing.


Figure 1
A block diagram, of the current E.L.A.P.S. system.

Below is a brief outline of each of the four instruments designed for this project.

1) Euclidean rhythm generator.

    This instrument allows for the generation of 16 different rhythms, controlled from a 16 x 16 led grid controller (the Yamaha Tenori-On). Each of the 16 columns designates a different instrument to control. The first 8 columns are wired into an 8 voice sampler built in Pure Data, while the 9th to 16th columns are sent to control the rhythm of each stream in the 12 tone serialism generators and the Markovian chain sequencer. Using an external BCR-2000 controller, other parameters of the Euclidean generator be varied.

    Pressing the button 'hits' on the BCR-2000 allows the user to select the number of 'hits' per bar with a given row/column selection on the Tenori-On, while selecting 'beats' lets the user select the number of beats per bar for a given number of hits per row/column selection. The top 8 rotary controllers on the BCR-2000 control amplitude for the included sampler, while the next 8 encoders control the amplitude of the Markov sound sources in Plogue Bidule.

As both the number of hits per bar and the number of beats per bar are selectable from the grid, it is very easy to quickly assemble interesting polyrhythmic sequences.

2) 12 tone serialism generator.


Figure 2
A 12 tone matrix, automatically generated from a randomized prime row.

    A 12 tone matrix is built up automatically from a randomly created prime row (see Figure 2). The individual row transformations, inversions, retrogrades, and retrograde inversions are performed by incoming triggers from the Euclidean rhythm generator. There are currently four independent tone matrix generators implemented in the E.L.A.P.S. System.

    Using a dedicated pad controller, it is possible to select the specific kind of matrix playback for each individual tone matrix stream. The “row select” slider allows the performer to choose which particular row is played back for a given 12 tone stream, while the top four pads allow a choice between prime row, inversion, retrograde, and retrograde inversion.

    As well, using the dual "between pitch" sliders it is possible to narrow the scope of the tone generator, and output only a select range of pitches. Using the "random octave" slider, the performer can roughly define at which octave each pitch in the matrix will be played. Finally, the “random voices” slider allows for weighted control of the number of voices played back at any given time, to a maximum of four.

3) Markovian chain generator & sequencer.

    Using an 8 x 8 led matrix controller (the KMI Quneo), a system was developed for speedy Markov chain analysis of incoming midi note data. In 'record & analyze' mode, the system allows for the recording and subsequent analysis of 8 'groups' of note sequences, with light feedback.

    Each group has 8 'blocks' available for the user to record into allowing for 64 total note sequences to be recorded and analyzed in semi-realtime. The user begins the recording process by pressing the 'play' and 'desired block' buttons at the same time, and subsequently entering in note data on a MIDI keyboard. The first recorded block in a particular group is set to automatically start performing after the 'stop record' button on the Quneo is pressed.

    In 'chain sequence' mode, each of the 8 blocks in each of the 8 groups can be sequenced across time. Time exists on the X axis of the grid, while block selection exists on the Y axis. It is very simple to tell which block is playing at which point in time, as the current bar is highlighted by its given led column. Green lit columns indicate the current bar, while a lit red light indicates that a particular block will be played at the particular point it is placed in time.

    At the moment, only four streams of the Markovian chain sequencer are enabled, and these are controlled by the 13th to 16th Euclidean rhythm outputs. The system currently uses a second-order Markov chain analysis, but in the future it will be possible to allow for either first-order or second- order analysis.

4) TO-MLR, a live beat-slicer.


Figure 3

TO-MLR user interface.

A 15 track live beat-slicing system, controlled by the Tenori-On and loosely based on the Monome application MLR by Tehn.

    This implementation is a little different. The top row of the grid controller indicates which rhythms are currently playing. The rows below those each display the current start position of a particular recorded sample. Each loaded sample is automatically divided into 16 equal parts, and by selecting a particular row position, the start position of the sample is changed.

    The quantization of sample playback start position is selectable from a set of buttons contained on an external midi keyboard. Quantization is selectable one whole bar, half bar, quarter bar, and sixteenth of a bar. This allows for the user to switch quickly from making rapid sample position modifications, to making slower changes which unfold across time.

    Each sampler layer (15 in total) has it's own envelope, and allows for independent speed and pitch shifting via a USB keyboard controller. There is an option to load in pre-recorded samples via a graphic interface (see Figure 3), however by default TO-MLR is set to record samples from incoming signals out of the Euclidean rhythm machine.

    The user can select which sample layer to record into through the USB keyboard, with multiple sample layers available to record into at the same time. As well, the user can select exactly which of the 31 channels is recorded into the layer, while also having the option to select recording from 'all sampler channels', 'all Markov channels', 'all MLR channels', and 'FX channel'.

    An offline pitch and time stretch system was included, using the free Rubberband library. The library runs in a command terminal, and messages are routed of Pure Data into the console using the [shell] object. The system allows for up to 4x sample stretching, and pitch shifting of -5 to +5 octaves, all of which is controlled externally by the keyboard interface.


Apart from the described four core instruments, five separate systems were created for midi translating, master clock control, automated spatialization, and effect processing.

A) Yamaha Tenori-On translator.


Figure 4
Yamaha Tenori-On MIDI to OSC Translator.

    The Yamaha Tenori-On sends and receives 14 byte sysex messages which are translated here into OSC messages. The OSC messages for 'light on' and 'light off' are compatible with the Monome serialOSC protocol, which should allow owners of the Tenori-on to benefit from some of the hundreds of pre-created Monome applications available at: http://monome.org/docs/app.

The translator features a graphical interface for easy debugging of patches (see Figure 4).

B) Master clock controller.

    The beats-per-minute and beat division is remotely definable, using a combination of potentiometers (available on the MIDI keyboard controller), and a USB keyboard.

    Two potentiometers allow for control of both the current tempo, as well as how long to 'glide' into the next selected tempo. Four BPM preset buttons, and one 'record current BPM into slot' allow for efficient control of tempo modulation.

C) Automated spatialization.

    Spatialization of the internal sampler, Markovian chain sequencer, and 12 tone serialism streams are all determined automatically by a series of cosine stereo panners,

    The particular spatial position of a given input stream is defined by both the relative pitch of the stream, and a randomized number. The spatial position of a stream is never totally fixed, and will change across time, with the added benefit of a randomly selected 'glide' parameter.

D) FX system 1 (foot pedal control).

    A basic effect system was created for the project, with selectable input and output. Fifteen different effects are included, in three groups of five. Effect choices include distortions, waveshapers, filters, ring modulation, frequency modulation, buffer modulation, bit crushers, reverb, and a variety of delay choices.

    The performer can select a specific instrument, track, or group to apply effect via the number pad on a USB keyboard. An effect can be selected using a midi foot controller, and effect parameters can be modulated through sliders 5-8 on the midi keyboard interface.

This effect system can currently only handle one stereo input at a time.

E) FX system 2 (joystick control).

    A second effect system was developed to allow a greater range textural control, using a standard USB joystick as a control interface.

    The six buttons on the left hand side of the joystick allow the performer to select between six different effect choices (three filters, one delay, and two buffer scanners). The top four buttons on the joystick allow for a selection between four different input streams (internal sampler, 12 tone/markov streams, TO-MLR, or all groups).