# Genuary2024_16x16

# 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

```ocaml
The flow
The tunes
The rhythm
As it reaches the rooms
Hidden
In this 16x16 format
In a digital habitat
Waiting to bloom
```

## Video

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

## Code

### Tixy.Land

```javascript
(i | t) % 256 & ( Math.cbrt(i) * t) % 30
```

### SonicPi - Slowed Down

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