I had a nice chat with Jamillah Knowles from Outriders on Radio 5 live the other day, about live coding and algoraves. It’s now available as a podcast, from about 12m50s of the 11th September 2013 edition.
A quick improv from Sheffield:
Here’s the state of my editor at the end:
d1 $ slow 2 $ sound "bd [sn sn bd]/2" let x = density 2 $ striate' 8 0.75 $ sound (slow 4 $ "[bd bd/4] [ht mt lt]") in d2 $ stack [every 3 rev $ every 4 (0.75 <~) x |+| pan "0.2", every 4 rev $ every 3 (0.5 <~) x |+| pan "0.8" ] |+| speed "1" |+| shape "0.6" d4 $ every 4 (density 2) $ echo 0.5 $ brak $ every 3 (0.25 <~) $ sound "[future,odx,bd]*3" |+| shape "0.7" let perc = 0.2 in d3 $ slow 2 $ whenmod 10 12 (echo 0.25) $ density 2 $ sound (pick <$> "~ [operaesque]" <*> (slow 5 $ run 24)) |+| slow 16 ((begin $ (*(1-perc)) <$> sinewave1) |+| (end $ (+perc) <$> sinewave1)) |+| speed (slow 2 "0.75 0.7") |+| pan "0.6" |+| shape "0.6" let perc = 0.2 in d4 $ slow 3 $ every 2 (rev) $ whenmod 10 12 (echo 0.25) $ density 2 $ sound (pick <$> "~ [operaesque]*3" <*> (slow 10 $ run 16)) |+| slow 16 ((begin $ (*(1-perc)) <$> sinewave1) |+| (end $ (+perc) <$> sinewave1)) |+| speed "0.75" |+| pan "0.4" |+| vowel "i" hush d6 $ whenmod 10 12 (density 2) $ whenmod 12 4 (rev) $ slow 2 $ sound "[futuremono]*3 [odx/3]" d7 $ whenmod 6 4 (0.25 <~) $ every 4 (density (3/2)) $ slow 2 $ sound "[jungle/2]*2 [jungle/3]*2" |+| shape "0.7" d7 $ (whenmod 2 4 ((|+| speed "0.9") . rev) $ every 2 (0.25 <~) $ sound "odx [sn/2 ~ sn/2]") d2 silence d8 $ ((slow 8 $ double (0.25 <~) $ striate 12 $ sound "[diphone2/1 ~ diphone2/3]*4") |+| (slow 4 $ speed ((*) <$> "[2 1] 1.5" <*> ((+0) <$> ((+0.4) <$> (slow 4 $ sinewave1)))))) |+| vowel "i" d9 $ slow 2 $ sound "[[odx]*4]/3 [[odx]*4 [odx]*8]/3" |+| speed "1" |+| cutoff "0.04" |+| resonance "0.7" |+| shape "0.8" bps 1
I don’t always enjoy praise, but it’s really great when commentators see through the cold reality of live coding or algorave and get at the promise that motivates what we’re doing.
Here’s a comment by a reddit user called Tekmo from a few months back, which I think is about the promise of a more embodied approach to the practice of programming:
I think the entire premise of this project is really brilliant. Right now it’s probably not immediately inspiring because it takes a minute or so to switch between patterns for an average user, but imagine somebody getting REALLY good at improving on this, with their own custom library of one or two-letter function names and performing by constantly improvising patterns every few seconds while programming at lightning speed.
But the real reason I think this is brilliant is because this is sort of what I always imagined programming was about: extending human ability. I feel like the super-heroes of the future will be programmers that command an impressive array of remote machinery as if it were an extension of their own body.
Here’s an excerpt from a nice blog post by DuBose Cole which to me hints at a cultural tipping point when more people start programming:
Events like Algorave highlight that by making more people creators through programming, we don’t just get new technical creations, but social and cultural ones as well. Algorave features electronic music created by algorithms programmed on the fly for a crowd. Revellers seem to attend due to either an interest in how the music is created, a particular love of electronic music, or just to have a party. An idea like Algorave takes the image of coding as a solitary experience and moves it forward, making the programmer a collaborative and immediate creator, as well as bit of a rock star.
What the idea highlights however, is that learning to create with code is less about the skill itself and more about what you do with it. Pushing coding literacy is only the beginning. Coders are creating an ever expanding culture of creation, which anyone with a basic appreciation or skill for programming can join in with. The increasing simplicity with which people can learn coding has not only changed who can create, but also the scope of what’s being created.
Texture 2.0 (my Haskell based visual live programming language) is working a bit more. It has reached gabber zero – the point at which a programming language is able to support the production of live techno. Also I’ve made some small steps towards getting some of my live visualisation ideas working. Here’s a video which exposes some nice bugs towards the end:
This is an unsupported, very pre-alpha experiment, but if you want to try to get it working, first install Tidal (and if you want sound, the associated “dirt” sampler). Then download the code from here:
.. and run it with something like
During my residency period, I’m rewriting “Texture”, the visual front-end for Tidal I started making way back in the closing moments of my PhD. The first step is to re-implement Texture in Haskell — before it was written in C, and spat out code that was then piped into the Haskell interpreter, which was a bit nuts. I’m taking a bricolage approach so don’t have a clear plan, but have a rudimentary interface starting to work:
As before, the idea is that values are applied to the closest function with a compatible type signature. I’ve still had to ‘reimplement’ the Haskell type system in itself to some extent. While I could get Haskell to tell me whether a value could be type-compatible with a function, it seems that this is not enough. This is because in practice, it is very likely that things will be type compatible, and the real constraints come with the presence of type class instances. Or something like that.
My next step is where the real point of this rewriting exercise comes in – visualisation of patterns as they are passed through a tree of transformations. I’m not sure exactly how this is going to look, but because this is all about visualising higher order functions of time and not streams of data, it’s going to be something quite a bit different from dataflow; it’ll be able to include past and future values in the visualisation without any buffering.
The (currently useless) code is available here, under the GPLv3 license.
I’ve been doing a bit *too* much lately. Still a lot of things on the horizon but hopefully a bit more spread out. So while I contemplate my calendar, here’s some public events I’m involved with:
For me the best part of my workshops during my residency here at Hangar was getting the participants to try out Tidal. In the final workshop there were around 12 of us jamming together, each with a speaker in a kind of drumming circle, at several points it was sounding really great.
In between workshops I’ve been cleaning up my various bits of code, and have now tied it all together into the first semi-documented release of Tidal. You can get the docs and the source over here.
Let me know if have feedback, or would like me to run workshops in your town…
Some more details about my workshops coming up in Hangar Barcelona. Signup here.
This workshop will explore alternative strategies for creating live sound and music. We will make connections between generative code and our perception of music, using metaphors of speech, knitting and shape, and playing with code as material. We will take a fresh look at generative systems, not through formal understanding but just by trying things out.
Through the workshops, we will work up through the layers of generative code. We will take a side look at symbols, inventing alphabets and drawing sound. We will string symbols together into words, exploring their musical properties, and how they can be interpreted by computers. We will weave words into the patterns of language, as live generation and transformation of musical patterns. We will learn how generative code is like musical notation, and how one can come up with live coding environments that are more like graphical scores.
We will visit systems like Python, Supercollider, Haskell, OpenFrameworks, Processing, OpenCV and experiment as well with more esoteric interfaces.
Symbols – This first session will deal with topics such as sound symbology, mental imagery, perception and invented alphabets. We will try out different ways to draw sounds, map properties of shape to properties of sound using computer vision (“acid sketching”,https://vimeo.com/7492566), and draw lines through a sound space created from microphone input. This will allow us to get a feel for the real difference between analogue and digital, how they support each other, and how they relate to human perception and generative music.
Words – Some more talk about strings of symbols as words, being articulations or movements, and relate expression in speech (prosody) with expression in generative music. We will experiment with stringing sequences of drawn sounds together, inventing new “onomatopoeic” words. We will look at examples of musical traditions which relate words with sounds (ancient Scottish Canntaireachd, chanting the bagpipes), and also try out vocable synthesis (http://slub.org/world orhttp://
Language – This session will explore the historical and metaphorical connections between knitting and computation, and between code and pattern. After some in depth talk about live coding, and the problems and opportunities it presents, we’ll spend some time exploring Tidal, a simple live coding language for musical pattern, and understand it using the metaphor of knitting with time.
Notation – Here we will look at the relationship between language and shape, and a range of visual programming languages. We will try out Texture, a visual front-end for Tidal, and try out some ways of controlling it with computer vision, that create feedback loops through body and code.
Final presentation and workshop wrap up.
Tutor: Alex McLean
Alex McLean is a live coder, software artist and researcher based in Sheffield UK. He is one third of the live coding group Slub, getting crowds to dance to algorithms at festivals across Europe. He promotes anthropocentric technology as co-founder of the ChordPunch record label, of event promoters Algorave, the TOPLAP live coding network and the Dorkbot electronic art meetings in Sheffield and London. Alex is a research fellow in Human/Technology Interface within the Interdisciplinary Centre for Scientific Research in Music, University of Leeds.
Tuesday 23.07.2013, 17:00-21:00h
Thursday 25.07.2013, 17:00-21:00h
Saturday 27.07.2013, 12:00-18:00h
Monday 29.07.2013, 17:00-21:00h
Wednesday 31.07.2013, 17:00-21:00h
Location: Hangar. Passatge del Marquès de Santa Isabel, 40. Barcelona. Metro Poblenou.
To sign up, please send an email to email@example.com with a brief text outlining your background and motivation for attending the workshop. Note that applications won’t be accepted if candidates are unable to commit to attending the course in its entirety.
This workshop has been produced by l’ull cec for Hangar.
Xname performed using handmade circuits controlled with strobes and other lights. I used my livecoding DSL Tidal, which also sent flashing patterns to a monitor flat on the table, so xname’s system could be in sync with mine. She also directly beatmatched strobe frequencies, it turns out she has a secret DJ past.
I was pretty much hypnotised by xname’s strobes while live coding and didn’t really know how it went at the time, but am really happy with this recording. You’ll have to imagine the strobes.