# Genuary2023_PersianRug

### **The prompt for Genuary 2023 Day 21 is**

## Persian Rug

Today's prompt will be coding in **Hydra** alongside **SonicPi** and will consist of a *Rug Symbiote* that could never quite be a Persian Rug. Even after many attempts of transforming, and reworking colour schemes, it just doesn't work out for the symbiote but it never gives up. As the symbiote believes one day, it will become the design it strives to be, no matter the iterations.

<iframe width="560" height="315" src="https://www.youtube.com/embed/4zhVtSgHuys"></iframe>

### Hydra Code

```javascript
shape(4, 0.5, 2)
    .color(()=> (time % 30 + 1)/30, [0.57,1,0.25,0.75].smooth(), [2,1,0,0.5,1].fit())
    .brightness([0.1, 0.2, 0.23, 0.2, 0.1].smooth())
    .luma([0.85, 0.73, 0.682, 0.7, 0.8, 0.81].smooth())
    .repeat(() => (time % 45 + 1) / 5)
    .kaleid([4, 4.1].smooth()).modulatePixelate(shape(4,0.5,2).colorama(()=> (time % 12 + 1)/9),1)
    .diff(shape(4, 0.5, 2)
        .luma([0.82, 0.73, 0.65, 0.79, 0.82].smooth())
        .scale(0.5)
         .repeat(() => (time % 45 + 1) / 5))
    .kaleid([4,4.6, 4].smooth())
    .blend(shape(4, 0.5, 2)
        .color(0.5,0.3,0.1)
        .luma([0.82, 0.73, 0.65, 0.79, 0.82].smooth())
        .scale([0.25, 0.5, 0.75].smooth()))
    .kaleid([4, 4.1, 4.2, 4.6, 4.2, 4.1, 4].smooth())
.modulateRotate(noise(4,0.5,2).scale(()=> (time % 10 + 2)/2),1)
.modulateKaleid(shape(4,0.5,2).scale(()=> (time % 3  +1)/2).repeat(()=> (time % 12 + 1)/3),1)
    .out();
speed = 0.225;
```

### **SonicPi Code**

```ruby
#slowed down by 17%

def sounding(loop1,loop2,sampling,sampling2)
  
  live_loop loop1 do
    with_fx :ping_pong do
      with_fx :whammy, mix: rrand(0.1,0.7) do
        use_bpm 40
        sample sampling, rate: [0.5,1,2,1,0.5].choose,sustain: dice(10) if spread(7,12).tick
        sleep [5,10].choose
      end
    end
  end
  
  
  live_loop loop2 do
    with_fx :ixi_techno do
      with_fx :whammy, mix: rrand(0.1,0.7) do
        use_bpm 40
        sample sampling2 if spread(19,24).tick
        sleep [0.25,0.5,1].choose
      end
    end
  end
  
end

def pianos(bpm,looping,effects,notes1,notes2,samples)
  use_bpm bpm
  live_loop looping do
    with_fx :rbpf do
      with_fx effects, mix: [0.4,0.5,0.6].choose do
        use_synth :piano
        play notes1 ,delay: dice(3), decay: dice(4)
        play notes2,sustain: dice(3), attack: dice(5)
        sample samples, beat_stretch: 0.625, amp: dice(6)
        sleep [0.125,0.25,0.5,0.75,1,2].choose
      end
    end
  end
end

i = 0

live_loop :transformation do
  
  
  #make an array of randomly shuffle numbers that range from 0 to 25
  counter = (0..25).to_a.shuffle()
  
  if counter[i] < 8
    sounding(:hausing,:hausing2,[:loop_weirdo,:loop_tabla].tick,[:drum_bass_hard,:elec_lo_snare].tick)
    sounding(:hausing3,:hausing4,[:loop_breakbeat,:loop_electric],:perc_snap)
  end
  
  if counter[i] > 18
    pianos(20,:sound1,[:flanger,:whammy,:vowel].tick,[:A2,:C2,:C3,:E4,:G2].choose,[:A4,:C5,:E2,:E3,:G2].choose,:drum_bass_hard)
    pianos(10,:sound2,[:ixi_techno,:vowel].choose,[:A4,:C2,:E2,:E4,:G1].choose,[:A2,:C2,:C3,:E2,:G1,:C2].choose,:guit_e_slide)
  end
  
  if counter[i] <= 18 and counter[i] >= 8
    pianos(5,:sound3,[:flanger,:vowel].choose,[:A4,:C5,:E2,:E4,:G2].tick,[:A2,:C2,:C3,:E4,:G1,:C2].tick,:elec_blip)
    sounding(:hausing5,:hausing6,[:loop_safari,:loop_mehackit1],:elec_flip)
  end
  
  
  
  #counter
  if i < 25
    i += 1
  end
  
  if i >= 25
    i = 0
  end
  
  puts i
  puts counter[i]
  
  sleep [0.25,0.5].choose
  
end
```
