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
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
Code
SonicPi - Linear Algebra Exploration
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
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
s0.initScreen()
src(s0).kaleid(0.03).scale(0.35).blend(s0).add(s0).out()
LiveCodeLab
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