Great topic!
When I started out, my performances were mostly pre-prepared. I’d have a bunch of pre-written scripts, and would start and stop them with different parameters/sample sets, where some scripts would have a primitive text-based interface for making base patterns to be transformed. I worked with my friend Ade who was doing similar things, and we’d sketch out a kind of graphical score to plan when we’d start and stop scripts, with a sketch of how the set would develop in terms of intensity, and so on… But we’d definitely improvise around that. We’d call this a “generative music performance”.
Then when live coding came along (Ade came up with a live coding system independently, I caught on after we linked up with the good supercollider people when TOPLAP was formed) we had a kind of final ritual performance where we performed with our old system one more time before deleting it all. I think we were totally sold on making code during a performance. I made a live coding editor that pointedly didn’t have a save function for a while, although eventually added one and started building up a library of scripts made in this editor, and would do a mixture of from-scratch live coding and working with these premade scripts. This was mostly out of necessity, I was using a general purpose programming language (Perl), and hadn’t really got straight what algorithmic music was for me, and coming up with a new idea about that during a performance and having time to edit was a bit much. Not impossible when collaborating with one or more people, but live coding from scratch felt like both a super important, but yet impossible ideal…
But while I was super sold on the principle of live coding, the practice just didn’t live up to the dream. There was a lot of procedural logic, involving modulo arithmetic, random numbers (which I’ve never been that keen on), manipulation of state, and some more interesting scripts doing agent-based interaction… In practice I guess I had a nice way of exploring polyrhythm, but nothing really new came out in the 20-30 minute span of an electronic music performance.
I was really inspired by collaborations with an improvising percussionist Alex Garagotche though, who encouraged me to pursue live coding from scratch. We had some great times in practice sessions which never really came out in the live performances we did. This motivated making a new terse language, and collecting together ideas from learning knitting, haskell, reading about Indian Classical Music and Laurie Spiegel’s essay on pattern, Tidal came out.
I suppose for me, the terms “improvisation” and “composition” (along with score, instrument, etc) don’t really apply well to computer music. They are from the world of physical, direct manipulation, and linear conceptions of what music is.
So rather than the spectrum being between those two old terms, I’d put live coding itself at one extreme end of the spectrum, and generative music at the other. Live coding is then the idea that we can make music from scratch, for the moment, by writing code, and generative music is the idea that computers can make music entirely by themselves, unsupervised. Both ideals are impossible, and I think the best music can probably be found between them. But for me, I feel I’ve always tried to work towards the live coding end.
Making tidalcycles has this ideal at its heart, a few people have commented on how to use it best, you really have to give up using it to transcribe music you have in your head, and instead use it to follow an idea somewhere unexpected. This is what I mean by interference pattern - putting two elements together in such a way that something unexpected is very likely to come out. In fact, if I finish a performance without learning something new about tidal, that feels really bad, and I then realise it’s time to add new functions or sounds to my system, to freshen it up and open up new possibilities to explore.
So I think live coding is about listening, learning and discovering something new. Popular music culture is stale as hell, and in dire need of new ideas… I think we’re here to find them.
That said, it’s important to fully recognise that you don’t need an audience to live code. I think the best tidal music is probably coming from people who are live coding alone, really developing an idea in the studio to an advanced state, then bringing it to an audience to enjoy… and as discussed above, working out strategies for live coding with that well crafted, pre-worked-out idea. I’d like to do more of that too, and do have some set pieces I probably pull up too much.
But really, my favourite feeling ever is finding a new idea in the intense, intimate situation of a live, loud, live coded performance. It’s risky, and pulling it off seems to involve e.g. getting good sleep the night before, eating healthy food during the day, going for a good walk beforehand, preferably working within a well-practiced collaboration, and not drinking… But it’s great when it works.