Interactive improvisation with sound-objects

Lady playing koto. Public domain, source: Wikimedia

This grammar (namely “-gr.koto3") is an improvisation model running on the Bol Processor BP2 connected to a Roland D-50 synthesiser. The choice of this synthesiser was crucial for a good rendering of the sound imitating a Japanese koto.

The SUB grammar

The underlying model (SUB grammar) is a one-dimensional cellular automaton using substitution rules: at each step of the computation, a set of randomly selected rules is applied to the work string. Conversely, in a RND grammar, a new rule would be selected each time the previous one was applied. For more details, see a presentation of "-gr.koto3" on the Bol Processor ‘BP3’ and its PHP interface page.

In subgrammar #2 we see a competition between constructive rules, such as gram#2[8] and gram#2[11] which increase the length of the work string, and destructive rules, such as gram#2[10] and gram#2[15] which decrease its length.

The weight of gram#2[12], initially set to 100, decreases by 10 each time it is applied, until the rule is invalidated.

SUB
gram#1[1] <100> S --> _vel(127) _volume(40) X X X X Y X X X X Y X X X X
gram#1[2] <K9> X --> a  [Weight is controlled by K9, see Interaction]
gram#1[3] X  --> b
-----
SUB
gram#2[1] Y --> Y
gram#2[2] #? ?1 --> #? ?1  [Keep leftmost symbol]
gram#2[3] ?1 #? --> ?1 #?  [Keep rightmost symbol]
gram#2[4] } --> }
gram#2[5] , --> ,
gram#2[6] <5> a --> a
gram#2[7] <30> a b a --> a a
gram#2[8] <100> #({) a b a --> {5,a c b,f f f - f}
gram#2[9] <5> b --> b
gram#2[10] <30> #({) b a b #(}) --> b b
gram#2[11] <100> #({) b a b --> {3,b a b c b a,f a f}
gram#2[12] <100-10> #({) #a b #(}) --> #a c b
gram#2[13] c c c -->  c a c
gram#2[14] c a c --> b a b
gram#2[15] <50> ?1 ?1 ?2 ?3 ?4 ?4 --> ?2 ?3
gram#2[16] <K9> ?1 ?1 ?1 --> ?1
gram#2[17] <K9> ?1 ?1 --> ?1
-----
SUB
gram#3[1] <40> Y --> <<f>>
gram#3[2] <50> Y --> <<chik>>
gram#3[3] <1-1> ? #? --> ? Silence _script(MIDI send Continue) #?
gram#3[4] <50> Silence --> - - - - -
gram#3[5] <15> Silence --> - - - -
gram#3[6] <8> Silence --> - - -
gram#3[7] <8> Silence --> - -

Rules in subgrammar #2 are applied until none of them can be a candidate. Then the rules in subgrammar #3 are applied, producing the out-time sound-objects <<f>> (a bass note) and <<chick>> (a chord).

During the improvisation, the work string is played at each step of its transformation. The end of the transformation is indicated by the <<f>> and <<chick>> sound-objects.

Sound-objects

The sound objects "a", "b", "c", "f", "chick" are defined in a sound-object prototype file called "-so.koto3". Some of them have specific properties that force a relocation to satisfy topological constraints. For example, "a" must maintain continuity with the preceding object (as shown in the image), which may cause it to be moved into the past.

Time-setting

The time-setting algorithm takes into account all the constraints to create a piece that may not fit exactly into the metronomic beat pattern. Below is an example of the final piece created using this grammar (played 3 times):

A piece generated by "-gr.koto3" played on a Roland D-50 synthesiser, played 3 times

The current version of Bol Processor displays more details. For example ,in the following variation:

{5,a c b, f f f - f} a c b {5,a c b, f f f - f} a b a

The two relocations of sound-object "a" are displayed as a broken arrows with their tails turned to the side it came from:

Relocated "a" are marked with broken arrows.
A sound-object "a" moved to the left (forward) by 750 ms on the top line, and another one moved forward 450 ms on the second line.

External control

In this grammar, parameter K9 is set to follow the position of a controller (e.g. the pitchbend or a pedal on the D-50), assigning a value from 0 to 100. This value is the weight of the rules gram#1[2], gram#2[16] and gram#2[17]. The higher the weight, the more "a" and the less "b" in the string; in addition, the final string becomes smaller due to the higher weight of the destructive rules gram#2[16] and gram#2[17].

Example

Below is an example of improvisation played in real time MIDI:

An improvization of "-gr.koto3" produced by BP2.9.8 and played on a Roland D-50 synthesiser

The following video illustrates the grammar at work on BP2.9.8 — unfortunately with a GeneralMIDI "koto" sound:

References

Leave a Reply

Your email address will not be published. Required fields are marked *

« Translate