Getting my fingers burned

Sooner or later, I’m going to have to get back to the ‘ol soldering iron:



I have a plan: to reconstruct the PE Minisonic you can see above, that I made while I was in school. I still have some of the boards…

Here’s my screen

Show us your screens! Ok, well at last maybe I’m ready. Here’s five minutes or so of me improvising in SuperCollider that’s not as embarrassing as some of my other attempts:

The code is on GitHub if anyone is madly interested.

First public livecode

Last night I stumbled into my first public outing of some livecoding I’ve been working on in SuperCollider. The context was an improvisation night called In Tandem run by Bruce Wallace at the Academy of Music and Sound in Glasgow. I hadn’t intended to play, as I really don’t feel I’m ready yet, but I had my laptop and cables with me, they had a projector, so…!

I was jamming along with three other people, on bass, guitar and analog synth. It all went by in a blur, but everyone there seemed to think what I was doing was ok – mostly making grooves out of a random collection of drum samples, but running some algorithmically chosen chords as well.

The code is below: this is my screen exactly as I left it at the end of the night, mistakes and all. Although Toplap say ‘show us your screens’, they don’t say ‘show us your code’, but… it seems the right thing to do.

// the end!
// they still going
// if you're curious, this is SuperCollider
// musci programming language
// writing code live is called, er, livecoding
// i'm just starting out
"/Users/jsimon/Music/SuperCollider Recordings/hitzamples/".openOS;

Pdef.all.clear; // clear things out
~hitzpath="/Users/jsimon/Music/SuperCollider Recordings/hitzamples/"; // a folder of samples
~hbufs = (~hitzpath ++ "*.aiff").pathMatch.collect({ |i|, i)}); // samples into an array of buffers
t = TempoClock(140/60).permanent_(true); // tempo 140 bpm
u = TempoClock(140/60 * 2/3).permanent_(true); // tempo 140 bpm * 2/3
SynthDef(\bf, {|out=0 buf=0 amp=0.1 freq=261.6255653006|
var sig =, buf, * freq/60.midicps, doneAction:2);, sig * amp)
}).add; // this whole chunk defines a synth patch that plays samples

// Pdef.all.clear;
//"/Users/jsimon/Music/SuperCollider Recordings/".openOS;
// t.sync(140/60, 16);

(instrument: \bf, \buf: ~hbufs.choose).play; // play an event using the synth called \bf
// pick a randoms sample from the array
(instrument: \bf, \buf: ~z).play;
~z = ~hbufs.choose;

t.sync(140/60, 32); // gradual tempo changes possible
u.sync(140/60 * 2/3, 16);
v.sync(140/60 * 5/3, 16);

Pbindef(\x, \instrument, \bf, \buf, ~hbufs.choose).play(t).quant_(4);
Pbindef(\y, \instrument, \bf, \buf, ~hbufs.choose).play(u).quant_(4);
Pbindef(\z, \instrument, \bf, \buf, ~hbufs.choose).play(v).quant_(4);
Pbindef(\z, \instrument, \bf, \buf, ~hbufs.choose).play(v).quant_(4);
~g1 = {~hbufs.choose}!16; // choose sixteen samples at random = one bar full
~g2 = {~hbufs.choose}!16;
Pbindef(\x, \buf, Pseq(~g1, inf)); // play those sixteen samples chosen
Pbindef(\x, \buf, Pseq(~g2, inf)); // different sixteen, so, a variation.
Pbindef(\x, \dur, 0.5);
~d1 = {2.rand/10}!16;
~d2 = {2.0.rand/10}!16;
Pbindef(\x, \amp, Pseq(~d1, inf));
Pbindef(\x, \amp, 0.2);
Pbindef(\x, \note, Prand((-36..0), inf));
Pbindef(\x, \note, Pseq({(-24..0).choose}!16, inf)); // pitch each sample down by random amount
Pbindef(\x, \note, nil);

// hmm. blx diminished, that's just C major!
// was using \degree instead of \note, better sounds a bit more like messiaen now :)
~c = {var x = Scale.diminished2.degrees.scramble.keep(4).sort; x.insert(1,(x.removeAt(1)-12))};
// hexMajor thing also works beautifully now!
~c = {var x = Scale.hexMajor6.degrees.scramble.keep(4).sort; x.insert(1,(x.removeAt(1)-12))};

// next question might be changing \note, \dur and \root in a coordinated way
Pbindef(\k, \note, Pstutter(Prand([5,7,9,11,13]*2, inf), Pfunc(~c)),
\dur, 0.5,
\root, 3, // best option for feeling of key change
\amp, Prand((2..5)/70,inf)

Recursive synthesis


I’ve been working for a while with an improvising setup that uses what is sometimes jokingly called ‘recursive synthesis’ – that is, plugging an effect unit back in to itself and experimenting with the no-input feedback sounds.

Today I’ve had some success with the next step in developing this system. I’ve written a SuperCollider patch that allows me to gate and pitchshift the feedback sounds, so that I can begin to find a way to play them musically using a keyboard. Here’s the very first run at playing this system: careful, some rather loud and uncontrolled noises here!


In the picture, you can see the work-in-progress setup. There’s a cheapo DigiTech RP55 guitar pedal feeding back through a small mixing desk. I’m using a swell pedal to contral some of the parameters of the various fx from the DigiTech, particularly sweeping the pitch of the ‘whammy’ and ‘pitch shift’ functions, set up in various presets. The mixing desk is not entirely necessary, but the tone controls are useful to have in the feedback loop.

Below is the code for the SuperCollider patch. As always, my thanks to the developers of this software, and all the help received from the community on the mailing list.
~velbus = Bus.control.set(1); // not using yet
SynthDef(\pitchin, { | midinote = 60, gate = 1, amp = 0.1 |
var in, sig, env, ratio, trans, shift, sel;
trans = midinote - 60;
in =[0,1]);
ratio = trans.midiratio;
shift =, pitchRatio: ratio, timeDispersion: 0.1);
sel = trans.abs > 0;
sig =, [in, shift]);
env =, gate, doneAction: 2);, sig * env * amp * 37) // compensate for quiet;
~notes = Array.newClear(128); // array one slot per MIDI note
~on = MIDIFunc.noteOn({ |veloc, num, chan, src|
~notes[num] = Synth(\pitchin, [\midinote, num, \amp, veloc * 0.2/127]);
~off = MIDIFunc.noteOff({ |veloc, num, chan, src|
~cc1 ={ |val|
}, 1, 0 ); // cc1 on channel 0 = midi channel 1, not using yet

Patchin’ at the Hague

I’ve been at the Koninklijk Conservatorium in Den Haag for the last couple of days, working with a group of academics from all over Europe on the METRIC project – ‘Modernizing European Higher Music Education through Improvisation’. (If anyone can tell me in which language that acronym works, I’d love to know!)

While I’m here, I’ve been amusing myself with some work on a simple SuperCollider patch to pitchshift live audio, that I intend to use as part of my own improvisational practice. Particularly tickled to be able to say in future that I ‘worked on this patch at the Institute of Sonology in The Hague’, which is strictly speaking… more or less true!

Also brings fond memories of another piece of software associated with this institution, ACToolbox, that I used quite extensively in the past, although not so much now.

Let’s hear it for koncon!

Here’s some test code, part of a larger project:

// Institute of Sonology, Den Haag, 18 Mar 2016 :)
SynthDef(\pitchin, { | trans = 0, gate = 1 |
var sig, env, ratio;
sig =[0,1]);
ratio = trans.midiratio;
sig =, pitchRatio: ratio, timeDispersion: 0.1);
env =, gate, doneAction: 2);, sig * env);
x = Synth(\pitchin);
x.set(\trans, 12); // can sound a bit comby, try timeDispersion about half grainsize
x.set(\trans, -12);
x.set(\trans, 7);
x.set(\trans, -7);;

Live Coding and the Body

I’ve just spent a very stimulating weekend, combining an algorave in Brighton with the Live Coding and the Body symposium at Sussex University. A packed weekend: I didn’t keep notes of exactly who and what and when, so this is a rather chaotic reflection!

The algorave was in a clubby sort of room above a pub. Code from each performer’s laptop was projected on a black behind them, while some livecoded visuals in IBNIZ were projected on an adjacent wall. A good atmosphere, although I found the gig sometimes painfully loud, especially with those very forward and raw sounds which you sometimes get from coded synths.

The first set I caught was Chris Kiefer, working in SuperCollider (the old, pre-IDE version, looked like). This was excellent: very approachable danceable grooves, with a nice line in slowly changing fx. After that, Aneurin Barker Snook did a set in Tidal. It’s the first time I’ve seen this Haskell-based tool: to me it seemed quite firmly targetted at algorave, rather than a more general approach to coding music performance. A very harsh set, if I remember correctly, but still musical and interesting.

From this point on, my memory is a little blurred. A very abstract and glitchy set from Norah Lorway: not sure what tool she was using as she did not have time to plug into the projector. Also Charlie Roberts playing his own web-based Gibber language, with a nice line in livecoding the ascii text. Oh, and… Mico Rex – bonkers! In a good way: cardboard boxes, SC code, and exuberant singing.

The symposium programme turned out to be a little different from the published one: once again, this will be a bit disorganised as I didn’t keep accurate notes. A fascinating range of disciplines and interests in the room, including people working in music, fine art, architecture, dance, analog synthesis, social anthropology, and more. Some of the highlights I recall:

  • Marije Baalman gave a very, very cool performance of her piece ‘Wezen’, a tour-de-force of live SuperCollider code combined with sensor gloves.
  • Renick Bell’s presentation sparked off quite a lively debate, bringing to the table his reinterpretation of the pragmatic philosophy of John Dewey. Some deep questioning of his philosophical approaches ensued, led by David Berry in particular.
  • David Ogborn gave us two treats. The first was a multi-layered coding piece, with Pbindef’s in SuperCollider being generated by another piece of SC code and programatically ‘typed’ onto the screen, leaving David free to add in a solo part on electric guitar. On day two, he talked us through a stimulating range of people, ideas and references as a follow up.
  • Andrew R Brown talking about a spectrum of approaches to controlling algorithms, from text to gestural controllers, and points in between: also a nice demonstration of his own rig, using impromputu combined with a simple bank of sliders and switches on an iPad mini.
  • Alex McLean shared some of his work in collaboration with dancer Kate Sicchio.
  • Andrew Duff gave a lively and fun talk/demo on the modular synth scene, liberally illustrated by humorous gifs from the Muff Wiggler forums. A lot of gear porn here, really, including mention of the Pismo: ok, that’s it, I’m hanging on to mine, one day I’ll get it up and running again!
  • Cecile Chevalier drew some comparisons between livecoding and the work of Jackson Pollock, although as we unpicked that, perhaps a slightly problematic parallel…

Overall, a very pleasant long weekend in the very pleasant seaside town of Brighton. The Sussex University campus was very comfortable, as was the wonderful Dutch bike I hired from Amsterdammers.

Other things I learned about:

Final braindump, below an archive of all the #lcatb tweets (some of the attributions here probably wrong, collected this list in a rather hacky way…):

Great response – mod syths @yaxu suggests that we don’t react against the digital but instead software, which is ‘generally awful’ #lcatb
berrydm 12:18pm via Twitter for iPhone

Andrew Duff showing his own personal “Orac” and modular synths at Live Coding and the Body #lcatb
thormagnusson Jul 05, 2:06pm via iOS

Here @allthesixes666 presents a graph that should resonate with many computer musicians’ experience #lcatb
Retweeted by _sshaw and 4 others
thormagnusson 11:52am via iOS

#lcatb Afternoon kicking-off with @berrydm & Nick Rothwell coding as collaborative fist class discipline
Retweeted by musicSussex and 5 others
thormagnusson 12:08pm via iOS

Live coding the modular synths #lcatb
Retweeted by musicSussex and 3 others
thormagnusson 12:08pm via iOS

@ad_tpim Does ‘lowres’ modular syth demo at #lcatb symposium @SussexUni
thormagnusson 11:52am via iOS

Andrew Duff’s great modular synth setup at Live Coding and the Body seminar. Cool! #lcatb
pauwly 12:01pm via Twitter for Android

Andrew Duff @allthesixes666 blames his modular addiction on close friend @RussellHaswell #lcatb
thormagnusson 11:52am via iOS

#lcatb Pismo, very nice, I’ve already got one :)
pauwly 11:43am via Twitter for Android

Great talk by David Ogborn #Livecoding #acousmonium #spacialisation #emodiment #lcatb
tedthetrumpet 11:35am via Hootsuite David Ogborn offering some leads to follow #lcatb
renick 11:21am via Twitter for Android

@berrydm wish an AI were running traffic on the way to #lcatb today…
Show Conversation
pauwly 11:00am via Twitter for Android

Open questions about control through gesticulation and code in live performance #lcatb
lukechurch 10:55am via TweetDeck

Watching Andrew Brown merge gestural control via an iPad and a text programming language at #lcatb, we should add this to #DynamoBIM soon.
tedthetrumpet 10:51am via Hootsuite

#lcatb Andrew R Brown reflecting on the balance between textual and gestural control
berrydm 10:44am via Twitter for iPhone

Day 2- Live Coding and the Body on a Sunday (!?!) with Andrew Brown (gestural controllers & code description) #lcatb
TanyaMGoncalves 10:43am via Twitter for Android

#LCATB – sad that today is my last day of confrences #untilnexttime
tedthetrumpet 9:28am via Hootsuite

Day 2 of Livecoding and the Body starts soon: great to be here, meeting interesting people, and learning stuff #lcatb
TanyaMGoncalves Jul 05, 3:47pm via Twitter for Android

@d0kt0r0 performing live #LCATB
Retweeted by d0kt0r0 and 1 others
yaxu 12:31am via Twitter Web Client

Super discussions at the live coding at the body symposium, check out the #LCATB hashtag.
Retweeted by supersg559
yaxu 12:31am via Twitter Web Client

Soviet synthesizer bridged occultism and electronic music — will be of interest to #lcatb…
thormagnusson Jul 05, 2:06pm via iOS

#lcatb Afternoon kicking-off with @berrydm & Nick Rothwell coding as collaborative fist class discipline
Retweeted by giovamusic and 5 others
TanyaMGoncalves Jul 05, 5:10pm via Twitter for Android

@yaxu @yaxuprime Alex McLean #LCATB http://
shelly_knotts Jul 05, 5:10pm via Twitter Web Client

nice to have a few controversial comments – referring to live coding as a gendered practice is fairly problematic #lcatb
tedthetrumpet Jul 05, 5:04pm via Hootsuite

#lcatb interesting discussion around livecoding compared with the work of Jackson Pollock
cappelnord Jul 05, 4:58pm via Twitter Web Client

#lcatb people: Thanks for tweeting!
kunstwissen Jul 05, 4:36pm via Twitter Web Client

Micorex ask: why should a live coder be on stage? after presenting some of their practice: hitting buttons, singing, dancing… moving #lcatb
Retweeted by sicchio and 1 others
danny_bright Jul 05, 4:28pm via Twitter for iPhone

Awesome – cardboard boxes full of wires and joysticks – surely the best controllers #lcatb
Retweeted by livecodenet
kunstwissen Jul 05, 4:40pm via Twitter Web Client

@kunstwissen some responses:challenging context of performance, sharing experience, put emphasis on coding as a cultural practice #lcatb
Retweeted by livecodenet
kunstwissen Jul 05, 4:36pm via Twitter Web Client

@d0kt0r0 performs with a multi channel live coding demon which is //not evil #lcatb
Retweeted by tedthetrumpet and 1 others
kunstwissen Jul 05, 4:36pm via Twitter Web Client

A brilliant presentation by @cassieldotcom on code and choreography. #lcatb
Retweeted by livecodenet and 6 others
shelly_knotts Jul 05, 2:33pm via Twitter Web Client

next symposium: ‘Live Coding and Socks’? ;) #lcatb
Retweeted by livecodenet
pauwly Jul 05, 3:00pm via Twitter for Android

We’re flying now – forget Deleuze #lcatb
Retweeted by livecodenet
pauwly Jul 05, 2:39pm via Twitter for Android

Hester Reeve – Why might we choose to use the body live? The audience as witness and not consumer. #lcatb
Retweeted by livecodenet and 1 others
berrydm Jul 05, 3:46pm via Twitter for iPhone

Next Marije Baalman live coding a set #lcatb
Retweeted by livecodenet
TanyaMGoncalves Jul 05, 3:47pm via Twitter for Android

#lcatb David Ogborn performs – #guitar meets #SuperCollider #generative #code
Retweeted by livecodenet and 1 others
danny_bright Jul 05, 4:15pm via Twitter for iPhone

Lots of interesting people, talks, presentations and performances so far at #lcatb @musicSussex
sicchio Jul 05, 3:36pm via Twitter for iPhone

Performance #2 Marije Baalman – making the code sweat! #lcatb
Retweeted by livecodenet and 1 others
pauwly Jul 05, 4:09pm via Twitter for Android

@d0kt0r0 performs with a multi channel live coding demon which is //not evil #lcatb
Retweeted by shelly_knotts and 1 others
TanyaMGoncalves Jul 05, 3:47pm via Twitter for Android

@d0kt0r0 performing live #LCATB
berrydm Jul 05, 3:46pm via Twitter for iPhone

David Ogborn playing guitar & live coding set – interesting use of live generated code #lcatb
sicchio Jul 05, 3:36pm via Twitter for iPhone

Trying to keep up with Live Coding and the Body tweets #lcatb
tedthetrumpet Jul 05, 3:31pm via Hootsuite

#lcatb surrounded by all these coders, I should probably just *ask* someone why my Pbindef won’t .play until I .stop it :)
thormagnusson Jul 05, 2:06pm via iOS

Hester Reeve – Why might we choose to use the body live? The audience as witness and not consumer. #lcatb
Retweeted by berrydm and 1 others
pauwly Jul 05, 2:39pm via Twitter for Android

A brilliant presentation by @cassieldotcom on code and choreography. #lcatb
Retweeted by readywriting and 6 others
thormagnusson Jul 05, 2:06pm via iOS

A very provocative slide #lcatb
Retweeted by livecodenet
TanyaMGoncalves Jul 05, 1:49pm via Twitter for Android

Chats about #livecoding, I’m having a little too much fun right now. #LCATB
Retweeted by livecodenet
pauwly Jul 05, 1:52pm via Twitter for Android

Here is the programme for the conference Live Coding and the Body 2014 #lcatb
Retweeted by goldsmif and 2 others
tedthetrumpet Jul 05, 12:14pm via Hootsuite

#lcatb Renick Bell is trying to get the body *out* of performance (!?)
Retweeted by livecodenet
tedthetrumpet Jul 05, 12:14pm via Hootsuite

Now we have Renick Bell on pragmatic aesthetics ad live coding #lcatb
Retweeted by livecodenet
berrydm Jul 05, 11:00am via iOS

Heideggerian phenomenology might give some useful notions for conceptualisation of live coding practice see #lcatb
Retweeted by livecodenet
berrydm Jul 05, 11:54am via Twitter for iPhone

@livecodenet new discipline love coding? #lcatb
Retweeted by livecodenet
berrydm Jul 05, 11:48am via Twitter for iPhone

“@_TheTerminator_: @berrydm I am a cybernetic organism. Living tissue over a metal endoskeleton.” #lcatb
Show Conversation
kaoskorobase Jul 05, 11:45am via Twitter for iPad

I warned you.. @_TheTerminator_: @berrydm Skynet became self-aware at 2:14am Eastern time, August 29. #lcatb
Show Conversation
pauwly Jul 05, 11:38am via Twitter for Android

Now discussing livecoding blind & connecting machine directly to brain function..its a little after 11am ;D #lcatb
Retweeted by livecodenet
pauwly Jul 05, 11:38am via Twitter for Android

So @thormagnusson outlines his scary brain control live coding ideas. Skynet will soon be here via ixi lang #lcatb
berrydm Jul 05, 11:24am via Twitter for iPhone

Live coding and contextual computing – interesting possibilities for new frameworks for creativity and sonic arts #lcatb
livecodenet Jul 05, 11:22am via Twitter for Android

Marije Baalman providing analysis of love coding interaction loop. Wonders about live coding with eyes closed #lcatb
thormagnusson Jul 05, 11:01am via Twitter Web Client

A fantastic group of people have convened in the Creativity Zone at Sussex to discuss Live Coding and the Body #lcatb // @livecodenet
Retweeted by livecodenet and 6 others
berrydm Jul 05, 11:15am via Twitter for iPhone

How obduracy of the computer can be used to feedback electromagnetic waves into music & sound- Laptop Music (Reuss) – v. Cybernetic #lcatb
TanyaMGoncalves Jul 05, 11:06am via Twitter for Android

berrydm Jul 05, 11:00am via iOS

Thanks for prompting hashtag @berrydm ;D Here we go, going to be great! #lcatb
berrydm Jul 05, 11:03am via Twitter for iPhone

First speaker is Marije Baalman #lcatb
thormagnusson Jul 05, 11:01am via Twitter Web Client

“Michel [Waisvisz] was only interested in code if he could make it sweat” (Sally-Jane Norman) #lcatb
tedthetrumpet Jul 05, 11:02am via Hootsuite

#lcatb so far I’ve learned how to pronounce ‘NIME’ and ‘Gibber’
tedthetrumpet Jul 05, 11:01am via Hootsuite

Sally Jane Norman introduces the first panel #lcatb
Retweeted by thormagnusson
berrydm Jul 05, 10:58am via Twitter for iPhone

We have a hashtag for the Live Coding and the Body conference #lcatb @SussexUni
Retweeted by thormagnusson
berrydm Jul 05, 10:59am via Twitter for iPhone

Electronics nostalgia

Very happy today. Been working on some electronics for the show. For me as a creator, this is a big part of what Why Scotland, Why East Kilbride is about: exploring my nostalgia for teenage evenings spent with a soldering iron, a cup of coffee, and a Hawkwind album.

Some pics below: trying to get my SN76477 prototyping station back up and running.

01 sn76477 overview 02 sn76477 board good 03 sn76477 front panel ok


Some of the publicity put out for the show has perhaps been unintentionally slightly misleading! I did have a dream of having a French horn section in the show, but that dream has been realised through… technical means :)

Instead of live players, I’ve invented the ‘Horn-a-Tron’. This is a Pd patch which plays back midi horn sounds alongside video clips of sixteen horn players – with thanks to Steve Park for the horn vids. I’m not going to put up a clip of this working just yet, spoil the effect. But here’s the patch:

Pd 'Horn-a-Tron' patch

Quartz Composer video sampler for WSWEK

Here’s a screenshot of something I’ve been working on today for ‘Why Scotland, Why East Kilbride’:


Regular readers of this blog (ahem) will recall that this all started with a piece of music I heard in a dream, for a double rock band plus a big squad of french horns. Well, the double rock band is doable, but the french horns were going to be impractical for the gig.

So, I’m building a sort of video sampler. There will be video clips of each of the four chords the horns play, with four different variations of each chord. Midi notes will then be used to trigger a clip of the correct chord. This would have been easy to do using Jitter in Max… so I had to do it the hard way and try to build it in Quartz Composer!

I’m getting there, ish. The visual tools in QC are amazing, but the program structuring and logic is kind of Turing-machine basic. Like, to combine four numbers I had to use a combination of three OR gates, and to build a toggle switch it’s a counter then take the count modulo 2. And it’s crashy and buggy, and the documentation is rudimentary. And I’m going to have to edit the video super carefully, if the clips aren’t exactly 2400ms long then my programming will break.

But… it might just work.

Cheetah MQ8, first go

I’ve just got a new toy (tx John!). It’s a Cheetah MQ8 midi sequencer. This is UK made, apparently released sometime in the late 80s as a competitor to the Alesis MMT-8. I’ve only just started to figure it out: pretty crazy trying to do everything with a combination of button presses and a tiny, dim LCD screen!

Here’s a two track improvisation, using sounds from my trusty Casio GZ-50M.