Table of contents
CircularThoughts
The prompt for Genuary 2024 Day 29 is SDF (Signed Distance Function)
Within the SonicPi Composition of "Circular Thoughts", the SDF controls the bpm, rate, beat_stretch and the notes being played
Poem
The Circles are Rotating
Their Inner Thoughts are Gyrating
The tone is Glitchy
The thoughts are plenty
As the Circular Thoughts are explaining
What their inner Thoughts are Saying
Audio
IllestPreacha · CircularThoughts
SonicPi Code
#getting the sign distance function
#Formula = d(x,y)= Math.sqrt(x**2 + y**2) - radius
#which can be written as Math.hypot(x,y)
#x,y coordinates and the r for radius
def SDF_circle(x, y, r)
Math.hypot(x,y) - r
end
r = 75
live_loop :soundOfSDF do
#random seed based on time
use_random_seed Time.now.to_i
use_bpm (dist_sdf).abs * 10 + 2
#angle from -75 to beyond 360, to test the sdf
angle = rrand_i(-75,400)
# r * angleInRadians = (angleInDegrees * PI) / 180; gives a coordinate for X and Y
#use cos for both as it allows for more points outside the circle to be played
x = r * Math.cos(angle * Math::PI / 180)
y = r * Math.cos(angle * Math::PI / 180)
dist_sdf = SDF_circle(x,y,r)
#if the sign distance value is negative, it plays the disance in prophet
#if the sign distance value is positive, it plays the distance in piano
if (dist_sdf < 1)
with_fx [:ping_pong,:flanger].choose, mix: rrand(0.4,0.7) do
use_synth :prophet
play (dist_sdf).abs
sample [:bass_dnb_f,:perc_snap,:perc_swoosh].tick,
rate: (r/dist_sdf) if spread(7,12).tick
end
else
with_fx [:ixi_techno,:whammy].choose, mix: rrand(0.1,0.9) do
use_synth :piano
play (dist_sdf)
sample [:drum_bass_hard,:tabla_ghe1].choose,
beat_stretch: (r/dist_sdf).abs if spread(5,12).tick
end
end
sleep 0.5
end