For the peformance we wanted to go in with a theme. We decided to center our performance around a drum and bass vibe, however, when we met up and started our first jam session, it all kind-of deviated and became more of a robo-core or break core type of sound and we decided to just let our creative juices flow.

Mohamed was in charge of the hydra and P5 visuals, while Aadil and I were handling the Tidal parts. We decided that this was probably the best workflow as a group because going back and forth from coding in Haskell to Javascript resulted in us doing alot of run time errors and keeping track of the syntax was quite difficult.

We used tried to play and experiment with cutting up whole samples and to try to create some sharp and distinct sounds that we thought would go well with a DnB energy. While for the visuals we tried to flow into something more distorted and bring out a sense of entropy.

Here is our final code from the last Jam:

setcps(0.75)

d9 $ ccv "127 30 60 5" # ccn "0" # s "midi"

d10 $ fast 1 $ ccn "1*128" # ccv (range 200 400 sine)  # s "midi"

d1 $ splice 27 ("8 3 4!1 2*2 4*6 4!4") $ s "ade"
   # lpf (range 200 400 sine)
  # pan "<1 ,-1>"
# gain 1

d2 $ slow 2 $ "jvbass" <| n (run 16) # lpf (range 200 400 sine)

d4 $ s "hh27"<| n (run 8) # lpf 1000

d5 $ sometimes (off 0.125 (# speed 2))
   $ jux (# nudge 0.03)
    $ s "superhoover(<3 5>, 8, <0 1 0 0 3>)"
    # gain 0.8 # hpf 200 # n "<0 1 2 3 4>" # speed 2 
  # krush 1 # lpf (range 200 800 sine) # amp 0.7

d6 
$ sometimesBy 0.15 (chop 50)
$ sometimesBy 0.3 (jux rev)
$ every 4 rev
$ every 4 (#pan 0) 
$ every 5 (# speed (smooth "1 1 1  0.98 0.96 0.93 1.4 1.9")) 
$ s "[[~ notes:28*16 | ~ amencutup*6], [notes:2(5,8) | notes:7*8]]"
# speed "[0.5 1 1 1.26 2 0.25 1]/5"

d7 $ jux rev $ loopAt 16 $ chop 128 $ s "bev:1" # room 0.5
   # gain 1.2 # legato 2 

d5 silence
d6 silence
d3 silence
d1 silence
d2 silence
d4 silence

--cc
d9 $ fast 4 $ 
  ccn "0*16" 
  # ccv "[0 127]*8"
  # s "midi"

--dnb
d7 $ palindrome $ sound "[<amencutup:0 amencutup:1*4> <amencutup:2*2 amencutup:3>] [<amencutup:1*4 amencutup:7> <amencutup:6 amencutup:5*2>] [amencutup:2*4 <amencutup:4 amencutup:3*2>] [<amencutup:5*2 amencutup:4*2> <amencutup:6*2 amencutup:1>]" # speed 2 # release 0.1 # lpf (range 200 600 saw)
shape(4).color(0.8,0.3,0.3).rotate(()=>cc[1]).scale(()=>cc[0]).modulate(noise(3,0.1)).diff(o0,cc[1]).out()

hush()

let p5 = new P5()
p5.hide() 
s0.init({ src: p5.canvas }) 
p5.frameRate(30);
p5.pixelDensity(1);
let glitchDensity = 0; 
let glitchInstability = 0; 
let primaryHue = 180; 
p5.draw = () => {
  glitchDensity = cc[0]
  glitchInstability = cc[1];
  p5.background(0, 0, 0, p5.map(glitchInstability, 0, 1, 30, 10)); 
  p5.noFill();
  p5.strokeWeight(p5.map(glitchInstability, 0, 1, 1, 3)); // go from 1 to 3
  let numElements = p5.floor(p5.map(glitchDensity, 0, 1, 2, 150)); //go from 1 to 150
  for (let i = 0; i < numElements; i++) {
    let x = p5.random(p5.width);
    let y = p5.random(p5.height);
    let w = p5.random(5, 50) * (1 + glitchDensity);
    let h = p5.random(5, 50) * (1 + glitchDensity);
    let angle = p5.random(p5.TWO_PI) * glitchInstability; 
    let hueShift = p5.map(p5.sin(p5.frameCount * 0.05 + i * 0.1), -1, 1, -30, 30) * glitchInstability;
    let currentHue = (primaryHue + hueShift) % 360;
    let saturation = p5.map(glitchInstability, 0, 1, 50, 100);
    let brightness = p5.map(glitchDensity, 0, 1, 70, 100);
    let alpha = p5.map(glitchDensity, 0, 1, 150, 250);
    p5.push();
    p5.translate(x+p5.random(-10,10)*glitchInstability, y+p5.random(-10,10)*glitchInstability);
    p5.rotate(angle);
    p5.stroke(currentHue, saturation, brightness, alpha);
    p5.rect(0,0,w,h);
    p5.pop;
  }
}
src(s0)
  //.pixelate(()=> 5 + cc[1]*20 + cc[0]*30 , ()=> 5 + cc[1]*20 + cc[0]*30 )
  //.kaleid(()=> 1 + Math.floor(cc[0]*6))
  //.modulate(o0, ()=> ccActual[1]*0.05 )
  //.colorama(()=> 0.1 + ccActual[1]*0.3)
  .out() 


hush()

Here is the link to the video:


https://youtu.be/6-CaoJkZ2Ow

https://drive.google.com/file/d/1ZPple_A4kVd4Ttdrza2H5VuWWIC72h00/view?usp=sharing

Visuals (Linh & Ziya)

We want to start with a simple pattern, a circle. As we start from something simple, we add more layers on top of it. As we started with one circle, we tried to make simple changes such as scale and modulateScale. We also wanted to add feedback to the visual, so we added another layer of s0 to the screen. Finally, because we have 2 people work on the visual, we kind of create different visuals and mult them together to get the final visual. Ziya decided to work with the ccn and ccv values to add more dynamic feel to the performance, but overall our aim was to synthesis all our performances into one.

shape(200, 0.5, 1.5)
  .scale(0.5,0.5)
  .color([0.5, 2].smooth(1),()=>cc[1], ()=>cc[0])
  .repeat(2,2)
  .modulateScale(osc(3,0.5), -0.6)
  .add(o0, 0.5)
  .scale(0.9)
  .out()

osc(5, 1, 90)
.kaleid(99)
.modulate(noise(1.9, 0.1))
.color(0.8,0.9,0.9)
.brightness(0.5)
.out(o1)

render()

render(o2)

voronoi(100, 0.15)
  .modulateScale(osc(8).rotate(Math.sin(time)), .5)
  .thresh(0.8)
  .modulateRotate(osc(7), 0.4)
  .thresh(0.)
  .diff(src(o0).scale(1.8))
  .modulateScale(osc(2).modulateRotate(o0, 0.74))
  .diff(src(o0).rotate([-0.012, 0.01, -0.002, 0]).scrollY(0,[-1/19980, 0].fast(0.7)))
  .brightness([-0.02, -0.17].smooth().fast(0.5))
  .out()
hush()

Sound (Rashed & Luke)

Rashed:

When I started working on the audio, I wanted to use a sample. I really like music that starts in a very angelic and harmonic vibe and then it would shift into chaos. I was listening to a song the other day called GOLDWING and I decided to sample the first couple of seconds. I, then, started experimenting with legato along with chop and striate. I decided to play with the vocals instead of having my main sound be a drum sound or a bass sound (inspired by your washing machine). I feel like at first, improvising was really hard and it felt like this really fixed and concrete method of live coding which is why I really disliked it at first. However, after meetings with my group mates, I realized that some things are just not my strong suits and some things are my strong suits which is why I decided to go with audio rather than visuals. I found it really entertaining to experiment with audio as we were recording. Even when it came to the parts we had previously written, I wanted to experiment with what i could do with what I already had to the point where I found myself digging inside of my memories and finding random samples that I have previously used for previous projects and implementing them without taking a second to think if they fit the vibe we were going for. 

Also! I decided to add another sample from one of the best songs ever created called Headlock (hence the sample name) by Imogen Heap because I found one of the instruments she used in her song very interesting and I wanted to somehow incorporate that into the performance. I decided to do this last second but I really pushed for it and thank goodness everyone agreed. Very fun indeed.

Luke:

I was stuck in an endless loop of capstone and all the materials related to it so I wasn’t able to meet with my groupmate. The music on my end has no script, I instead had to improvise my part during the drum circle performance, I followed Rashed’s cue and tried to figure out how to come in so that it matched with visuals and added to the music; his music led the way for me to think on the spot how I could accompany in real time environment.

once $ jux rev $ s "gold"

d1 $ s "~ ~ ~ tink*2"
d8 $ ccv "~ ~ ~ 120 60" # ccn "1" # s "midi"
d9 $ ccv " 124 0 124 0 120" # ccn "0" #s "midi"
d10 $ ccv ((segment 128 (range 127 0 saw))) # ccn "0" # s "midi"
d1 $ s "tink" >| n (scale "major" ("[4*2 3*4 2*2 1*2]")+"1") 

d2 $ s "bass1" # room 0.9 # legato 1 # gain 1

d3 $ chop 2 $ s "gold*2" # legato 0.4

d4 $ jux rev $ striate 6 $ s "gold ~ ~ bass:2*3" # cut 1

d2 $ s "~ ~ bass1*2" # room 0.9 # legato 1 # gain 1

hush

d3 silence 

d4 silence 
 
d1 silence 

d4 $ jux (striate 8) $ jux rev $ s "gold*2"  # legato 1
d9 $ ccv "120 20" # ccn "0" # s "midi"


d5 $ jux rev $ "hh*12 ~ hh*4 ~ hh*8"

d5 $ "~ ~ ~ hh*2" # room 0.2 # legato 0.5 # gain 1.5

hush
d4 silence 
d6 silence
d7 silence
d5 silence 

d6 $ s "tink" >| n (scale "minor" ("[4 3 2 4 1]")+"0.8")
once $ s "lock"
d7 $ jux rev $ chop 6 $ s "lock*4" # legato 1 


hush

Members: Jannah, Jiho, Adilbek, Clara

Adilbek and Jiho were primarily working on Hydra, and Jannah and Clara were working on Tidal code. There were a lot of improvisation sessions where we just met up and improvised whatever we wanted to do on the spot, and we felt ourselves getting more comfortable each time we did it. We also thought of how we could have an arc with a build-up, climax, and slow fade out for both visuals and our audio, and we ended up experimenting a lot with tweaking each other’s lines and building off of what the previous person wrote on Flok, etc. Overall, our sessions were sometimes unpredictable but also rewarding when there were unexpected moments of harmonization during our improv!

Link to the video: click!

Hydra Code

let p5 = new P5()
s0.init({src: p5.canvas})
src(s0).out()
let x = 0;
let y = 5;
let gridSize = 1000;
let r = 255;
p5.hide();
p5.strokeWeight(1);
p5.stroke(0);
p5.noFill();
p5.frameRate(20);
p5.draw = ()=>{
  p5.background(20);
    for ( x = 0; x < p5.width; x += (gridSize*(0.7+cc[0]/2))){
      for ( y = 0; y < p5.height; y += (gridSize*(0.7+cc[0]/2))){
        p5.fill(p5.map(255,0,127,0,255));
        let rand = p5.random(-5,5);
        p5.rect(x,y,gridSize+rand,gridSize+rand);
    }
  }
}

src(o0)
  .invert(()=>ccActual[1])
  .modulateScale(osc(20,[0.1,0.6]))
  .mask(shape(30,()=>cc[0]*1.5).scale(1,window.innerHeight/window.innerWidth,1))
  .modulatePixelate(noise(20,10),400)
  .mult(solid(1,()=>ccActual[1],()=>ccActual[1],1))
  .out(o1)
render(o1)

Tidal Code


d1 $ slow 2 $ s "superhammond*8" # note (scale "lydian" ("[a3*2] ~ a3 a3 c4 [e4 g4]")) # gain 1.2 # lpf 1000


d2 
$ fast 1
$ chop 64
$ "moog(5,8)"
   # gain 1.2
# up "-1"
  #legato 4
#crush (slow 2(range 1.2 1.8 sine))

d3 
$ fast 1
$ chop 32
$ "moog(5,8)"
# speed "3 2"
   # gain 0.8
# up 4
  #legato 4

d4 $ fast 0.5 $ chop 32 $ "ade:6" #speed "4 3" #room 1

p "ccMaskSize" $ ccv "127 30 60 5" # ccn "0" # s "midi"

p "ccColor" $ ccv "<1 0>" # ccn "1" # s "midi"
        

d5 $ slow 2 $ s "blip:8(3,8)" # gain 1.2 # up "<-1 1>"


d6 $ slow 2 $ jux rev $ s "hh*8 sn*4" # crush 8 # gain 0.8 # legato 1

Ruiqi Liu:

In this performance, I am in charge of the visual. I sticked to my preferred minimalistic and geometrical style. I wrote the basic shape using for loop using p5 instances, and then added effects using hydra on top of that. I also tried with lines, circles, ellipse, and squares, and found out that grids look best.

Rebecca & Mike:
We had three main iterations on our tidal script when experimenting with long samples from different genres as we wanted to play with the chop and striate functions. In the early iterations of in-group jams, we developed our drum circle from acid and ambient samples respectively as these two genres have a strong contrast. The acid samples feature a strong energy and a psychedelic feeling, while the ambient samples create a peaceful and calm atmosphere of the audio. These practices helped us open up our mind and had a better idea of how to arrange patterns according to the various textures from and potential emotions brought by the samples. In the final version, we decided to use built-in samples and synth, and utilize effects like legato, and chop to create our own sounds instead of directly using ambient samples. We also wanted to include a transition and an ending to make our project more complete, so we added a strong crush effect to let the synth sound raw and distorted, while adding a strong color transition for the pattern. For the ending, we gradually minimized the pattern and the audio at the same time, and eventually kept the ambient synth on going.

This reading gave me a clearer view of how “liveness” in music can mean very different things depending on the context. It contrasts Deadmau5’s highly pre-planned, spectacle-driven performances with Derek Bailey’s real-time, improvisational approach, and uses that contrast to explore where live coding fits in. What stood out to me is how live coding challenges the idea that laptops are just playback tools. Instead, the laptop becomes a responsive, expressive instrument—one that demands constant decision-making and invites unpredictability.

Reading this made me reflect on how easy it is to overlook the creative labor involved in electronic music when it’s not visibly tied to physical gesture. It also helped me think more deeply about how we define instruments and performance itself. Even when something is happening behind a screen, it can still carry the same energy, tension, and risk as traditional live music—and sometimes even more, because it blurs the line between composing and performing in the moment.

In a way, it reminded me of watching speedrunners code live in video game modding streams—they’re typing fast, problem-solving on the fly, and the audience watches the screen just like a performance. There’s a similar tension between planning and improvisation, and both have that excitement of “anything could go wrong or right.”

Reading Parkinson and Bell’s paper really made me rethink what “live” performance means, especially in electronic music. I’ve been to various EDM shows and experimental gigs, and this paper put into words something I’ve often felt but never quite articulated: there’s a huge difference between watching someone press play in front of a light show versus seeing someone actually create music on the spot.

The comparison between Deadmau5 and Derek Bailey is sharp and effective. I’ve always thought of Deadmau5’s sets as more about the experience – the visuals, the atmosphere, the crowd – than the actual performance of music. He doesn’t hide that either. It’s planned, precise, and works because it’s predictable. Bailey, on the other hand, represents the total opposite: messy, unpredictable, and raw. I’d never heard of him before reading this, but the way the authors describe his improvisation made me want to check him out.

What stood out to me most was how live coding fits between these two extremes. I hadn’t thought of coding as a performance before, definitely not something that could be compared to playing an instrument like a guitar or a piano. But the way live coders type out music in real time, in front of an audience, felt weirdly intimate and vulnerable. It reminded me of watching someone freestyle rap or paint live, impressive not just for the end product but for how it’s made.

I appreciated how the authors didn’t try to argue one approach is better than the other. Instead, they unpacked different ways of being “live” and how audiences respond to effort, visibility, and spontaneity. As someone who’s always been interested in both music and technology, this paper gave me a whole new lens for thinking about performance and what we’re really looking for when we go to see someone play.

Parkinson and Bell’s article does a great job framing live coding within a spectrum of liveness, with Deadmau5 on one end, focused on spectacle and precision, and Derek Bailey on the other, showcasing spontaneous and real-time improvisation. I found it really interesting how live coding pulls from both these phenomena but carves out its own identity by treating the laptop as an instrument rather than just a playback device.

What resonated with me most was the idea of visibility and transparency, and how projecting the code live makes the compositional process part of the performance. It’s such a contrast to Deadmau5’s polished, pre-sequenced sets. Live coding feels more vulnerable and dynamic, where the performer navigates unpredictability in real time, almost like letting the laptop “speak.”I also liked the comparison to Bailey’s idea of the “instrumental impulse”, and that deep, expressive interaction with the tool. It reminded me that live coding isn’t just about technical skill, but about exploring and responding to the moment. In the end, the piece made me rethink what “live” performance really means, and how it’s not just about physical gestures, but about decision-making, presence, and risk.