Two performers in a feedback loop, imitating each others sounds, introducing variations, playing with the timing, introducing new material, creating a musical structure in the widest sense. This is one of the constellation Phyla explored in our minimal improvisation research and that has inspired me when focusing on software to make music.
Look at my previous post to see some footage and also an emulation using Ableton live and Reaktor.
In this post, I want to show how that constellation can be used as a template for creating evolving musical structures in Sonic Pi.
I´m super happy about this piece of software because it gives me the ability to craft music in the very same way that I think about it. That is, the structure of the code of a piece of music is very close to how I think about this piece.
Let´s have a closer look at the constellation of two performers in a feedback loop to illustrate this point. There are:
– two performers
– action: producing sound
– relation: one after the other, and so on
– variation: slight changes performers make to the imitation
– regularity: the sounds following in a more regular or irregular fashion
– individuality: a tendency to either stick with one strand of sound(thus showing no individuality) or alternate between two
Sonic Pi offers procedures to emulate such a constellation, have a listen to two different realisations, the first one being rather calm…
…while the second example is more rhythmic:
Both versions are generated by the same lines of code. The first lines allow to bypass the usual determinism of Sonic Pi and get unpredictable results.
I hope my additional notes give you an idea how the code works. It is not perfect, you may get an error when trying to run it in Sonic Pi. Run it again and it will work, I´m still figuring out why that occurs. Look at the Sonic Pi Forum for details.
Have fun!
#Minimal Improvisation Imitation Simulation 3 t = Time.now.to_i#Setting the random seed according to the time use_random_seed t#Results in different music every time puts rand use_synth :sine#choosing the sine synth live_loop :variables do#defining the variables that can be changed during performance set :variation, 0.25#controls the amount of variation over time: 0 = no variation, 1 = maximum variation set :individuality, 0.5#individuality 0 results in gradual variation of one sound, maximum individuality of 1 results in two alternating sounds, each varied over time set :regularity, 0.6#high regularity (1 being the highest) results in less variation of inter-onset durations set :sprung, rrand(0.8, 1.2)#determining how far a varied pitch may differ from the previous one set :atk, 0.2#setting the maximum duration of the attack of the sounds set :rel, 2.5#setting the maximum duration of the release of the sounds sleep 5 end #Setting the starting variables #for two alternative strands of sounds set :pitch1, rrand(45, 85)#pitch set :lautst1, rrand(0.1, 1.2)#dynamics set :einschwing1, rrand(0, get[:atk])#attack set :ausklang1, rrand(0.1, get[:rel])#release set :freq1, rrand(30, 130)#low-pass filter set :wartezeit1, rrand(0.08, 3.8)#inter-onset duration set :pitch2, rrand(45, 85) set :lautst2, rrand(0.1, 1.2) set :einschwing2, rrand(0, get[:atk]) set :ausklang2, rrand(0.1, get[:rel]) set :freq2, rrand(30, 130) set :wartezeit2, rrand(0.08, 3.8) set :action, [get[:pitch1], get[:pitch2]].choose#choosing which pitch to use first set :zeit, [get[:wartezeit1], get[:wartezeit2]].choose#choosing which inter-onset intervall to use first with_fx :reverb do live_loop :dialogue do if rand < get[:variation]#determining wether any variations on sound parameters should occur if rand < get[:variation]#if so, should the pitch be redifined? set :pitch1, rrand(45, 85)#if so, a new pitch is set randomly end if rand < get[:variation]#the same procedure applies to dynamics... set :lautst1, rrand(0.1, 1.2) end if rand < get[:variation] set :einschwing1, rrand(0, get[:atk])#...attack... end if rand < get[:variation] set :ausklang1, rrand(0.1, get[:rel])#...release... end if rand < get[:variation] set :freq1, rrand(30, 130)#...and low-pass filter. end end if rand > get[:regularity]#determining wether any variations regarding inter-onset intervall(that is the time between two sounds) should occur if rand > get[:regularity]#if so, should the first inter-onset intervall... if one_in(2) set :wartezeit1, get[:zeit]*get[:sprung]#...be multiplied... else set :wartezeit1, get[:zeit]/get[:sprung]#...or be divided? end end if rand > get[:regularity]#if so, should the second inter-onset intervall... if one_in(2) set :wartezeit2, get[:zeit]*get[:sprung]#...be multiplied... else set :wartezeit2, get[:zeit]/get[:sprung]#...or be divided? end end end if rand < get[:individuality]#individuality 0 results in gradual variation of one pitch, maximum individuality of 1 results in two alternating pitches set :action, get[:pitch1] end play get[:action], amp: get[:lautst1], attack: get[:einschwing1], release: get[:ausklang1], cutoff: get[:freq1], pan: 0.8#a sound is played if rand > get[:regularity]#regularity 0 results in constant redefinition of inter-onset intervalls, maximum regularity of 1 in very gradually changing inter-onset intervalls set :zeit, get[:wartezeit1] end sleep get[:zeit]#the inter-onset intervall is applied if rand < get[:variation]#the above code within the live_loop :dialogue defined the first of two possible strands of sound varied over time if rand < get[:variation]#what follows from here is a duplicate defining the second strand set :pitch1, rrand(45, 85)#I suppose there is a more efficient way to code this, any suggestions? end if rand < get[:variation] set :lautst1, rrand(0.1, 1.2) end if rand < get[:variation] set :einschwing1, rrand(0, get[:atk]) end if rand < get[:variation] set :ausklang1, rrand(0.1, get[:rel]) end if rand < get[:variation] set :freq1, rrand(30, 130) end end if rand > get[:regularity] if rand > get[:regularity] if one_in(2) set :wartezeit1, get[:zeit]*get[:sprung] else set :wartezeit1, get[:zeit]/get[:sprung] end end if rand > get[:regularity] if one_in(2) set :wartezeit2, get[:zeit]*get[:sprung] else set :wartezeit2, get[:zeit]/get[:sprung] end end end if rand < get[:individuality] set :action, get[:pitch2] end play get[:action], amp: get[:lautst2], attack: get[:einschwing2], release: get[:ausklang2], cutoff: get[:freq2], pan: -0.8 if rand > get[:regularity] set :zeit, get[:wartezeit2] end sleep get[:zeit] end end
When we were beginning the research on minimal improvisation, we started in the Phyla duo constellation, Jennie Zimmermann and me: doing very little, just repeating one sound, variating it over time.
We did not create very elaborate musical structures, but subtle variations of sounds in relation. The sounds we made could be imitative or contrasting, our activities could be synchronized, like a call-and-response or, more or less, unrelated.
When we began working with a group of musicians and dancers, the basic constellation of two people responding to each others actions remained and important topic:
At the time, I knew that these interactions demonstrate principles that are relevant to all time-based arts. Repetition gives a sense of continuity, variation keeps things alive. Within the minimal improvisation research, we put a lot of emphasis on the process, but at the same time, individual intentionality became very apparent. Within improvisations, it felt like we were witnessing an alchemic process: sounds or movements, that were initially unrelated started to become ‘music’ or ‘dance’, started to ‘make sense’.
So I was thrilled when I came across ‘comparing notes‘ by Adam Ockelford – he explains music using the very same categories that we concentrated on in our research (quoted from ‘comparing notes, page 61):
‘…imitation provides a sense of agency, which leads to the perception of musical structure, which enables music to make sense.´
Ockelford is not particularly interested in minimalism or improvisation, he comes from a classical background and mainly refers to written scores by dead male composers. Still, I feel that the minimal improvisation approach is almost like a practical demonstration of his ‘Zygonic Theory‘. A meta-music stripped of virtuosity, stylistic conventions such as harmony, voice-leading, even tuning, just concentrating on the very basic aspects of what constitutes music at all.
I had already done a lot of experiments of emulating minimal improvisation with Ableton live music software, focussing on moving from the quality of flowing, non-quantized time to a quantized rhythmical grid seamlessly. But now, I started revisiting the special constellation not of two performers, but two instances within a process, reacting to each other.
Looking at this constellation again, after months of minimal improvisation research, after reading about Zygonic theory actually blew my mind. Because, from a technical point of view, the two main components involved here are two very well known processes in electronic music:
feedback & delay
Being a guitarist, my first encounter with feedback was listening to Jimi Hendrix. Also I have played with the possibilities of the no-input mixer – but I saw it as a special technique. I did not grasp how fundamental the principle of feedback is to music.
In the context of of loud, amplified music, I had associated feedback with the notion of going to extremes: very fast, feedback can escalate, become louder and louder and wreck ears and equipment. To act as an agent of musical structure, feedback needs a mechanism to restrain this tendency of escalation: delay. Inserting a delay prevents the signals in the feedback loop from following faster and faster, getting louder each time around the cycle. In order to do this, the delay has to function not like an echo, which would add a – delayed – signal to the original. Instead, the delayed signal must be the only signal that is heard, while the original incoming sound must stay muted.
Here is an example of such a setup: two channels, each containing a listening device, a sound generating device and a delay are connected within a feedback loop:
Once you get past the awkward 80s charm of the Junatik synth sounds, the structural resemblance to the two duo improvisations in sound and dance should be obvious: variations of pitches are send back and forth, leading to a gradual, sometimes abrupt, developement. There is a rise in dynamics, then the ‘dialogue’ becomes more calm, sparse and finally ends.
The function of ‘listening’ on each of the two channels is solved by using VoiceKeys II, a free device for Reaktor by Bertrand Antolin. It analyzes the incoming audio and converts it to MIDI, which is in turn processed by the Junatik synth to make the next sound. It is a marvelous device, singing into Reaktor and hearing my voice accompanied by a synth sound is so much fun! It was created nine years ago but still gives me the feeling of living in the future.
Marvelous as it is, it does not function entirely correct. The sound that is created as a response does not completely match the incoming sound. In the case of my example that is a good thing, because it creates the dynamic of repetition and variation that leads to gradual developement of sonic material. In this case, the artefacts of incorrectness are the very spark of machine ‘creativity’.
This becomes evident, when the feedback loop is not set up on the level of audio signals. Instead of converting audio to MIDI, it is also possible to set up a loop between two MIDI channels. The lack of mistakes leads to an ever repeating loop of the same pitch. To avoid stasis and get the impression of interaction in dialogue, randomness has to be inserted intentionally.
MIDI is a standardized system for machine communication between musical devices. Working with MIDI means to work on the level of language, of symbols that stand in for sound, not the actual sound. The constellation I described above, utilizing feedback, delay and also randomness is a formal one, it may differ vastly depending on which sounds are actually used and result in totally different music. Still, it remains the very same constellation.
To me, at the moment, the best environment to approach music on such a meta-level is the coding-environment Sonic Pi, stay tuned for some examples of minimal improvisation code.
A few years ago (2013/2014), after having moved to Berlin, Jennie Zimmermann and me started to explore the improvisational potential of repetition and restraint in regard to the number of used material. Our aproach was interdisciplinary, we researched music and movement, on it´s own and in combination. together with a group of dancers and musicians.
This research would eventually result in the concept of Minimal Improvisation, click on the link for more background.
One of my major inspirations for working with gradual process in collective improvisation had been electronic music, it´s application of procedures and impersonal mechanisms. So, naturally, I continued in that direction when group activities came to a halt due to shifting artistic priorities.
It took me some time to figure out what an electronic version of the collective minimal improvisation process could be. Using Ableton live as my main daw, I first checked out many maxforlive devices like Adam Florin´s patter, Coldcut´s MidiVolve and also encoderaudio´s turing machine. I worked with OSCiLLOT by Max for Cats. I got some very interesting results by combining these and other devices in Ableton live and I learned a lot, but ultimately I felt caged within the confines of the daw.
So the next step was to move beyond the gui and check out patching environments. So I started building my own devices in maxforlive, but didn´t like it´s integration in Ableton live and starting patching in pure data, a freeware alternative to max. There are fantastic tutorials on making generative music with pure data online, if you are curious have a look at the algorithmic composer or Johannes Kreidler´s Programming Electronic Music in Pd.
It was obvious that patching environments like max and Pd offered a lot more flexibility than a daw. I needed to settle on one option and work out how to realize my musical ideas using this one tool.
But that didn´t happen, instead I keept looking for other options. I toyed around with IRCAM´s open music, tried out patching in Native Instruments Reaktor and started experimenting with coding music in SuperCollider.
Unfinished patch with Reaktor Blocks

Reading Jeremy Leach´s papers on Nature, Music, and Algorithmic Composition was very inspiring, see also his online algorithmic composer. Also Robert Rowe´s Machine Musicianship had an impact.
David Cope´s work on emulating the style of several classical composer´s was interesting to me not because of his goals, but his thoughts on musical structure, here´s a super condensed overview by Randolph Johnson. Being interested in rhythm and electronic music, reading `The Geometry of musical Rhythm´by Godfried Toussaint was unavoidable and I highly recommend this fantastic book.
But reading Alex Bellos´popular books on math, `The Grapes of Math´ and `Here´s looking at Euklid´ probably had the biggest impact on me, encouraging me to look at the mathematical aspects of generating and processing music not only as a means to achieve the intended music, but also absolutely fascinating topics by itself. The last book I have to mention is ‘comparing notes´by Adam Ockelford, more on that one later, in another post.
Apart from software (for OS X) and books I got involved in new machines: The Axoloti combines a patching environment comparable to Pure Data with a standalone microcontroller board. Also, I started using Apple´s iPad and some of the many many music apps that are availlable because of my teaching work for app2music.
Probably the two main dimensions in my search were flexibility and simplicity. I was looking for an instrument to realize my ideas that was more flexible than Ableton live when it comes to generative music, but still allow an easy workflow. A software like SuperCollider gives it´s users a maximum of flexibility when it comes to shaping sounds. At this point, my main interest is generating evolving musical structures, so I do not need all these options. It takes time to bypass them and find the functionalities that are important to me.
The Sonic Pi software was originally developed by Sam Aaron as a live music coding synth for children. Thus, it is design to be simple and accessible. I had already looked into it as a warm up exercise before getting into SuperCollider. Since the update to version 3. in 2017, Sonic Pi aims to be the live coding synth for everyone, including features like MIDI, thus morphing from children´s learning software to a musical instrument. To me, this version offers the perfect combination of flexibility and simplicity. Through MIDI, I can connect it to other music software or hardware and tailor a music generating system to my needs. For sure I´m connecting it with the levTools, patched by my colleague Marten Seedorf on the basis of pure data.
So how does my application of a collective improvisational process to music software actually work? I´m going to address this in the next entry of this blog.
Meanwhile, have a look at my Axoloti making all the sounds that Sonic Pi tells it to make. Of course the video is pointless here, but isn´t it cute? Well, it probably looks better when you know that this device cannot be bought from the shelve but that the enclosure was hand-made for me by my brother. Look here for a thread full of amazing self-made Axoloti versions.
To be more specific: The Axoloti runs a patch based on a Buchla Programable Complex Waveform Generator 259. This patch was made by maceq687, many thanks for sharing. Also, that patch gets some help from a Reaktor patch by me…
January groovejam will see me jamming together with Olaf Giesbrecht & MDL
Both specialize on working with electronic hardware to create their music, Olaf even builds and sells his own components at Audiowerkstatt!
I met MDL a few years ago at a very special session at Kindl-Stuben, organized by Philipp Kullen and Vega. Everybody who was part of that will probably never forget it, so I´m super happy to revitalize that by playing with that gentleman from Tijuana again, who just happens to be in town at the right time.
Stefan Röslmair, one of the hosts running the Echtzeitraum will join me in making music for February Groovejam. Berlin-contact-improv enthusiasts will know him as a regular musician at the Marameo jam.
Vincenz Kokot played at the very first groovejam and it is a pleasure to play a duo again with him at the March groovejam. Vincenz will surely bring his arsenal of little sound-making gadgets and create magic. We first met being musicians at the Contact-meets-contemporary-Festival in Göttingen afew years ago, ever since then I have enjoyed the greate ease when improvising with him. By the way: I will join Vincenz´s formation My Sister Grenadine for the tour in may, let´s see if occassional singer/songwriter material will pop up at the groovejam…
Vincenz setup when we played together at Wetzlarer Improvisationstage:

We started the Groovejam format last September and up to now enjoyed four evenings of music & dance.
At the first Groovejam date, I had the pleasure of playing a noisy set of live music with Vincenz Kokot of My Sister Grenadine. When improvising, Vincenz usually brings a bunch of lo-fi electronic gadgets, drone-making buddha-machines and the like. Also, he´s probably the tightest guitar and ukulele player I know. Next to being an inventive improviser, Vincenz is a great songwriter, so when the opportunity came I could not resist joining My Sister Grenadine for the upcoming tour in May 2018.
Hallo Julia is the pop trio of drummer Brigitte Haas. But when she is not busy performing songs on french fries or hipsters she facilitates the beautiful Klangbaden improv sessions, bringing together a group of highly skilled instrumentalists, bathing the listeners & dancers in sounds while smuggling in hooks and chord changes from the world of pop. I love the collective approach to improvisation of Klangbaden and I sincerely hope they will make a return to Groovejam in 2018.
Since summer 2017, I am collaborating with a bunch of electronic music nerds to offer teaching on this form of art which is often neglected at traditional music schools. The result is the school for electronic music called lev, I am pretty excited and thankful to be a part of this.
The december groovejam saw the premiere of the levEnsemble playing live together.
The complicated stuff on the computer monitors are patches of the music software Pure Data. Lev-mastermind Marten Seedorf not only uses this, but also developes easy-to-use musical modules, the levTools which can be downloaded for free.
My own use of electronic music devices included my daughters PSP, utilizing the Beaterator in an unlikely way for ambient sine sounds.

Also in the picture: the Xynthesizer sequencing app for iPad. It offers the use of cellular automata like Conway´s Game of Life for musical sequencing and that is just irresistable to me. If you are curious, read this (german) review of the app by my lev-colleague Deniz Dilek.
A big thanks to all the musicians who took part in the Groovejam 2017!
Also, a big thanks to all the dancers!
And last, but not least a big thanks to the teachers who offered workshops:
Jo Bruhn and Jennie Zimmermann teaching contact improvisation and Naima Ferré teaching the art of whirling.
My Phyla-fellow Jennie Zimmermann who is curating the Groovejam workshop schedule is currently dancing with Nancy Stark-Smith in USA, so there will be a workshop winter pause in January and February. I´m sure she will bring a lot of interesting impulses when she is back in march, so stay tuned!
Looking forward to some music making soon:
This friday, October the 20th I´m making live electronic music for the Südstern Jam at PhynixTanzt.
What is contact improvisation? You may have a look at Wikipedia. Or come along to the jam and find out.
On Saturday the 21st I have the pleasure to improvise together with Jennie Zimmermann for the Groovejam. If you´re into dancing, you have several options: come at 8pm for Naima Ferré´s whorkshop on Whirling, the fascinating practice of spinning around one´s center. Try it out, probably you will love it like I do. Or, come at 9pm just for dancing to the groovy beats. Or, if you prefer to do contact improvisation instead, just go for it, this dancefloor is multifunctional… Expect electronic beats, experimental vocals and throat singing.
One week later, Saturday the 28th it´s me and Jennie again, providing atmospheric sounds for the aerial artistry of Jana Korb. We put together a performance inspired by the writings of medieval mystic Marguerite Porete, called FernNah, which we premiere at the Luthereiche in Eberswalde.
You are very welcome to join this years Contact Improvisation Summerseries!
9 different teachers will offer a variety of interesting topics and ideas concerning the practice of Contact Improvisation.
Teaching will be in german and english.
Drop in for single sessions possible.
teaching:
Andrew Wass – wasswasswass.com / lowerleft.org
Dino Spiri – www.dinospiri.com
Elske Seidel – www.elskedance.de
Gesine Daniels – www.somebodyelse.de
Jennie Zimmermann .- www.phyla.info
Jo Bruhn – www.mosaique-feuershow.de
Liz Erber – www.lerber.com
Nadja Schwarzenbach
Mireia Aragones – mireiaaragones.wixsite.com/consciousmovement
9 classes // 06.07 .- 31.08. // thurday 8-10pm
Summerseries 9 classes: 117 € // Drop in 15 €
Somatische Akademie Berlin
Paul-Lincke-Ufer 30, 10999 Berlin Kreuzberg, 1.backyard, 4. floor
registration:
[email protected] – 0176 5670 0931
***
Wir freuen uns sehr auch diesen Sommer einen durchgehenden Kurs in der Somatischen Akademie anbieten zu können. In diesem Jahr laden wir für jede Klasse eine_n Berliner CI Lehrer_in ein die Klasse zu gestalten. Ihr kommt in den Genunss verschiedene Themen – und Unterrichts – Stile und tolle Menschen aus der Contact Szene kennenzulernen! Die Klassen werden vom gegenwärtigen Interesse der unterrichtenden geprägt sein.
Uns verbindet die Freude am Tanzen und Bewegungs-Forschen und eine Wertschätzung für die Komplexität und Tiefe, die sich in der Praxis der Contact Improvisation entfalten kann. Wir tauchen in dieser Sommerserie in Contact Impro Themen ein, die für Menschen mit viel oder wenig Contact Impovisations Erfahrung bereichernd und erhellend sein können.
Und das sind unsere Lehrer_innen für die Serie:
Andrew Wass – wasswasswass.com / lowerleft.org
Dino Spiri – www.dinospiri.com
Elske Seidel – www.elskedance.de
Gesine Daniels – www.somebodyelse.de
Jennie Zimmermann .- www.phyla.info
Jo Bruhn – www.mosaique-feuershow.de
Liz Erber – www.lerber.com
Nadja Schwarzenbach
Mireia Aragones – mireiaaragones.wixsite.com/consciousmovement
Du bist in diesem Kurs richtig mit und ohne Erfahrung in CI!
Sprachen: Deutsch und Englisch
Serie mit 9 Terminen 06.07 .- 31.08. Donnerstags 20-22 Uhr
Ganze Serie 117 € Einzelner Termin 15 €
Somatische Akademie Berlin
Paul-Lincke-Ufer 30, 10999 Berlin Kreuzberg 1. Hof rechts 4. OG
Bitte anmelden:
[email protected] – 0176 5670 0931
I´m very happy to share that Phyla will be performing Minimal Improvisation at Garbicz Festival 3-6 August 2017!
Vincenz Kokot, Jennie Zimmermann and me will offer the longest sessions of Minimal Improvisation that we ever did.
I´m excited to bring our calm and subtle improvisations into the context of loud electronic music because I deeply relate to the repetitive frenzy of techno and when not performing be sure to meet me on one of the dancefloors…
Expect something like this, but outdoors and much much longer:
Have a look.
If you like our approach to improvisation, come see us perform live at Performing Arts Festival – we are happy to be part of Fragile Matter at Paulstudios.
I have the pleasure to play live improvised groove music with Vincenz Kokot at Alessandro Marogna´s Vernissage on the 9th of June at Oranienwerk.
Come along, check out Alessandro´s paintings and let our music blow your mind.
On June the 16th we take part in the Performing Arts Festival Berlin with a performance of Minimal Improvisation at Paulstudios.
The Global Water Dance is happening in many countries on the 24th of June. I´m currently rehearsing the music for the performance near Berlin Hauptbahnhof.

One day later, 25th of June I´m part of the Klangbaden crew, offering improvised music in a cozy atmosphere. No actual water involved here, just metaphorical bathing in sound.
To stay with that metaphor, Liegenundlauschen is an invitation to bath in words. Johanna Tellman reading stories by Judith Hermann, Yasmina Reza and Jackie Thomae, cozy and not so cozy sounds by Gisbert Schürig in between. When and where? 7th of July at Somatische Akademie Berlin.