·

# 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
``````

## 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,
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,