WCCChallenge_Spooky

WCCChallenge_Spooky

The Forest is Watching

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