# WCCChallenge_Obscure

# ObscureTerrain

For this week's Creative Code Challenge by @sableraph: **"Obscure",** **ObscureTerrain** is coded in ***Hydra, LiveCodeLab & SonicPi*** *to* Represent a realm full of obscured traits.

## Obscuring Process

* The genre of the sound coded in **SonicPi** is meant to be obscured. What is it? Is it even a genre that can be found on *Spotify Wrapped, YouTube Recap or Apple Music Year Review?*
    
    * The main sound heard comes from using various Linear Algebra techniques to further the idea of an obscured way to design sounds.
        
* Through **Hydra & LiveCodeLab,** This terrain is obscured through many geometric shapes and the lasting effect they have. How was this realm originally designed: is it possible to go back?
    

## Poem

```ocaml
What is the Eye Focusing on?
What is the sense of touch, rotating upon?
What is obscured in the smell of the place
Or even in the taste of the space?
We may never know
We may always know
But the information
That portion
Sorting
Is an on going rotation
Investigation
```

## Video

<iframe width="560" height="315" src="https://www.youtube.com/embed/7GE7HV0EXoo?si=Q0FjxIobKUHohaaP"></iframe>

## Code

### SonicPi - Linear Algebra Exploration

```ruby
live_loop :matrix do
  
  use_random_seed (Time.now.to_i)
  
  matrix1 = [[rrand(-5,3),0,dice(3)],[rrand_i(-4,4),dice(4),rrand(-3,4)],[rrand(-2,4),-1,0]]
  
  #determinant
  a = matrix1[0][0]
  b = matrix1[0][1]
  c = matrix1[0][2]
  
  d = matrix1[1][0]
  e = matrix1[1][1]
  f = matrix1[1][2]
  
  g = matrix1[2][0]
  h = matrix1[2][1]
  i = matrix1[2][2]
  
  
  #determinant formula
  det_a = a*(e*i - f*h) - b*(d*i - f*g) + c*(d*h - e*g)
  
  use_synth :piano
  play (det_a).abs
  
  #matrix math
  
  mat_add_A = a + d + g
  mat_add_B = b + e + h
  mat_add_C = c + f + i
  
  #scalar
  
  use_synth :piano
  play (mat_add_A).abs * 3
  play (mat_add_B).abs * 3
  play (mat_add_C).abs * 3
  
  sleep [0.25,0.5,1,1.5,2,4,8].choose
end



live_loop :dotproduct do
  
  #dot product formula - scalar
  
  
  use_random_seed (Time.now.to_i) / 3
  
  matrix2 = [[rrand(-5,23),12],[dice(14),rrand(-3,4)]]
  
  #vector length, pythagros of multiple dimension
  
  vector_subspace = [rrand(-3,5),dice(7),rrand(-2,8),dice(3),dice(4)]
  
  for i in 0..vector_subspace.length - 1 do #give constraints for the loops
    var = vector_subspace[i]   #variable
    var *= var #updating
    vector_subspace[i] = var #equals the square
    total = vector_subspace.sum #sums the total after each iteration
    puts total
    vec_length = Math.sqrt(total)
    puts vec_length
  end
  
  #dot product break down
  
  ax = matrix2[0][0]
  ay = matrix2[0][1]
  bx = matrix2[1][0]
  by = matrix2[1][1]
  
  ab = (ax * bx)  + (ay * by)
  det_ab = (ax * by) + (ay * bx)
  
  use_synth :piano
  play (ab).abs / 2, decay: vec_length
  
  
  use_synth :prophet
  play (det_ab).abs
  
  with_fx :ping_pong, mix: rrand(0.1,0.6) do
    sample :glitch_perc5 , rate: vec_length, pitch: (det_ab).abs % 16
    sample :elec_filt_snare , rate: vec_length, pitch: (det_ab).abs % 16
    sample :drum_cymbal_closed, rate: 0.5, decay: (det_ab/vec_length).abs % 7
    sample 'C:/Audio/Rambling/JungleJazz.wav',beat_stretch: vec_length, rate: Math.sqrt(dice(25) + 1)/3
  end
  
  
  sleep [0.25,0.5,1,2,4].choose
end
```

### SonicPi - Chaotic Overlaying

```ruby
live_loop :rollback2 do
  #making true random as it goes with the actual time
  #then using the Math.cbrt to make it a different seed ratio then the above function
  use_random_seed Math.cbrt(Time.now.to_i)
  use_bpm 75
  puts Time.now.to_i
  with_fx [:echo,:whammy,:ixi_techno].choose, mix: rrand(0.1,0.6) do
    with_fx :ping_pong, mix: rrand(0.1,0.9) do
      sample"C:/SonicPi/SocaRiddims/WaterMelonRiddim_Wav.wav",amp: 7, rate: Math.sqrt(dice(25) + 1)/3
      sample"C:/SonicPi/SocaRiddims/WaterMelonRiddim_Wav.wav",amp: 7, rate: 0.9 * (Math.sqrt(dice(25) + 1)/3)
      sample"C:/SonicPi/SocaRiddims/WaterMelonRiddim_Wav.wav",amp: 1.2, rate: 0.75 * (Math.sqrt(dice(25) + 1)/3)
      sample"C:/SonicPi/SocaRiddims/WaterMelonRiddim_Wav.wav",amp: 3, rate: 0.85 * (Math.sqrt(dice(25) + 1)/3)
      sample"C:/SonicPi/SocaRiddims/WaterMelonRiddim_Wav.wav",amp: 3, rate: 0.95 * (Math.sqrt(dice(25) + 1)/3)
      sample"C:/SonicPi/SocaRiddims/WaterMelonRiddim_Wav.wav",amp: 3, rate: 1.05 * (Math.sqrt(dice(25) + 1)/3)
      sleep [128,64,96].choose
    end
  end
  sleep [0.5,1,2].choose
end
```

### Hydra

```javascript
s0.initScreen()

src(s0).kaleid(0.03).scale(0.35).blend(s0).add(s0).out()
```

### LiveCodeLab

```javascript
rot = time / 5

animationStyle paintOver

if time % 8 > 4
	ambientLight 255
	noStroke
if time % 8 < 4
	stroke red
	ambientLight 124- ((time % 30)*3), 90, 110 + ((time % 23) * 4)

ringDetail = 11
if time % 10 > 5
	fill orange

if time % 10 < 5
	fill yellow

if time % 12 < 6
	rotate rot,Math.hypot(rot, time  % 10)
	scale 0.7

if time % 12 > 6
	rotate rot, Math.sqrt(rot), rot
	scale wave(0.03)

9 times with i
	rotate (time / 5) + i
	ringDetail times
		rotate wave(0.03), Math.cbrt(i), (2 * pi) / ringDetail
		move 2*i, i, i/5
			rect abs(tan(1 - time % 5)), 0.3 + (1 / ringDetail)
	if time % 14 > 7
		fill blue
	else
		fill red
		stroke white
			animationStyle motionBlur
			rect  Math.hypot(0.3, (3 / ringDetail)),abs(tan(3 - time % 6)),0

```
