Dottery
The prompt for Genuary 2024 Day 23 is 16x16. For this , I coded "Dottery" with the 16x16 grid of TixyLand and the slowed down sounds of SonicPi
Poem
The flow
The tunes
The rhythm
As it reaches the rooms
Hidden
In this 16x16 format
In a digital habitat
Waiting to bloom
Video
Code
Tixy.Land
(i | t) % 256 & ( Math.cbrt(i) * t) % 30
SonicPi - Slowed Down
#linear algebra - point to a plane forumla
# distance between point and
# plane is: d = |Axo + Byo + Czo + D |/√(A**2 + B**2 + C**2)
#pt_$ = variable for points
#pl_$ = variable for plane
def pointToPlane (pt_a,pt_b,pt_c, pl_a,pl_b,pl_c,pl_d)
use_random_seed (Time.now.to_i)/5
point_a = [pt_a,pt_b,pt_c]
plane_a = [pl_a,pl_b,pl_c,pl_d]
#dot product of the point and planes
dot = point_a[0]*plane_a[0] + point_a[1] * plane_a[1] + point_a[2] * plane_a[2] + plane_a[3]
#the distance of the point to plane
return plane_D = dot / Math.sqrt(plane_a[0] ** 2 + plane_a[1] ** 2 + plane_a[2] ** 2)
#puts plane_D
end
def lineToPlane(xt,yt,zt, pl_a,pl_b,pl_c,pl_d)
use_random_seed (Time.now.to_i)/4
t = 0
# line to point
point_a = [xt + t,yt * t + yt,zt * 2]
plane_a = [pl_a,pl_b,pl_c,pl_d]
#dot product of the point and planes
dot = point_a[0]*plane_a[0] + point_a[1] * plane_a[1] + point_a[2] * plane_a[2] + plane_a[3]
#the distance of the point to plane
return plane_D = dot / Math.sqrt(plane_a[0] ** 2 + plane_a[1] ** 2 + plane_a[2] ** 2)
#puts plane_D
end
#the rate of the loops are determined by the distance to the plane
#as well as the sustain length
live_loop :lineToPlaneDistance do
use_random_seed (Time.now.to_i)/2
speed = lineToPlane(dice(5),dice(9),rrand_i(1,12),dice(10),8,rrand_i(-4,4),[0,1,2,3,4].choose)
sample [:loop_perc1,:ambi_dark_woosh].choose, rate: speed + 0.1, sustain: speed, amp: dice(5)
sleep [0.5,1,1.5,2,4].choose
end
live_loop :pointToPlaneDistance do
use_random_seed (Time.now.to_i)
speed = pointToPlane(dice(3),dice(4),rrand_i(0,3),dice(10),8,rrand_i(-4,4),[0,1,2,3,4].choose)
speed2 = pointToPlane(rrand_i(0,3),5,dice(4),dice(10),rrand_i(-4,4),9,[0,1,2,3,4].tick)
sample [:loop_electric,:elec_chime].choose, rate: speed, sustain: speed2, amp: dice(5)
sleep [0.5,1,1.5,2].choose
end
live_loop :DistanceToDistance do
use_random_seed (Time.now.to_i)/3
speed = pointToPlane(dice(3),dice(4),rrand_i(0,3),dice(10),8,rrand_i(-4,4),[0,1,2,3,4].choose)
speed2 = lineToPlane(rrand_i(0,3),5,dice(4),dice(10),rrand_i(-4,4),9,[0,1,2,3,4].tick)
#undecided geometry
distToDist = speed + speed2
distXdist = speed * speed2
dist_dist = speed / speed2
#points into circle
circumference = (2 * Math::PI * ([distToDist,distXdist,dist_dist].choose)).abs
area = Math::PI * (distToDist ** 2)
play [circumference,circumference/2], decay: rrand(1,4)
sample [:ambi_drone,:elec_beep,:drum_splash_hard,:guit_em9].choose, beat_stretch: area / 80
sleep [0.5,1,1.5,2,4].choose
end
live_loop :pointing do
#random seeding based on time
use_random_seed (Time.now.to_i) /2
#pointX = the x value of the points
pointX = [dice(8)+3,dice(9)-5]
#pointY = the y value of the points
pointY = [rrand_i(-5,10),rrand_i(-10,20)]
#making the point to line using distance formula
Line_Distance = Math.sqrt((pointX[1] - pointX[0])**2 + (pointY[1] - pointY[0])**2)
#playing the sounds, the notes and pitch are based on the line made
with_fx :ping_pong do
use_synth [:piano,:prophet].choose
play Line_Distance, pitch: Line_Distance, rate: Line_Distance/2, amp: 7
end
sleep [0.25,0.5,0.75,1,1.5,2].choose
end