Sonic Pi and Hydra inspired by Ryoji Ikeda

It’s not a clean hardcore noise cover by Ryoji Ikeda.
Just inspired by his stuff. I guess I like a bit melodic stuff mixed in.

Hydra is set to have Sonic Pi as a source, so we can use the waveforms as live visuals.


# 230613 0037 Sonic Pi inspired by Ryoji Ikeda YT
# Trying out a new way of working with Sonic Pi and Hydra YT
# Saved 230613 0037
# Created by https://linktr.ee/relaxnow
# YT https://youtu.be/iNYczTiLNh4
# Inthread




# Inspiration
#   Ryoji Ikeda - Data.Matrix - Live at Sonár 2010
#   https://youtu.be/k3J4d4RbeWc

#   Ryoji Ikeda Pure Data Tutorial
#   https://youtu.be/CLddxGIlVPU

#   Ryoji Ikeda - Supercodex [Full Album]
#   https://www.youtube.com/watch?v=MsGPRZPLfPA

#   Ryoji Ikeda ARS musica !!
#   https://youtu.be/LeIZvgkRFSQ?t=1002

#   Also checkout Alva Noto or Byetone




set_volume! 1
use_bpm 60


with_fx :level, amp: 1 do |l|
  
  with_fx :reverb, room: 0.4, amp: 1 do
    with_fx :distortion, distort: 0.9, amp: 1 do |k|
      with_fx :hpf, cutoff: 120 do |hpf|
        
        live_loop :a1 do
          
          use_random_seed 100 #10000  #100 nice
          
          16.times do
            tick
            ls = 8
            control l, amp_slide: ls, amp: 2
            kr = [0,0.2,0.4,0.6,0.8].choose
            #            control k, res_slide: ls, res: 0.9, mix: kr
            #  control k, res: kr, mix: kr
            
            control hpf, cutoff: rrand_i(10,120)
            
            r1 = 0.0001
            r2 = 0.0001
            
            #r1 = 0.001
            #r2 = 0.001
            
            #r1 = 0.0025
            #r2 = 0.0025
            
            r1 = rrand(0.0001,0.001)
            r2 = rrand(0.0001,0.01)
            
            # density rrand_i(1,4) do
            sy = 128
            synth = knit(1,sy, 2,sy).look
            case synth
            when 1
              use_synth [:chipnoise].choose
            when 2
              use_synth [:bnoise,:gnoise, :noise, :chipnoise].choose
            when 3
              #use_synth [:bnoise,:gnoise, :noise].choose
            end
            
            
            play :c3, release: r1, pan: -0.8 if (spread(1,5)+spread(2,5)+spread(3,5)+spread(4,5)+spread(5,5)).look
            play :c4+3, release: r2, pan: 0.8 if (spread(1,5)+spread(2,5)+spread(3,5)+spread(4,5)+spread(5,5)).reverse.look
            #            sleep [0.25,0.125].choose
            sleep 0.125
          end
        end
        
      end
    end
  end
end

with_fx :level, amp: 2 do
  with_fx :reverb, room: 0.9 do
    
    live_loop :bass do
      tick
      use_synth :sine
      
      / sine bass /
      play :c2, amp: 2, sustain: 2, release: 1 if spread(1,16*3).look
      #play :c4, amp: 1, release: 2 if spread(1,16*3).look
      
      / mel /
      #      mel = [0,1,2,3,4,5].choose
      #mel = [0,4].choose
      #mel = 5
      m = 32
      
      mel = knit(0,m, 1,m, 2,m, 3,m, 4,m ,5,m).look
      puts "melody =",mel if spread(1,m).look
      case mel
      when 0
      when 1 #(not that great)
        play :c4+[0,2,-2,5,3,7,-7].look, release: 0.15, amp: 0.5 if spread(12,16).look and one_in(2)
      when 2
        play :c4+[0,2,-2,5,3,7,-7].look, release: 0.15, amp: 0.5 if spread(12,16).look and one_in(2)
        play :c5+[0,2,-2,5,3,7,-7].look, release: 0.15, amp: 0.5 if spread(12,16).look and one_in(2)
      when 3
        #        play :c4+[0,2,-2,5,3,7,-7].look, release: 0.15, amp: 0.5 if spread(12,16).look and one_in(2)
        play :c5+[0,2,-2,5,3,7,-7].look, release: 0.15, amp: 0.5 if spread(12,16).look and one_in(2)
        play :c6+[0,2,-2,5,3,7,-7].look, release: 0.15, amp: 0.5 if spread(12,16).look and one_in(2)
      when 4
        play :c4+[0,2,-2,5,3,7,-7].look, release: 0.15, amp: 0.5 if spread(12,16).look and one_in(2)
        play :c5+[0,2,-2,5,3,7,-7].look, release: 0.15, amp: 0.5 if spread(12,16).look and one_in(2)
        #play :c6+[0,2,-2,5,3,7,-7].look, release: 0.15, amp: 0.5 if spread(12,16).look and one_in(2)
        play :c7+[0,2,-2,5,3,7,-7].look, release: 0.15, amp: 0.5 if spread(12,16).look and one_in(2)
      when 5
        play :c4+[0,2,-2,5,3,7,-7].look, release: 0.15, amp: 0.5 if spread(12,16).look and one_in(2)
        play :c5+[0,2,-2,5,3,7,-7].look, release: 0.15, amp: 0.5 if spread(12,16).look and one_in(2)
        play :c6+[0,2,-2,5,3,7,-7].look, release: 0.15, amp: 0.5 if spread(12,16).look and one_in(2)
        play :c7+[0,2,-2,5,3,7,-7].look, release: 0.15, amp: 0.5 if spread(12,16).look and one_in(2)
      end
      
      
      
      sample :glitch_perc3, beat_stretch: [0.25,0.5, 1,2,4].choose, rate: [2,4].choose, slice: rrand_i(1,10), amp: 2, pan: rdist(0.5) if bools(1).look and one_in(2)
      
      use_synth :noise
      #    use_synth_defaults release: [0.01,0.02,0.04,0.06].choose
      use_synth_defaults release: [0.001,0.002,0.004,0.006].choose
      c = [70,80,90,100,110,120,130].choose-50
      #  play :c9, cutoff: c, amp: 2, pan: rdist(0.75)
      use_synth_defaults release: [0.01,0.02,0.04,0.06].choose
      #   play :c4, cutoff: 80, amp: 2, pan: rdist(0.5)
      
      dr = 64
      drums = knit(0,dr, 1,dr*2, 2,dr, 3, dr, 4,dr, 5,dr).look
      #drums = 1
      case drums
      when 0
      when 1
        sample :bd_haus, cutoff: 70, amp: [4,0,0,0,0,0, 0,0,0,0,0,0].look
        #sample :bd_haus, cutoff: 50, amp: [0,0,0,0,2,0, 0,0,2,0,0,0].look
        #sample :elec_tick, amp: [4,1,0,1,1].look, rpitch: 12
        #sample :elec_tick, amp: [4,1,0,1,1,0].look, rpitch: 0
        #sample :bd_haus, rate: 4, cutoff: 130, amp: [2,1,0,2,1,0,1].look and one_in(2)
      when 2
        sample :bd_haus, cutoff: 70, amp: [4,0,0,0,0,0, 0,0,0,0,0,0].look
        sample :bd_haus, cutoff: 50, amp: [0,0,0,0,2,0, 0,0,2,0,0,0].look
        #sample :elec_tick, amp: [4,1,0,1,1].look, rpitch: 12
        #sample :elec_tick, amp: [4,1,0,1,1,0].look, rpitch: 0
        #sample :bd_haus, rate: 4, cutoff: 130, amp: [2,1,0,2,1,0,1].look and one_in(2)
      when 3
        #sample :bd_haus, cutoff: 70, amp: [4,0,0,0,0,0, 0,0,0,0,0,0].look
        #sample :bd_haus, cutoff: 50, amp: [0,0,0,0,2,0, 0,0,2,0,0,0].look
        sample :elec_tick, amp: [4,1,0,1,1].look, rpitch: 12
        sample :elec_tick, amp: [4,1,0,1,1,0].look, rpitch: 0
        #sample :bd_haus, rate: 4, cutoff: 130, amp: [2,1,0,2,1,0,1].look and one_in(2)
      when 4
        # sample :bd_haus, cutoff: 70, amp: [4,0,0,0,0,0, 0,0,0,0,0,0].look
        sample :bd_haus, cutoff: 50, amp: [0,0,0,0,2,0, 0,0,2,0,0,0].look
        sample :elec_tick, amp: [4,1,0,1,1].look, rpitch: 12
        sample :elec_tick, amp: [4,1,0,1,1,0].look, rpitch: 0
        sample :bd_haus, rate: 4, cutoff: 130, amp: [2,1,0,2,1,0,1].look and one_in(2)
      when 5
        sample :bd_haus, cutoff: 70, amp: [4,0,0,0,0,0, 0,0,0,0,0,0].look
        sample :bd_haus, cutoff: 50, amp: [0,0,0,0,2,0, 0,0,2,0,0,0].look
        sample :elec_tick, amp: [4,1,0,1,1].look, rpitch: 12
        sample :elec_tick, amp: [4,1,0,1,1,0].look, rpitch: 0
        #sample :bd_haus, rate: 4, cutoff: 130, amp: [2,1,0,2,1,0,1].look and one_in(2)
      end
      
      sleep 0.125
    end
    
  end
end


#Hydra
# https://hydra.ojack.xyz/?code=JTJGJTJGczEuaW5pdFNjcmVlbigpJTBBJTIwJTIwJTBBc3JjKHMxKSUwQS5waXhlbGF0ZSgxNjAqNCUyQzkwKjQpJTBBLnBpeGVsYXRlKCU1QjUwJTJDNSU1RC5mYXN0KDIpJTJDJTVCMjAlMkM1MDAlNUQuc21vb3RoKCkuZmFzdCgzKSklMEElMkYlMkYubHVtYSgwLjIpJTBBLmludmVydCgtNSklMjAlMkYlMkZOTyUwQS5tb2R1bGF0ZShzcmMoczEpJTJDTWF0aC50YW4odGltZSoxMCkpJTBBJTJGJTJGLnJvdGF0ZSgwJTJDMC4xKSUwQSUyRiUyRi5rYWxlaWQoNCklMEElMkYlMkYucm90YXRlKDAlMkMwLjEpJTBBLnNjYWxlKDEpJTBBJTJGJTJGLnNjYWxlKDIpJTBBJTJGJTJGLnNjcm9sbFkoMCUyQyU1QjAuMDIlMkMtMC4wMSp0aW1lJTJGMTAwJTJDMC4wMSU1RCklMEElMkYlMkYuc2Nyb2xsWCgwJTJDJTVCLTAuMDIqdGltZSUyRjEwMDAlMkMwLjAxJTJDMC4wMyU1RCklMEEuY29sb3JhbWEoMSUyQzAlMkMwKSUyMCUyRiUyRnRoaW4lMjBvciUyMHRoaWNrJTBBLmNvbG9yYW1hKDAuNCUyQy0xMCUyQzApJTIwJTJGJTJGTk8lMEEudGhyZXNoKDAuNTYpJTIwJTJGJTJGYiUyNnclMjBvciUyMGNvbG9yJTBBLm1hc2soc2hhcGUoMiUyQzAuOCkuc2NhbGUoMSUyQzklMkYxNikpJTBBLm91dCgpJTBB

Hydra code

//s1.initScreen()
  
src(s1)
.pixelate(160*4,90*4)
.pixelate([50,5].fast(2),[20,500].smooth().fast(3))
//.luma(0.2)
.invert(-5) //NO
.modulate(src(s1),Math.tan(time*10))
//.rotate(0,0.1)
//.kaleid(4)
//.rotate(0,0.1)
.scale(1)
//.scale(2)
//.scrollY(0,[0.02,-0.01*time/100,0.01])
//.scrollX(0,[-0.02*time/1000,0.01,0.03])
.colorama(1,0,0) //thin or thick
.colorama(0.4,-10,0) //NO
.thresh(0.56) //b&w or color
.mask(shape(2,0.8).scale(1,9/16))
.out()

I really like his stuff below here.
Next step: Recreate a setup to do something similar in Sonic Pi :smiley:

Anyone up an exploration challenge based on Ryoji Ikeda?

4 Likes

Great music, thanks for sharing。

1 Like

I did a similar thing with Hydra / TidalCycles / flok, also inspired by the Ryoji Ikeda Pure Data Tutorial by Takumi Ogata.

from AVJAm Berlin, September

My Hydra code - the last 2 commands use audio input

shape(4, 1, 0).scale(1, 0.05, 1).scrollX(0, 0.05).out(o0)

shape(4, 1, 0).scale(1, 0.05, 1).scrollX(0, 10.05).out(o0)
shape(4, 1, 0).scale(1, 0.05, 1).repeat(8).scrollX(0, 11.3).out(o0)
shape(4, 1, 0).scale(1, 0.0075, 1).repeat(44).scrollX(0, 11).out(o0)

shape(4, 1, 0).scale(1, 0.075, 1)
  .repeat(44).scrollX(0, 11).repeatY(5, () => (time * Math.random() * 7.85)).out(o0)

shape(4, 1, 0).scale(1, 0.075, 1)
  .repeat(12).scrollX(0, 11).repeatY(5, () => (time * Math.random() * 7.85))
  .layer(shape(4, 1, 0).color(1,1,1,()=>Math.random()>0.999?1:0)).out(o0)

shape(4, 1, 0).scale(1, 0.075, 1).repeat(12)
  .scrollX(0, 11).repeatY(5, () => (time * Math.random() * 7.85))
  .layer(shape(4, 1, 0)
  .color(1,1,1,()=>Math.random()>0.995?1:0))
  .modulate(noise(23.07),()=>a.fft[0]).out(o0)

shape(4, 1, 0).scale(1, 0.05, 1).scrollX(0, ()=>0.05 * a.fft[0]).out(o0)
2 Likes