SpookyForest
For this week's Creative Code Challenge by @sableraph: "Spooky", SpookyForest is Coded in Locomotion, Hydra & SonicPi. In A Forest, where the gaze changes
Eerie Process
The sounds are coded from three SonicPi compositions, which are then remixed through some filters to expand on the spooky/eerie feeling
Hydra is used to add a glitchy the screen alongside the 360 view
The 3D Models, Scene, Physic and Colors are coded in Locomotion to provide an eerie background
Poem
Eeriness
Spookiness
For the Forest is all
For when you gaze, it shall call
Eeriness
Spookiness
The Forest watches
For its essence arrives in batches
Eeriness
Spookiness
The Forest
is?
Video
Code
Hydra
s0.initScreen()
src(s0).modulateRotate(src(s0).repeat(3).kaleid([3,2,1,2,3])).mult(src(s0)
.diff(osc(20.273, 0.001, 0.541)).rotate(1.036)).
pixelate([200,400],[400,800,1600,1000]).blend(s0, 0.799).scrollX(0.1,0.1)
.modulateScale(src(s0).scale(3, () => 1.05 + 0.1 * Math.sin(0.088 * time)))
.out(o0);
frame = 30
speed = 0.5
Locomotion
-- Scene Setup
dancer { url = "test_proto_nograss.glb", size = range 0.35 4 (osc 0.075)};
dancer { url = "Garden.glb", size = range 0.35 4 (osc 0.075)};
dancer { url = "Garden.glb", size = range 1 6 (osc 0.075), z = 13};
dancer { url = "Garden.glb", size = range 2 8 (osc 0.075), z = 14};
camera { y = 3, z = 10, x = 0};
dancer { url = "NatureGirl.glb", size = 3.5, y = -3, dur = 10, ry = -90, z = 4 };
--purple is #800080
point {x = range 0 17 (osc 0.15), z = range 0 6 (osc 0.35) , intensity = range 8 25 (osc 0.5), color = 0x800080 };
dancer { url = "Willy", dur = 10, size = 3.5, y = -5, animation = 4};
-- 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};
dancer { url = "DataGhost", animation = 5,size = 3, y = -2, Z = -5, dur = 3, ry = 90 };
dancer { url = "DataGhost", animation = 7,size = 3, y = -2, Z = -5, dur = 3, ry = 270 };
dancer { url = "DataGhost", animation = 1,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};
-- triple rolls, five bodies of OrDroid
dancer { url = "OrDroid", animation = 15,size = 3, y = -3, Z = -5, x = range -5 5 (osc ), dur = 0.5, ry = 90 };
dancer { url = "OrDroid", animation = 17,size = 3, y = -3, Z = -6, x = range -5 5 (osc ), dur = 0.5, ry = 90 };
--Body Rolls
dancer { url = "OrDroid", animation = 21,size = 3, y = -3, Z = -7, x = range -5 5 (osc ), dur = 0.5, ry = 90 };
dancer { url = "OrDroid", animation = 21,size = 3, y = -3, Z = -9, x = range -5 5 (osc ), dur = 0.5, ry = 90 };
dancer { url = "OrDroid", animation = 21,size = 3, y = -3, Z = -11, x = range -5 5 (osc ), dur = 0.5, ry = 90 };
SonicPi
Layer 1
notes = (ring 47, 72, 35, 59, 74, 54, 62)
with_fx :flanger do
use_bpm 30
live_loop :arp do
use_synth :prophet
play notes.tick, release: [0.2,0.4,0.6,0.8,1].tick
sleep [0.250,0.500,1].choose
end
end
with_fx :flanger do
use_bpm 30
live_loop :arp2 do
use_synth :prophet
play notes.tick, release: [0.2,0.4,0.6,0.8,1].choose
sleep [0.250,0.500].choose
end
end
Layer 2
#010101 - use reverses and ticks to remix this piece
Spread5 = (spread 5,12).tick
with_fx :reverb do
live_loop :melody do
use_bpm 80
use_synth :pretty_bell
bellTime = (scale [:f3,:e3].reverse, :major).reverse
play bellTime if (spread 5,12).tick
sleep [0.5,1,2].choose
end
end
with_fx :bpf do
live_loop :hausing, sync: :melody do
use_bpm 80
sample :sn_generic if (spread 4,5).reverse.tick
sample :bd_mehackit if spread(7,12).tick
sleep [0.5,1,2].choose
end
end
live_loop :drumming do
use_bpm 80
sample :drum_bass_hard if Spread5
sample :glitch_robot2 if Spread5
sample :bd_tek if Spread5
sleep [0.5,1,2].choose
end
with_fx :reverb do
with_fx :slicer do
live_loop :timely, sync: :melody do
use_bpm 80
use_synth [:fm,:prophet].tick
use_synth :dull_bell
DullTime = (scale [:d2,:d3].choose, :major_pentatonic).mirror
play DullTime if (spread 9,12).tick
sleep [0.5,1,2,4].choose
end
end
end
with_fx :whammy do
with_fx :ixi_techno do
live_loop :addition do
use_bpm 80
sample :glitch_perc1 if (spread 3,4).look
sample :glitch_perc5 if spread(7,12).look
sleep [0.5,1].choose
end
end
end
Layer 3
live_loop :dosage do
use_bpm 20
with_fx :wobble, mix: 0.25 , amp: 1 do
sample [:ambi_drone,:ambi_glass_hum].choose,beat_stretch: 1, rate: [0.5,0.4,0.3,0.2,0.3,0.4].tick
sleep [0.5,1,2].choose
end
end
with_fx :ixi_techno, mix: 0.2 do
live_loop :bell do
use_bpm [120,80,220].choose
sample [:perc_bell,:elec_bell].choose, rate: (rrand 0.125,1.5)
sleep rrand(0.2,2)
end
end
live_loop :synth do
with_fx [:flanger,:ixi_techno].choose, mix: 0.34 do
sync :bell
use_synth [:chiplead,:chipbass,:piano].choose
play [50,75,100].choose , release: 0.1, sustain: dice(2), cutoff: rrand(60, 120) if spread(7,8).tick
sleep [0.125,0.5,1,2].choose
end
end