MinaCoding2024_Dancing

MinaCoding2024_Dancing

3D Avatars Dancing

WildCh0reo

For the 29th day of MinaCoding2024: " Dancing", WildCh0reo is coded in various Locomotion choreographies.

Extra Effects are coded with Hydra and sound is made in SonicPi.

Poem

Strong Bonds
Weak Choreo
Which way Shall they Go
as they Continue Their Rounds

Video

Code

Locomotion

--front row cacti
dancer { url="cactus.glb",animation = 7, size = 4.5, x = range 5 -5 (osc 0.5), y = -11 };
dancer { url="cactus.glb",animation = 5, size = 4.5, x = range 5 -5 (osc 0.25), y = -11 };
dancer { url="cactus.glb",animation = 4, size = 4.5, x = range 5 -5 (osc 0.45), y = -11 };

--back row enlarged
dancer { url="cactus.glb",animation = 3, size = 1.5, x = 3 };
dancer { url="cactus.glb",animation = 5, size = 1.5, x = -3 };
dancer { url="cactus.glb",animation = 7, size = 1.5, x = -6 };

--left size oves
dancer { url="cactus.glb",animation = 4, size = 3.5, x = -2, ly = range -3 3 (osc 2), size= 0.5, lz = range -3 3 (osc 2), size= 0.5};
dancer { url="cactus.glb",animation = 3, x = -2, z = -2,rz = range -5 5 (osc 0.2), ry = range -5 5 (osc 0.5), ly = range -3 3 (osc 2), size= 0.5 };

-- right side moves
dancer { url="cactus.glb",animation = 7, size = 3.5, x = 5, ly = range -3 3 (osc 2), size= 0.5, lz = range -3 3 (osc 2), size= 0.5};
dancer { url="cactus.glb",animation = 6, x = -2, z = 5,rz = range -5 5 (osc 0.2), ry = range -5 5 (osc 0.5), ly = range -3 3 (osc 2), size= 0.5 }

dancer { url = "OrDroid", animation = [15,1,17,1,21,1],size = range 0.25 2.15 (osc 0.17), ry = range - 90 90(osc 0.25), z = -3, ly = range -180 180 (osc 2)};


--Glitchy Droid More
r2 = step [3,4,5,6] (phase 4 0);
r = step [0.5,2,1,4] (phase 16 0);


for [0..10]  (\n -> dancer {url = "OrDroid", dur = n*0.5, x = (n)+(-20), y = -4 + osc(1) * sin(n), z = -10, rx = r2 * r2 * r2, ry = 0, rz = 0, size= r});


--background maker,quartz
clear { color= 0x51414F, alpha= 2.5 };


-- Triple Light Points
point {x = range 0 17 (osc 0.15), z = range 0 6 (osc 0.35) , intensity = range 8 35 (osc 0.35), color = 0xFFA230};
point {y = range 0 17 (osc 0.15), z = range 0 6 (osc 0.35) , intensity = range 15 35 (osc 0.25), color = 0xFFA500 };
point {z = range 0 17 (osc 0.15), x = range 0 6 (osc 0.35) , intensity = range 20 45 (osc 0.35), color = 0x008080 };

-- DataGhost Converging
dancer { url = "DataGhost", animation = 12,size = 3, y = -2, Z = -5, dur = 3, ry = 90 };
dancer { url = "DataGhost", animation = 22,size = 3, y = -2, Z = -5, dur = 3, ry = 270 };
dancer { url = "DataGhost", animation = 3,size = 3, y = -2, Z = -5, dur = 1, ry = 0};

--  DataGhost downsized
dancer { url = "DataGhost", animation = 3,size = 2, y = -2, Z = -12, ry = 270,x = -1 };
dancer { url = "DataGhost", animation = 3,size = 2, y = -2, Z = -12,ry = 90, x = 1};


b n = dancer {url = "raccoon", animation = [13,1,n,1,n+3,1,25,1], 
size =  ((n +1)/10), y = range 0 20 (phase 16 (n/10) * 2 + (-1)), 
x = -8 + (n/5),  z = range -3 3 (phase 1 (n/50) * 2 + (-1)), rz = n * 23.7 };
for [0..15] b;

b n = dancer {url = "mushy",dur = 3.5, rx = range n n*45,lz = n * 5, ry = n +  range 10  260 (osc n * 0.215 / 10), x = n - (3) * 3,animation = [n,0.25, n + (-2),0.5,n*3,07.5,n*2.1]};
for [0..15] b;

Hydra

s0.initScreen()

src(s0).modulateScale(src(s0).blend(osc([0.2,0.3,1.4].smooth())),0.1).blend(src(s0).scale(1.25)).out()

SonicPi (Sped Up)

use_random_seed Time.now.to_i

#array made from a python script

shipyard1 = [[ 7,  2,  8,  6,  4, 11,  6,  7, 11,  7, 10, 10, 10,  5, 11,  7],
             [ 5,  5, 10,  8,  1,  4, 10, 11, 10, 11,  6, 10, 11, 10,  2,  4],
             [11,  1,  8,  9, 10,  7, 10, 10,  5, 10,  9,  6,  6,  1,  9, 11],
             [10,  8, 10,  6, 11,  1,  5,  9,  6,  1, 10,  4, 10,  7, 10,  7],
             [10,  8, 10, 10,  7,  4,  1,  9, 11,  9, 10,  2,  7, 10,  8,  5],
             [10,  8, 10,  9, 10,  8,  8,  9, 10, 11,  8,  3, 10,  5, 10,  8],
             [ 2,  3,  5, 10,  7,  9, 11,  6,  6,  6,  3, 10,  7,  6, 10,  3],
             [ 9, 11,  9,  9, 10, 11, 11, 10, 11,  7, 10, 10,  7,  6,  8,  6],
             [11,  4,  6,  7, 11, 10,  5,  6,  6, 11,  0,  9,  8, 10, 11,  9],
             [ 4,  7, 11,  6,  7,  9, 11,  9,  1,  9,  8, 11,  3,  9,  6,  8],
             [ 3, 11,  3, 10,  7,  9, 10,  4,  0,  7,  6, 11,  2,  8, 10, 11],
             [ 7,  6, 10,  1, 11,  2,  3, 10,  6,  8,  4, 11,  3,  8,  8,  6],
             [ 4,  2,  1, 11,  1, 11, 11,  8,  6, 10,  8, 10,  1, 10,  4, 10],
             [ 8,  6,  8,  3,  5, 10,  9,  2, 10, 11,  7,  6, 10, 11, 11,  9],
             [ 8,  7, 11, 10,  1, 10,  8, 10,  4,  9, 10,  3,  7, 11,  7,  4],
             [ 8,  8, 10,  5,  9,  0,  2, 10,  9,  5,  0, 10,  6,  0, 10, 11]]

shipyard2 = [[ 8, 10,  7,  6,  4,  7, 10,  1,  5,  8, 10,  9,  6,  9, 10,  5],
             [11,  3,  8, 10,  8, 10,  4,  7, 10,  7, 10,  7, 10, 10, 10, 10],
             [ 7,  5,  7, 10,  7,  7,  8, 10, 10,  3,  6, 10, 11,  6,  6,  9],
             [10, 11,  6, 10,  9, 11, 11,  2,  4,  9,  9,  2,  8,  1, 11,  1],
             [11,  9, 10, 11,  9,  9,  7,  2,  6,  9, 10, 11,  9,  9,  0, 11],
             [ 8,  6,  9,  9, 10,  4,  6, 10,  7,  4,  9, 11,  4,  8,  6,  7],
             [11,  6,  6,  4, 10,  2,  6,  4,  7,  2,  7,  9, 10, 10, 10,  9],
             [ 8,  0, 11,  8,  1, 11,  5,  7, 10,  7,  7,  5, 11,  0, 10,  1],
             [10,  8,  1,  5, 10,  7,  8,  7, 11,  4,  2,  4,  2, 10,  8, 10],
             [ 1, 11,  2,  5,  7, 11, 11,  2,  7,  3,  6, 10,  8,  8, 10,  4],
             [ 6, 10,  6,  6, 10,  2,  9,  5,  8,  6,  8, 10,  1, 11, 10,  6],
             [ 9,  7,  9,  4,  1,  6,  6,  7,  8,  9, 10, 11,  6,  6, 10,  8],
             [ 9,  3, 10,  7,  0, 11, 10,  5, 11, 11,  9,  7,  8, 10, 10,  0],
             [ 2, 11,  6, 10,  9,  7,  1, 10,  7,  0,  0,  9,  7,  8,  3,  8],
             [ 3,  9,  5, 10,  2,  7,  4,  6,  2,  1,  4,  5,  6,  3, 10,  7],
             [ 4, 10,  6,  9,  7, 10,  6,  4, 11,  5,  4,  3,  8, 10,  9,  6]]


shipyard3 = [[10, 11,  6,  7,  8,  6,  6,  4, 10, 11,  2,  2,  2, 10,  6, 10],
             [ 2, 10,  7, 10,  8,  7, 10,  1,  8,  3, 11,  7,  8,  5, 10,  7],
             [ 9, 10,  6,  9,  8,  0,  8, 11,  3,  6,  4, 10,  5, 11,  8,  2],
             [ 7,  7,  3,  6, 11,  6,  3, 10,  7,  7,  8,  7,  6,  8, 11,  3],
             [ 9, 10, 10,  9, 10, 10, 10,  6,  8,  5, 10,  8, 11,  6,  2, 11],
             [10, 10,  2, 10,  7,  5,  5,  6,  7,  9,  5, 10, 11,  7,  9, 10],
             [ 7, 10, 10, 10,  9, 10,  6, 10,  2, 11,  8,  8,  7, 10,  1,  8],
             [11, 10, 11, 10,  8, 10,  8,  9, 10, 10, 10, 10, 10,  2,  0,  3],
             [10, 11,  7,  8, 10, 11,  7,  4, 11,  8,  2,  2, 10,  1,  1,  4],
             [ 5,  6, 11, 10,  2,  1,  6,  5,  7,  2,  8,  8,  8,  6,  5,  4],
             [10,  8,  4,  3, 10,  7, 11,  6,  8,  5,  5,  8,  9,  7,  7, 10],
             [ 7, 11, 11,  2,  9,  3,  9,  8,  9, 11,  7,  6, 11, 11,  4,  2],
             [ 6, 10,  9, 11,  4, 11,  8,  3,  4,  8, 11,  7, 11,  6,  3,  8],
             [ 9,  8,  4,  4, 11,  8,  8, 10, 11,  9,  3, 10, 11, 10,  7,  6],
             [ 4,  5,  9,  4,  1,  7, 10,  5, 10,  6, 11, 11,  0,  0,  8,  7],
             [ 6, 10, 10, 11, 10,  0, 10,  2,  6,  0,  0,  6, 10,  9,  9,  8]]


shipyard4 = [[10, 10,  6,  8,  9,  7,  6,  9, 11,  4,  6,  3,  3,  2,  6, 10],
             [ 1, 11, 11,  9,  5,  6,  8,  1, 10,  7,  3,  3, 10, 11, 10,  5],
             [ 3, 10,  4, 10, 10,  7,  6,  8,  7,  1, 11,  2,  7, 10,  4, 10],
             [ 3, 10,  6,  7,  8,  6,  1,  7,  8,  7,  6,  8,  4,  7,  6, 11],
             [ 9, 10,  9, 11, 10,  8,  7,  4,  5, 11, 11,  3,  9,  7, 10,  7],
             [ 3,  8,  7,  8, 10, 10,  3,  5,  9,  8,  8,  6,  7,  7, 10, 10],
             [ 3,  8,  1,  2,  7,  4,  9,  7,  2, 10,  3,  6,  0,  1, 10,  7],
             [10,  5, 11,  3,  5,  6, 10,  6,  8,  8,  6,  8,  7,  3,  4,  7],
             [ 7,  8,  2,  9,  6, 11,  7,  8,  1,  7, 11, 11, 10,  7, 11, 11],
             [ 5, 11,  0, 11,  6, 10,  5,  9,  9,  6, 10, 10,  8,  1,  9, 11],
             [ 6,  0, 10, 10, 11,  3,  5,  7,  6,  9, 11,  6,  6, 11, 10, 10],
             [ 2,  6, 10,  5, 10,  8,  1,  8, 11,  8,  4,  8, 11,  9, 10, 10],
             [ 6, 11, 11,  6,  7,  8,  2,  8,  8,  6, 10,  8, 10,  7,  2,  3],
             [10,  2, 10,  7,  6,  6, 11, 10,  1,  6, 10, 10, 11,  7, 11, 10],
             [ 8, 11,  9,  8, 10,  9, 10, 10,  3, 11,  5, 11, 10,  7, 11,  3],
             [10,  6, 10,  9, 10,  2,  1,  7,  9,  7,  7,  6,  5,  7,  8, 10]]


shipyard5 = [[11,  7,  6,  9, 10,  2, 10,  5,  8,  3,  6, 10,  6,  0,  9,  3],
             [ 9, 11,  2, 10,  8,  2,  9,  4, 11, 10,  3,  0,  9, 10,  2,  7],
             [10,  6, 11,  6, 11,  9,  0,  7,  9, 11, 11,  5,  7, 11,  8, 11],
             [ 9,  3,  1,  9, 11,  9,  6,  2, 10,  2, 10,  6,  5,  6,  9,  9],
             [10,  5,  6,  3,  9,  5,  5, 11,  6,  3,  6, 10,  3,  4, 10,  3],
             [ 4, 10,  5,  2, 10,  6,  4, 11,  7,  3,  9,  7, 10,  6,  7, 11],
             [11, 10,  9, 10, 10, 11, 10,  0, 11, 11,  7,  9,  2, 11,  6,  8],
             [10, 10,  3,  2, 10,  4,  8,  4, 10,  9,  8,  4,  9,  9,  1,  4],
             [ 7,  7, 11, 11,  4, 11,  6, 10,  6,  9,  9, 11,  6,  0,  4,  7],
             [ 8,  7,  7,  9,  8,  8, 11,  9,  4, 11,  7,  8,  1, 11,  7,  9],
             [10,  4,  2,  4,  6,  6, 11,  7,  5,  6,  7,  7,  6, 11, 10,  7],
             [ 9, 10,  6,  1, 10,  9,  8, 10, 11,  9,  3,  9, 10, 10,  2, 10],
             [ 7, 10,  9, 10,  2, 10,  9, 10,  4, 10, 11,  9, 10, 10,  6,  4],
             [ 6, 10,  3,  7,  2, 10,  6,  9,  6,  9,  8, 10, 11, 11,  9,  3],
             [10,  6, 11, 10,  5,  3, 11,  9,  9,  6,  5,  6,  7,  8,  4,  2],
             [ 1,  2, 10, 10,  4,  9,  4,  1,  9, 10, 11,  8,  4,  9,  7,  2]]

def sonification(shipyard,looping,sampling)

  live_loop looping do

    #iterating the 2d arrays
    for i in (0...shipyard.size) #overall size of range
      for j in (0...shipyard[i].length) #overall length of the arrays

        #these variables will be the main event trigger for each scenario, through different uses

        x = shipyard[i][j]
        y = Math.sqrt(shipyard[i][j])
        case x #using case & when as a switch while using

        when 1..3
          with_fx :ping_pong, mix: 0.65 do
            with_fx :ixi_techno, mix: 0.75 do
              with_fx [:echo,:whammy].choose, mix: rrand(0.4,0.8) do
                sample [:loop_safari,:tabla_ghe4].choose, amp: 6, rate: x * rrand_i(-2,2) + 0.01, beat_stretch: y
              end
            end
          end

        when 4..6
          with_fx [:ping_pong,:vowel].choose, mix: rrand(0.4,0.8) do
            sample [:elec_blip,:elec_blip2,:elec_bong].choose, beat_stretch: y + 1, amp: x - 1, decay: x + 1
          end

        when 7..9
          if x % 2 == 0
            use_synth :piano
            n = ring(:b3,:c4,:c5,:d6,:e7,x*9,x*12)
          else
            use_synth [:prophet,:chipbass,:chiplead].choose
            n = ring(:c5,:a4,:b1,x*7)
          end

          with_fx :wobble do
            play n.tick, on: spread(x+6,24).look, release: (x/24), pan: -0.5
          end

        else
          with_fx [:ping_pong,:flanger,:whammy].choose, amp: 1, mix: rrand(0.4,0.8) do
            sample sampling, attack: x, beat_stretch: (x-3).abs
          end
        end

        sleep [0.5,0.75,1,1.5,2].choose #pause in between each spawn, replicating the different thinking processes
      end
    end
  end

end


#following a tick format

sonification(shipyard5,:yard5,:ambi_glass_hum)
sonification(shipyard4,:yard4,:ambi_glass_rub)
sonification(shipyard3,:yard3,:ambi_piano)
sonification(shipyard2,:yard2,:ambi_glass_hum)
sonification(shipyard1,:yard1,:ambi_piano)

#following a shuffle format

sonification(shipyard1.shuffle,:yard1mix,:ambi_choir)
sonification(shipyard3.shuffle,:yard3mix,:ambi_lunar_land)
sonification(shipyard5.shuffle,:yard5mix,:ambi_soft_buzz)
#array of notes


def sounds (loop,timer)

  x = [[:D4,:Gs5, :D1],[:A4,:Cs5, :E1] ,[:B4,:Ds2, :B3], [:A3,:Cs2,:Cs4]]

  live_loop loop do
    counter = x.choose #counter
    use_random_seed (Time.now.to_i)/timer #random seed
    with_fx [:level,:whammy,:vowel].choose, mix: rrand(0.2,0.7) do #effects
      use_synth [:prophet,:piano].choose #synth
      play :Cs2 # note
      play choose(counter) ,amp: rrand(0.2,2) #notes
      sleep [0.25,0.5,0.75,1].choose
    end
  end
end

sounds(:berdy,2)
sounds(:birdy,3)
sounds(:bordy,4)
sounds(:bardy,5)