In my composition project, I tried to work with different strcuture to craft a pience, but I find out dispite having a st

I recently worked on a live-coding piece where I ne main build and then started another. Figuring out how to bring it to a proper ending turned out to be harder than I expected. I tried fading elements in and out, layering piano, bass, and percussion, and even syncing chords with claps using MIDI—but it never quite lined up the way I imagined.

Some parts worked better than others, and the misalignments actually gave the piece some unexpected character. It was a good reminder that live coding isn’t just about making things “perfectly in sync”—it’s about experimenting, feeling how layers interact, and learning from what doesn’t go as planned.

Even though the final MIDI sync didn’t work out, the process taught me a lot about structure, timing, and how to play with musical ideas in real time.


start = do{
d1 $ qtrigger $ filterWhen (>=0) $ seqP [
(3,6, s "hh*1 hh*2 ~808:3" # gain (slow 4 (range 1.25 1.5 saw))),
(6,8,  s "[808mc:1(5,8), hh*1? hh*2 ~808:3]" # gain (slow 4 (range 1.25 1.5 saw))),
(8,30,  s "[<808mc:2(7,8) 808mc:1(5,8)>, hh*2? hh*4 ~808:3]" # gain (slow 4 (range 1.25 1.5 saw)))];
d6 $ qtrigger $ filterWhen (>=0) $ seqP [
    (0,3, ccv "<0 31 64 127>" # ccn "0" # s "midi"),
    (3, 6, slow 2 $ ccv (segment 128 $ range 0 127 tri) # ccn "1" # s "midi"),
    (6, 8, struct "t(5,8)" $ ccv (segment 128 $ range 0 127 tri) # ccn "1" # s "midi"),
    (8, 30, struct "<t(7,8) t(5,8)>" $ ccv (segment 128 $ range 0 127 tri) # ccn "1" # s "midi"),
    (3,30, ccv "0 0 0 127" # ccn "0" # s "midi"),
    (5,8,struct "t(5,8)" $ ccv (range 127 0 tri) # ccn "3" # s "midi"),
    (8,30,struct "<t(7,8) t(5,8)>" $ ccv (range 127 0 tri) # ccn "3" # s "midi"),
    (4, 50, struct "~ ~ ~ t" $ ccv "<5  60>" # ccn "4" # s "midi")
    --(5, 9, fast 2 $ ccv "0 64 127 64" # ccn "1" # s "midi"),
    -- (9, 50, ccv (slow 2 $ range 0 127 saw) # ccn "1" # s "midi")
    ];
-- os there a way to fade the beats in
hush
d2 $ qtrigger $ filterWhen (>=0) $ slow 4 $ s "superpiano*4" # note "[c4,e4,g4,b4] [a3,c4,e4,g4] [f3,a3,c4,e4] [g3,b3,d4,a4] [d4,f4,a4,c5,e5]"+"c3" # legato 2.8 # room 0.8 # lpf (range 600 800 (slow 4 saw))
# speed (range 1.995 3.005 (slow 10 saw)) # pan (range 3 9 (slow 10 saw))

}
build =do{
  xfade 2 $ qtrigger $ filterWhen (>=3) $ s "superpiano*8" # note "[c4,e4,g4,b4]  [a3,c4,e4,g4] <[f3,a3,c4,e4] [g3,b3,d4,a4]> [d4,f4,a4,c5,e5]"+"c3" # legato 2.8 # room 0.8 # lpf (range 600 800 (slow 4 saw))
  # speed (range 1.995 3.005 (slow 10 saw)) # pan (range 3 9 (slow 10 saw));
  d3 $ qtrigger $ filterWhen (>=0) $ seqP[
  (0,5, s "tabla*8" # n (irand 12) # room "0.4" # hpf 300),
  -- (1,5, every 8 (fast 0.1) $ s "tabla2*8" # n (irand 46) # room "0.4"),
  (5, 15, stack [s "tabla*8" # n (irand 12) # room "0.4",
  s "jungbass*5" # note "1 0 1 0 0" # speed 0.25 # room 0.7]),
  (15, 30, s "jungbass*8" # note "1 0 1 0 0" # speed 0.8# room 0.8 # gain 2)];
}



build2=do{
  xfade 1 $ qtrigger $ filterWhen (>=0) $ s "[808sd:7*3, <808bd:3*2, 808bd:1*4>, hh*2]" # room "0.25" # nudge 0.2 # speed (range 1 1.5 (slow 2 saw))# gain 2;
  d2 $  qtrigger $ filterWhen (>=0) $ seqP[
  (0,5, s "superhoover">| note (scale "major" "<[0 4 0] [0 6 0]>" + "c4")# room 0.8 # gain 0.8 # legato 2.5 #speed (range 1.4 1.5 (slow 2 saw)) #lpf 400),
  (5,15,  s "superhoover">| note (scale "major" "<[0 5 6] [0 7 0]>" + "c4")# room 0.8 # gain 0.8 # legato 2.5 #speed (range 1.4 1.5 (slow 2 saw)) #lpf 500),
   (15,20, s "superhoover">| note (scale "major" "<[0 6 7] [7 6 0]>" + "c4")# room 0.8 # gain 0.8 # legato 2.5 #speed (range 1.4 1.5 (slow 2 saw)) #lpf 600)
   ] # hpf (slow 4 (100*saw + 100)) # speed (slow 4 (range 1 4 saw));
   d6 $ qtrigger $ filterWhen(>=0) $ seqP[
   (0,15, ccv (range 0 64 tri) # ccn "1" # s "midi"),
   (0,30, ccv (range 0 32 tri) # ccn "2" # s "midi")]    
 }


hush

start

build

do
  xfade 1 silence
  xfade 2 silence


  xfade 6 silence

build2

xfade 3 silence

xfade 1 silence

hush

shape(3, () => 0.1 + cc[1] * 0.2, 0.2).rotate(() => cc[0] * 3.14)
.invert(0.9).modulatePixelate(noise(()=>2+cc[3]3, 0.5), 100, 1).color(0.65,0.86,()=>2-cc[4]5).scale(1,()=>window.innerHeight/window.innerWidth,1).out()

shape(3, () => 0.1 + cc[1] * 0.2, 0.2)
.repeat(2, 2)
.rotate(() => cc[0] * 3.14)
.modulatePixelate(noise(() => 2 + cc[3]*3, 0.5), 100, 1)
.invert(0.9)
.color(
() => 0.65 + Math.sin(time) * 0.1,
() => 0.86 + Math.cos(time*1.2) * 0.1,
() => 2 - cc[4]*5
)
.repeatX(4) // 4 across
.repeatY(2) // 2 d
.scale(1, () => window.innerHeight/window.innerWidth, 1)
.out()

  // reactive Hydra visual for build2
osc(30, () => cc[1], 0)                                      
  .modulatePixelate(
    shape(4, 0.9)                                             
      .rotate(() => cc[1] * Math.PI),                        
    100, 1                                                  
  )
  .repeat(8, 8)                                               
  .color(3,5,8)                                                                                                               // green multiplier                                                         
  .hue(() => cc[2]*0.2)                                      
  .colorama(() => cc[2]*0.8)                                  
  .blend(o0, 0.5)                                             
  .out(o0)                                                   


osc(30, ()=>cc[0], 0).modulatePixelate(shape(4, 0.9).rotate(() => cc[2] * 3.14)).repeat(8, 8).color(3,5,8).hue(()=>cc[1]*0.2).colorama(() => cc[2] * 0.8).blend(o0,0.5).out()