{RK, event: SC meeting, place: CUBE, date: 180120}

It is not a done piece, it is a kind of project in a state of development, but part of the reason for doing it was to give Hanns an example how I work with the patterns library. The idea is a little melodic cell that is repeated … The basic idea is to say: I will take every distinct subgrouping of pitches from that phrase. Let us take three notes … I will take every distinctive one. And then I will find how to play every one of those notes in combination in that grouping. So these are some little extracted sub melodies from the larger sequence. It just turns out that doing this in SuperCollider, it took a bunch of code, because although array manipulations are really great, they are not necessarily set up to do exactly this. This kind of idea is atemporal. You do not want to do it in a sequential fashion. You want to take an array and expand all these possibilities. This is a kind of question that probably turns out to be much nicer to do within a functional programming language. Because it is a set of solutions to a question, not that I am there.

var pitchsets, timepoints, patterndurations;

var lPat = Pseq( (8..12).mirror, inf).asStream;

var rPat = Pseq( (5..8).mirror/25, inf).asStream;
var length = lPat.next;
var cantus = (Pbrown(-6, 6, 3) ).asStream.nextN(length);
{ cantus[cantus.size.rand] = \r }.dup((~length * rPat.next).asInteger.postln);
~pitchsets = cantus.asSet.asArray.powerset.select{ | v | v.size == 3};

pitchsets = pitchsets.collect(_.scramble);

timepoints = pitchsets.collect({ | pset | ~computeDurs.(pset, cantus) });

patterndurations = timepoints.sum;

{author: RK, origin: program notes} The Fifth Root of Two derives from a fascination with the musical procedures of Javanese gamelan. Most gamelan instruments are of limited range, so melodic lines extending beyond an octave are never explicitly expressed. Those instruments that have extended range are generally softer, insinuating presences in the overall texture. Instruments playing the basic thread of the music are in unison or at doubled tempo, following specific procedures of elaboration to provide the additional note events. It is as if the octave ambiguity of the Shepard tone has been given full expression in a music of melodic mirage. The fifth root of two attempts an exploration of this musical space following different rules.

The Fifth Root Of Two

Ron Kuivila, generative sound installation, 2018

24-channels generative sound installation realized by Ron Kuivila within the Almat artistic research residency program, presented during the Open CUBE concert, 26 Jan 2018.

{function: contextual}

When calling ~computeDurs two inputs are given:

pset: a set of three pitches (subpattern), found in

cantus: a pattern of 8 to 12 notes

A pset is a collection of three arbitrary pitches found in cantus. In other words, a pset is a subpattern of cantus.

Therefore pset is also a set of three notes that corresponds to three specific time points, or occurrences, within the pattern cantus. Given any pset, ~computeDurs computes the duration of each note of the subpattern, with respect to the occurences found in cantus.

For example,

given a pattern p

and a subpattern sp

first it looks for the occurences of c in p

then it computes the distances (durations) between occurrences

the sum of the distances gives the whole duration of sp

if (stutter == 1) {
pattern = [\r, Pseq(argpattern, inf)];
} {
pattern = [Pseq(\r.dup(stutter)), Pseq(argpattern.clump(stutter).stutter(stutter).flat, inf)];
durs = durs.stutter(stutter)/stutter;
};
Ptuple([Pseq(pattern), Pseq(durs * 0.2)])

Thus we obtain diverse pairs of sets of three pitches and three durations, all derived from a common pattern. These are the core building blocks of the installation: each subpattern is assigned to a different speaker and they all run in parallel, together with the original cantus, in a Gamelan fashion. A 'stutter' variable define if and how many time a pattern is repeated.

{RK, origin: program notes}

In this case a short melodic line of 8 to 12 pitches is generated via Brownian noise.

Then every distinct sub-collection of three pitches is taken from the original line.

Since pitches are repeated, this yields multiple collections of time points where those three pitches can be found.

The three pitches are then played, sequencing through those time points until they are all exhausted and in synchronization with the basic melodic line. Each sub-collection is assigned to its own speaker among the 24 speakers in the CUBE.

p = [ 3, 2, 1, 0, -1, -4, -5, -2 ];

sp = [-2, 0, 1];

occurrences = [7, 3, 2];

durations = [7, 4, 7]:

duration = 18;

---
meta: true
persons: RK
event: openCUBE
place: CUBE
artwork: FifthRootOfTwo
date: 180126

keywords: [installation, generative, patterns]
---

{hhr, 200824} Alternative rendering of a visualisation of twelve iterations of the piece's parts. Each column is one iteration with the different voices simply distributed as rows. Each voice shows the ordinal numbers of the pitches (zero to twelve) in rising vertical positions. Time passes from left to right. Source code.