>> Systems
2. Parsimonia
3. EMP Triangle
4. Sinew0od
Patches >>
1. TCP/IP: NIME
2. TCP/IP: Sestina
3. TCP/IP: Reconciliation
4. Re-patching Bach
5. Triangular Progressions
6. Sinew0od for Bass Clarinet
7. Sinew0od for Halldorophone
8. Sinew0od for Buchla
Publications >>
3. Live Coding the Global Hyperorgan
© Mattias Petersson, 2025
System 1: Paragraph
Paragraph is a system for live electronic performance, rooted in my personal composer-performer practice. It is a custom made live coding interface for the creation of and interaction with musical patterns. It includes modular signal routing facilities, discrete as well as ambisonics panning, and is easy to integrate with other human and non-human agents.
It was made as a tool to formalise and simplify things I tend to return to, while at the same time offer surprises and flexibility. The name comes from the idea of writing short paragraphs that are representations of musical ideas, with the notion that everything written within the same paragraph technically refers to the same receiver (a SuperCollider pattern), and artistically to the same musical idea.
In the right column, two video examples are shown. The top one is from preparations for a concert at the Orgelpark, Amsterdam, live coding the Utopa Baroque organ. Below that is a short demo of the system, where prepared lines of code is executed one by one.
In the video example above, such a cantus firmus pattern with the name \chords is defined. This is used to set the scale (scl) in three patterns that independently play over the note degrees of these chords. The score next to the code shows one possible result of four bars, rendered as traditional notation. However, due to the randomness in the patterns, each new rendition will be different.
Syntax
The video example below shows a simple example of a Paragraph pattern named §1 playing a predefined sine-wave synth by setting the instrument parameter i to sine in line 1. In line 2, the note degrees, n, are set by a rnd pattern that randomly picks a value from an array. In this example, the default chromatic scale is used (i.e., not set explicitly), and single note values and chords, expressed as sub-arrays, are combined. A chromatic transposition value, cxp, is added to the note degrees on line 3, also chosen by means of a rnd pattern, but here with a second provided array of probability weights. Both the duration d and legato l parameters on lines 4 and 5 are set by the wht random generator produces uniformly distributed values within the given range. The div parameter on line 6 subdivides and repeats the duration of the current event and the prb value of 0.4 sets a probability for an event to be played to 40%.
The Cantus Firmus Pattern
The concept of having a cantus firmus has been implemented in the language. These are also manifested as patterns, but run independently on a global hierarchical level. Thus, the data output of them could be shared among patterns on the lower level. A cantus firmus pattern consists of two sub-patterns – one for the values and one for the durations of those values. Single or multiple such patterns could be defined, thus enabling the notion of co-players with agency over other pattern algorithms.
For the amplitude a, set on line 8, a sequence (seq) of numbers is used. The array of sequenced values also shows an example of a nested pattern, enclosed in parentheses. Here, the sequence enters a random pattern that chooses between three values four times before moving on. In addition, the values produced are modulated by an independently running sine wave LFO with a frequency of 0.4 Hz and an amplitude of 0.2. As shown here, modulators are expressed with the | symbol, and, besides simple oscillators, they can also be user-defined functions, hardware, OSC, or MIDI inputs.
All sounds generated by or passed through the system can be processed by means of a global amplitude envelope, low- and high-pass filters, a tempo synced delay, dynamics, and saturation. In the above example, the amplitude envelope and saturation are set. In lines 9 and 10, the attack and release times of the envelope have been set to fixed values. Finally, in line 11, the saturation parameter (sat) is sequenced by a pattern that gets its values duplicated a number of times according to another sequence. Here, Paragraph uses exclamation mark shortcut for the duplication of values, found in the standard SuperCollider syntax.
Modularity
In the video example below, I define a name tag for a sample and loads it into a buffer. Here, the provided file path points directly to a sound file. A folder of samples can also be defined in a similar way, here labeled with the tag \kit. All samples in that folder are now accessible as instruments from any pattern, as \kit followed by a number referring to the sample in that folder.
An external MIDI instrument (an Ensoniq ESQm that I have in my studio) is defined using the 'mid' type. Here, in addition to the unique name tag, we also need to supply the MIDI device and port as well as the physical hardware input that the instrument is connected to. Further, I define two send effects. The back-end of the system includes a number of such effects, written as SynthDefs in the regular SuperCollider syntax. Those are defined for use in patterns by providing a name tag and the name of the actual SynthDef to use. The example shows how the send levels of these effects can be controlled in a pattern by referring to their name tags.