CactiInChaos
For this week's Creative Code Challenge by @sableraph : Succulent, I decided to make CactiInChaos. This week the languages used are Locomotion for the Visuals, Hydra for the visual effects and SonicPi for the sound.
Design Process
Cacti are part of the succulent family, so I choreographed the cacti avatars embedded in the Locomotion language. The different movements seen are motion captured and are differentiated by the animation function. The numbers associated with the function represent a different move performed for that avatar, in this case: Cactus.
The code for Locomotion can be copied and pasted into the following URL to be live coded: https://dktr0.github.io/LocoMotion/
The visuals are layered to bring a sense of chaos. Aided by the SonicPi sounds to reinforce the chaotic rhythm of the choreography that clashes quite often.
Oil Paint Filter added once again
Poem
Cacti Roaming Free
Cacti Dancing to the chaos beneath
Cacti Prancing to the layers of their leaves
Cacti Floating to the Breeze
As the breeze passes by
Acknowledging the movements of each Cacti
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 }
Hydra - Modulation 1
s0.initScreen()
src(s0).scale(0.5).scrollX([0.5,0.4,-0.3,-0.2,0.1,0.2,-0.4]).
rotate(0.5,5).out()
speed = 0.05
Hydra-Modulation 2
s0.initScreen()
src(s0).scale(0.5).scrollX([0.5,0.4,-0.3,-0.2,0.1,0.2,-0.4]).
kaleid([3,4,5]).rotate(0.5,5).out()
speed = 0.075
SonicPi - Glitchy Sounds
mag = [3,21,7,13,22,19]
win = [20,5,10,7,14,32]
ooo = [7,12,3,15,21,7]
i = 5
live_loop :drone1 do
use_bpm 180
with_fx :gverb, mix: 0.4, decay: 0.6 do
sample [:guit_e_fifths,:ambi_choir].choose, pitch: (mag[i] - win[i]).abs, beat_stretch: mag[i]
end
puts mag[i]
sleep mag[i]
i -= 1
if i < 0
i = 5
end
end
live_loop :drone2 do
use_bpm 180
with_fx [:reverb,:ping_pong].tick, mix: 0.6 do
sample [:loop_electric,:ambi_drone].choose, beat_stretch: win[i]
end
puts win[i]
sleep win[i]
i -= 1
if i < 0
i = 5
end
end
live_loop :drone3 do
Effects_Swap1 = [:ixitechno, :reverb, :panslicer]
use_bpm 180
with_fx Effects_Swap1[rand(4)] do
sample [:perc_swoosh,:perc_bell,:perc_snap].choose, beat_stretch: ooo[i]
end
puts ooo[i]
sleep ooo[i]
i -= 1
if i < 0
i = 5
end
end
live_loop :moredrums do
use_bpm 180
with_fx :echo, mix: 0.7, amp: 3 do
sample :drum_tom_mid_soft, beat_stretch: (win[i] - ooo[i]).abs
puts (win[i] - ooo[i]).abs
sleep (win[i] - ooo[i]).abs
i -= 1
if i < 0
i = 5
end
end
end
live_loop :synths do
use_bpm 120
if one_in(2)
sample :bd_haus
use_synth [:prophet,:piano,:piano].tick
play (knit :e2, 24, :c2, 8).tick, sustain: dice((win[i] - ooo[i]-mag[i]).abs)
sleep [0.5,1,2,4].choose
end
sleep [0.5,1,2,4].choose
end
SonicPi - Beep Sounds
with_fx :ixi_techno do
live_loop :commencing do
use_bpm 10
sample :drum_snare_soft if spread(7,12).tick
sleep (1.0/24)
end
end
end
with_fx :ixi_techno, mix: 0.7, phase: 0.5 do
live_loop :riddimsection do
use_bpm 20
sample :elec_beep if spread(7,12).tick
sleep(1.0/24)
end
end
with_fx :ixi_techno, mix: 0.4 do
live_loop :newlayer do
use_bpm 10
sample :drum_bass_soft if spread(5,12).tick
sleep(1.0/24)
end
end