Live Coding [atelier / workshop] - EASTERN BLOC

Bonjour, welcome and thanks for being on board. This page was created for all the people involved in the 'Live Coding' workshop at Eastern Bloc, however, anyone can feel free to explore and share it.

The workshop is designed to create and analize together different ways to improvise sound and rhythmic patterns through live coding, however, it is an invitation to find your own voice through the exploration of diverse theorical, technical and sensible ideas. This page contains some notes that will accompany us, forcing us to take new directions. Following you'll find a list of suggested territories to explore together:




  Prehistory of Live Coding       9 mins. of Mexican scratch    

  Installation       Thought patterns that sound      Algorave  




Prehistory of Live Coding


"Live coding is a new direction in electronic music and video, and is getting somewhere interesting. Live coders expose and rewire the innards of software while it generates improvised music and/or visuals. All code manipulation is projected for your pleasure. Live coding works across musical genres, and has been seen in concert halls, late night jazz bars, as well as algoraves. There is also a strong movement of video-based live coders, writing code to make visuals, and many environments can do both sound and video, creating synaesthetic experiences". [1]

                                                       [1] Alex McLean, TOPLAP, website.


Live coding is a technique but also is a cultural movement started around 2002 and formalized thanks to the birth of 'TOPLAP the Temporary / Transnational / Terrestrial / Temporal Organization for the Promotion / Proliferation / Permanence / Purity / Parsimony / Pragmatics of Live Algorithm / AudioVisual / Artistic Programming' in 2004. Thanks to TOPLAP's web that is an open blog to all the community, we have in knowledge that back in 1974, Tom DeFanti and Dan Sandin gave a series of performances that involved live coding techniques to create graphics and then manipulated live through modular analog video processors.

Live coding finds it’s roots back to early networked computer pieces, the very first live coding performance ever, was a half-hour by Ron Kuivila in 1985 using the programming language FORTH, which, incidentally, ended with a system crash.

“The Hub”, one of the early experimental network computer bands in the 1980s [2], allowed the audience to perceive their decision making by giving them read access to their monitors.

[2] C. Brown and J. Bischoff. INDIGENOUS TO THE NET:: Early Network Music Bands in the San Francisco Bay Area, 2002.


Also, exist an essential gem called 'A prehistory of Live Coding', an album that contains 16 live coding tracks recorded around the world between 1986 and 2007; this document is having an important relevance because it can give us an idea of how live coding movement starts, how it sounded in the beginning and what were its concerns as a cultural movement. The compilation includes tracks from Julian Rohrhuber, to whom I highly recommend, it is amazing the work he has done with PB_UP (PowerBooks UnPlugged), the first accoustic computer music folk band; at the same time it contains tracks from 'slub' a band founded by A. Ward and Alex McLean, who is the creator of 'TidalCycles', the software we will be exploring in this workshop; it also includes a track from Dave Griffiths, co-creator of 'Fluxus', an amazing software which is having a deep relationship with the Mexican live coding movement.


            Slub (Alex McLean and Adrian Ward), live coding performance @ Ultrasound, 2002.



9 mins. of Mexican scratch


In Mexico, 'mU' an audio/visual experimentation trio integrated by Ernesto Romero, Eduardo Meléndez and Ezequiel Netri in 2004, began to explore live coding and now, they are considered pioneers and important promoters of the movement.


                                         mU, complexión robusta @ Taller de Audio, 2004.


After of this and other early live coding explorations, Ernesto Romero 'Tito' started to teach SuperCollider through diverse workshops, supported by the Centro Multimedia, then a community of practitioners started to have meetings in the 'Taller de Audio' of this centre. In 2011 Mexico had the first live coding session in which the assistants of the 'Fluxus' and 'SuperCollider' workshops arrive and write their names in a list with spaces for visuals and sounds, so everytime we collaborate with different people and suggested by Tito, we follow a rule, possibly an algorithm, that is 'start from scratch, and improvise during 9 minutes', in words of Tito, "in the beginning the spectators where only live coders, we haven't passive public, and sometimes the sessions were bad, Jejeje". These 25 sessions, served as a platform to meet other people, start projects, bands, collaborations and in the end build one of the most vibrant live coding communities in the world. On the other hand the rules of the sessions always forced us to explore new directions, to practice, to exchange and appreciate the error, I remember seeing sets in which nothing happened, but we all ended up excited, because we had observed that process of thought.




Installation

For the installation you need to download and install, some pakages and softwares, follow one of this links (the one that corresponds with your operating system).


  OSX       Windows       Linux  


> Download the following file:

'super.scd'

To install TidalCycles you need to follow some steps; for the workshop I find important to share a detailed step by step guide and useful references for introduce you to live coding (.

Well, for the installation you need to download one of these folders, the one that corresponds with your operating system.

Following are detailed steps to install TidalCycles on OSX

You need to download:

'Atom.app'
'Haskell Platform 8.2.1 Core 64bit-signed.pkg'
'git-2.14.1-intel-universal-mavericks.dmg'
'SuperCollider' (folder)

- Firstly we will install by double click 'Haskell Platform 8.2.1 Core 64bit-signed.pkg'

- Now we will do the same with the file 'git-2.14.1-intel-universal-mavericks.pkg'

- Next we need to open the 'Terminal' and write/evaluate the following:
cabal install tidal , this will takes some time, meanwhile:

- We will drag 'Atom' and drop into our 'Applications' folder, then we will open it and we will search for the 'Packages' tab that is visible in the welcome screen, now we will click in '+ Install Packages' and finally we will search for 'tidalcycles'; when the package appears, please click in 'install'; it also will takes a bit of time. Here we will wait a bit just to see that the previous steps are right installed and ready.

- Then we will drag 'SuperCollider' folder into 'Applications' and open the software by double click in the icon. Once SuperCollider is ready we will open the file that is in our 'mac_install' folder, called 'super.scd' now you need to evaluate with cmd + enter the following line: include("SuperDirt")

- We will receive feedback in the Post Window, saying SuperDirt is installed, so we will go to the 'menu bar' and select 'Language' > then 'Recompile Class Library'.

- SuperCollider will start again and now you need to evaluate the following line: SuperDirt.start, this automatically will allows SuperCollider to receive the algorithmic processes coming from TidalCycles and if all is working fine we will see SuperCollider booting, loading sample banks and finally saying us: 'SuperCollider is listening Tidal on port 57120'

- We are really close, now we will come back to Atom and in the menu we will select Packages > 'TidalCycles' and > 'Boot TidalCycles', so Tidal will starts to display some text ... (this is an amazing spectacle) and then it will display text announcing: Sound.Tidal.Context| Prelude Sound.Tidal.Context| tidal>. This last sentence is really important, it means that Tidal is waiting you to enjoy and live code.

- So we will write our first line in TidalCycles: d1 $ s "tabla2"
* to evaluate we need press 'cmd + enter'.


Following are detailed steps to install TidalCycles on Windows


You need to download:

'Atom.exe'
'HaskellPlatform-8.2.1-core-x86_64-setup.exe'
'Git-2.14.2.3-64-bit.exe'
'SuperCollider-3.8.0_Windows_64bit_VS_0947edd.exe'
'sc3-plugins_Windows_SC3.8_VS-64bit_692f92f.zip'

- Firstly we will install 'HaskellPlatform-8.2.1-core-x86_64-setup.exe'

Important: Make sure you follow Step 2 of the Haskell installation instructions.


- Now we will install git 'Git-2.14.2.3-64-bit.exe'

- Next we need to open the 'Terminal' and write/evaluate the following:
cabal install tidal , this will takes some time, meanwhile:

- We will install 'Atom.exe', then we will open it and we will search for the 'Packages' tab that is visible in the welcome screen, now we will click in '+ Install Packages' and finally we will search for 'tidalcycles'; when the package appears, please click in 'install'; it also will takes a bit of time. Here we will wait a bit just to see that the previous steps are right installed and ready.

- Then we will install 'SuperCollider' and open the software by double click in the icon. When installing SuperCollider, you must also download the 'sc3-plugins_Windows_SC3.8_VS-64bit_692f92f.zip' file. Run SuperCollider once in order to create user directories. Then open the zip file and extract the SC3plugins directory to C:\Users\username\AppData\Local\SuperCollider\Extensions. You may have to manually create the Extensions directory. Restart SuperCollider so that it finds the SC3plugins directory.

Then SuperCollider will be ready, so you will open the file that is in our 'windows_install' folder, called 'super.scd', now you need to evaluate with cmd + enter the following line: include("SuperDirt")

- We will receive feedback in the Post Window, saying SuperDirt is installed, so we will go to the 'menu bar' and select 'Language' > then 'Recompile Class Library'.

- SuperCollider will start again and now you need to evaluate the following line: SuperDirt.start, this automatically will allows SuperCollider to receive the algorithmic processes coming from TidalCycles and if all is working fine we will see SuperCollider booting, loading sample banks and finally saying us: 'SuperCollider is listening Tidal on port 57120'

- We are really close, now we will come back to Atom and in the menu we will select 'TidalCycles' and > 'Boot TidalCycles', so Tidal will starts to display some text 'Loading... stuff' (this is an amazing spectacle) and then it will display text announcing: Sound.Tidal.Context| Prelude Sound.Tidal.Context| tidal>. This last sentence is really important, it means that Tidal is waiting you to enjoy and live code.

- So we will write our first line in TidalCycles: d1 $ s "tabla2"
* to evaluate we need press 'cmd + enter'.


Thought patterns that sound


Now we are ready to explore TidalCycles and have fun ( .

TidalCycles is an open-source software created by Alex McLean, Julian Rohrhuber, Mike Hodnick, Lennart Melzer, Sean Lee, Ben Gold, Scott Fradkin, David Ogborn, and friends.

Tidal for short, is a language for live coding patterns, it allows you to make music, sound and visuals, but it doesn't sound itself. "Tidal allows you to express music with very flexible timing, providing a little language for describing patterns as step sequences (which can be polyphonic and polymetric), some generators of continuous patterns (e.g. sinewaves, sawtooths) and a wide range of pattern transformations". [3]

                                       [2] Alex McLean and friends. https://tidalcycles.org/


Lets explore:

Single sample: d1 $ s "tabla2"

Multiple samples: d1 $ s "tabla2 glitch house arpy"

* In Tidal a cycle is an undefined period of time that per default is equals to 1 cycle per second; so we can write and evaluate cps 1 and it will still sounding the same, but we can change it for example to the middle cps 0.5. Now we are going slowly. On the other hand if we put 1, 3 or 7 samples it will takes the same time in play them, I mean a cycle.

Lets try 7 samples in one cycle of 2 seconds, because now our cps is equals to 0.5:
7 samples: d1 $ s "tabla2 glitch house arp rave2 realclaps yeah"

To understand a bit more how a cycle works we will explore our first function called 'every': d1 $ every 2 (# s "hh 808oh hh 808oh") $ s "house arp rave2 realclaps"

- every 2 is helping us to change the samples of the pattern every 2 cycles, so for the first cycle we can listen "house arp rave2 realclaps" and for the second cycle "hh 808oh hh 808oh"


Pattern repetition: d1 $ s "808bd realclaps*2 808ht"

- The operator * allow us to repeat by any number a sample


Pattern group: d1 $ s "[tabla2 glitch] house"

Pattern group + repetition: d1 $ s "[tabla2 glitch] [realclaps*2]"

Silence between a sound pattern: d1 $ s "808oh ~ numbers ~"

- To add silences to our pattern we will use ~

Silence, to stop the sound of our pattern: d1 silence

Samples - here you can find the list of samples that are coming with Tidal.

Effects

* Effects are patterns too


n: d1 $ s "glitch*4"
       # n "0 2 3 5"

# n works like an effect but it's useful to pick a different sample from the folder, for example from the folder 'glitch' we are playing samples 0, 2, 3 and 5.

speed: d1 $ every 3 (# speed "1") $ s "glitch*4"
         # n "0 2 3 5"
         # speed "18"

# speed allows you to play with the pitch of the samples, you can go from '0.2 to 100' or more, but take care with numbers close to 0, the sound can crash.

vowel: d1 $ every 3 (# vowel "o") $ s "glitch*4"
         # n "0 2 3 5"
         # vowel "a"

# vowel is a vowel formant filter, values include a, e, i, o, and u

pan: d1 $ every 2 (# pan "1") $ s "glitch*4"
         # n "0 2 3 5"
         # pan "0"

# pan allow us to play with the speakers, 0 is left, 1 is right and 0.5 are both.

gain: d1 $ every 2 (# gain "1") $ s "glitch*4"
         # n "0 2 3 5"
         # gain "0.6"

# gain controls the volume of our samples and is really useful to live performances.


* To explore more effects, click here



Euclidean rhythms


"The Euclidean algorithm (which comes down to us from Euclid’s Elements) computes the greatest common divisor of two given integers. It is shown here that the structure of the Euclidean algorithm may be used to generate, very efficiently, a large family of rhythms used as timelines (ostinatos), in sub-Saharan African music in particular, and world music in general".[4]

Godfried Toussaint, The Euclidean Algorithm Generates Traditional Musical Rhythms, School of Computer Science, McGill University. Montreal, Canada.

I find this algorithm a source of inspiration, for me is fantastic how numbers are related with that patterns created by the soul and the contact with the earth around the world in diverse native cultures. Personally I think euclidean rythms are a really interesting approach that can stablish a deep relationship with the sensible human rhytmic expression.

As we read an euclidean algorithm is a computation of the greatest common divisor of two given integers, this in visual terms could be the following: We have two integers '3,8', so we will represent it visually, we have 8 spaces, 3 are sounds and the rest 5 are silences:

3,8

'1 1 1 0 0 0 0 0'

Then we will put the 0's between the 1's

'1 0 1 0 1 0 0 0'

And finally we should put the 3 ceros that are at the end of the sentence between the 1's

'1 0 0 1 0 0 1 0'

This is the euclidean rhythm (3,8) - actually it sounds like the classic cuban tresillo.

Now we will recreate it through Tidal:

d1 $ s "tabla2 ~ ~ tabla2 ~ ~ tabla2 ~" # n "0 0 2"

I found really important to understand how Euclidean rhythms are structured in order to being more connected with our feelings and thoughts, however, TidalCycles is focused on live improv, and it includes a really easy way to improvise with euclidean rhythms, the same example that I wrote before, can be expressed like this:

d1 $ s "tabla2(3,8)" # n "0 0 2"

Ok, now I find a good time to talk about 'channels' in TidalCycles, you can play 9 different channels at the same time, I encourage you to use only what you need, it really depends on your intention and method, you can evaluate the following lines separately, doing a more complex polyrhytmic interaction.

d1 $ s "tabla2(3,8)" # n "0 0 2"

d2 $ every 2 (slow 2) $ s "hh(5,8)"

Now you can try any combination of two integers, but I want to share you a list with some possible and interesting euclidean rhythms:

(2,5) : A thirteenth century Persian rhythm called Khafif-e-ramal.
(3,4) : The archetypal pattern of the Cumbia from Colombia, and Calypso rhythm from Trinidad.
(3,5,2) : Another thirteenth century Persian rhythm by the name of Khafif-e-ramal, as well as a Rumanian folk-dance rhythm.
(3,7) : A Ruchenitza rhythm used in a Bulgarian folk-dance.
(3,8) : The Cuban tresillo pattern.
(4,7) : Another Ruchenitza Bulgarian folk-dance rhythm.
(4,9) : The Aksak rhythm of Turkey.
(4,11) : The metric pattern used by Frank Zappa in his piece titled Outside Now.
(5,6) : Yields the York-Samai pattern, a popular Arab rhythm.
(5,7) : The Nawakhat pattern, another popular Arab rhythm.
(5,8) : The Cuban cinquillo pattern.
(5,9) : A popular Arab rhythm called Agsag-Samai.
(5,11) : The metric pattern used by Moussorgsky in Pictures at an Exhibition.
(5,12) : The Venda clapping pattern of a South African children’s song.
(5,16) : The Bossa-Nova rhythm necklace of Brazil.
(7,8) : A typical rhythm played on the Bendir (frame drum).
(7,12) : A common West African bell pattern.
(7,16,14) : A Samba rhythm necklace from Brazil.
(9,16) : A rhythm necklace used in the Central African Republic.
(11,24,14) : A rhythm necklace of the Aka Pygmies of Central Africa.
(13,24,5) : Another rhythm necklace of the Aka Pygmies of the upper Sangha.