Steve Reichs Phasing Technique live coded with Sonic Pi on a rainy day

# 241219 2156 Steve Reichs Phasing Technique live coded with Sonic Pi on a rainy day YT
# Saved 241219 2156
# Created by https://linktr.ee/relaxnow
# Performance https://youtu.be/yDrxUeipXx8
# https://in-thread.sonic-pi.net/t/steve-reichs-phasing-technique-live-coded-with-sonic-pi-on-a-rainy-day/9387


# Inspiration from Hainbach: "The Endless Inspiration of Steve Reich's Phasing Technique"
# https://youtu.be/3OEhe8Pf8PI?feature=shared&t=504


set_volume! 4
use_bpm 90

with_fx :reverb, room: 0.4 do
  
  / top mel + phasing on sleep/
  live_loop :a2 do
    use_random_seed 1000
    32.times do
      tick
      use_synth :pluck
      play :c4+[0,-2,-4,-5,-7,2,4,5,7].choose, release: [0.2,0.2,0.6,0.2,0.1,0.1].choose, pan: rdist(0.5)#, amp: [1,1,1,1,1,0,1,1,0,1,0].look
      sleep 0.25
    end
  end
  live_loop :a3 do
    use_random_seed 1000
    sl = 0.25
    32.times do
      s = 0.001
      #s = 0
      tick
      use_synth :pluck
      play :c5+[0,-2,-4,-5,-7,2,4,5,7].choose, release: [0.2,0.2,0.6,0.2,0.1,0.1].choose, pan: rdist(0.25)#, amp: [1,1,1,1,1,0,1,1,0,1,0].look
      sleep sl+s
    end
  end
  
  / drums /
  live_loop :a1 do
    tick
    drums = knit(0,16,1,128+16).look
    case drums
    when 0
    when 1
      ##sample :elec_tick if bools(1,0,0,0).look
      sample :bd_fat, amp: 4 if spread(1,32).look
      sample :bd_haus, cutoff: 70+line(0,20,steps: 128*2).look if bools(1,0,1,0, 0,1,0,0, 1,0,0,0, 0,0,0,0).look
      sample :sn_generic, finish: 0.04+rdist(0.02) if bools(0,0,0,0, 1,0,0,0, 0,0,0,0, 1,0,0,0).look
      sample :sn_dub, finish: rrand(0.007,0.002), pan: rdist(0.5) if spread(3,5).look
    end
    
    sleep 0.25
  end
  
  / bass /
  live_loop :a4 do
    tick
    bass = knit(0,32,1,32,2,64,3,64).look
    case bass
    when 0
    when 1
      use_synth :saw
      use_synth_defaults cutoff: 100, release: [0.1,0.2,0.3].choose-0.05
      n = :c2+knit(0,32,-2,32).look
      play n+[0,0,0,0,12].look, amp: 1.75# if spread(1,3).look
    when 2
      use_synth :prophet
      use_synth_defaults cutoff: [70,80,90,100].choose-20, release: [0.1,0.2,0.3].choose+0.3
      n = :c2+knit(0,32,-2,32).look
      play n+[0,0,0,0,12].look, amp: 2 if spread(knit(1,16,2,16,3,32).look,3).look
    when 3
      use_synth :tb303
      use_synth_defaults cutoff: [70,80,90,100,110,120,130].choose-20, release: [0.1,0.2,0.3].choose+0.1
      n = :c2+knit(0,32,-2,32).look
      play n+[0,0,0,0,12].look, amp: 1, pan: rdist(0.5) if spread(2,3).rotate(2).look
      play n+[0,0,0,0,12].look-12, amp: 0.8, pan: rdist(1) if spread(2,3).rotate(2).look
    end
    
    sleep 0.25
    
  end
  
end

7 Likes

This is catchy! I had to listen a couple of times after hearing the pluck melody emerge. A year ago I couldn’t imagine enjoying watching live coding :slight_smile: actually didn’t even know it was a thing. Interesting to see how you handled the bass changes and the timing of the run.

2 Likes

Wonderful! This may well be the best thing I’ve heard so far in Sonic Pi.

2 Likes

I really enjoyed this one. Very hypnotic and catchy.
I like the way you scheduled the voice changes. I’m gonna have to mull that one over.

1 Like