# WCCChallenge: Noise

## **SynthesizedNoisyBits**

For this week's Creative Code challenge by @[@sableRalph](@sableRalph) : ***Noise,* Metamere and I** decided to team up and use [Foxdot](https://github.com/Qirky/FoxDot) for the challenge.

### From Metamere:

This week, to do something a little different with the challenge topic of noise, I asked @illestpreacha to collab with me and introduce me to some of the generative music techniques he has been sharing so that we could make some noisy music together. Rather than going full-on noise music style, We kept it a bit milder, but maybe a lot odder.

We passed some python script back and forth to make some algorithmic music, did some jamming and tweaking, and came up with the attached script. It uses the [FoxDot library](https://jensmeisner.net/foxdot-branch-pitchglitch/) to control a program called [SuperCollider](https://supercollider.github.io/) for the music synthesis. I used an [AI for speech synthesis](https://beta.elevenlabs.io/speech-synthesis) to read an old stream-of-consciousness [poem](https://docs.google.com/document/d/1einKdJHiS8zGIWrtr7jwX6mbfRd7J6p0fqXlYUl5G-0/edit?usp=sharing) of mine, and we merged that with the other audio.

Lots of effects were applied in sequence as stuff was passed back and forth, with much more on the second half, with Illest using [Sonic Pi](https://sonic-pi.net/), while I used my old standby of [Audacity](https://www.audacityteam.org/). Finally, illest did video synthesis using [Hydra](https://hydra.ojack.xyz/?sketch_id=ritchse_2) to create the visuals. You can [read more about the process here](https://blog.illestpreacha.com/wccchallenge-noise-),

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

### **Poetry**

For this week, poetry was done by Metamere

### **Foxdot-Python Code**

```python
from FoxDot import *

import random as rd
import time

# data science libraries

import numpy as np
import pandas as pd

# setting a dataframe with four columns and 20 rows and rconfirming the index
df_numbers = pd.DataFrame(np.random.randint(0, 15, size=(20, 4)), columns=list('ABCD'))
df_numbers = df_numbers.reset_index()

# turning the dataframes into arrays by columns

A_list = np.asarray(df_numbers['A'])
B_list = np.asarray(df_numbers['B'])
C_list = np.asarray(df_numbers['C'])
D_list = np.asarray(df_numbers['D'])

# minimalizing the function to do random ranges if needed
rd.rr = rd.randrange

Scale.default.set(Scale.melodicMinor)
Clock.bpm = 120

def f_range(x, t):  # t is for the timer that will set the sounds
    t2 = 0
    y = x
    while x >= 0:
        # countdown timer code
        mins, secs = divmod(t2, 60)
        timer = '{:02d}:{:02d}'.format(mins, secs)
        time.sleep(1)

        if t2 > 10:
            t -= 1
            p1 >> play("x-o{-[o--xx---x]o[-o]}", amp=0.6, pan=-0.25)
            p2 >> play("-v-c", amp=[0.45, 1.25], pan=0.25, hpf=100)
            if t2 > 20 and t % 3 == 0:
                p3 >> play("x-o-", dur=max(0.05, sinvar([0.1 * A_list[x - 1], B_list[x - 1] * 2], 10)), amp=0.65, pan=-0.25)
                p4 >> play("s~s~", dur=max(0.05, sinvar([0.2 * C_list[x - 1], D_list[x - 1] * 2], 5)), amp=1.5, pan=0.25)
                s1 >> pluck((abs(20 - x * 2), abs(x - 4), 7),
                            dur=min(max(sinvar([0.4 * x, x * 2], 20), 0.05), 4), amp=0.7, pan=-0.25)
                s2 >> pads(P[1:x:3, [1, 3, (5, 7)]] - int(x / 2),
                           dur=[.25, .75, 1.25 / ((x + 1) / 10), rest(.25)], sus=max(4, A_list[x - 1] / 3),
                           vib=x, amp=0.05, pan=0.25, drive=0.25, reverb=1, echo=.2, echotime=3)
        s3 >> donk((3, abs(C_list[x - 1] - 4), 7), dur=max(0.05, sinvar([0.4 * B_list[x - 1], x * 2], 40)),
                   amp=0.6, lpf=400, pan=-0.25)
        n1 >> noise(P[1:x:3, [1, 3, 5, 7]], dur=[1, 2, 1], sus=[0.5, 1, 2], amp=min(0.2 + t2 / 10 * 0.5, .65),
                    lpf=1000 * sinvar(0.4 * B_list[x - 1]), pan=0.25, glide=20 - x)
        x -= 1
        t2 += 2
        print(timer + ' ' + str(x))
        if x <= 0:
            x = y
        # p_all.stop()
        time.sleep(1)  # pauses the loop for a 1 second


# using the dataframe loop to control the loop
f_range(len(df_numbers.index), 90)
```

### SonicPi Code - Sound Manipulation

```ruby

live_loop :phase1 do
  with_fx :ping_pong, mix: 0.7 do
    with_fx :ixi_techno do
      sample "C:/Creatuve Code Challenges/Noise/5MInVersion..wav" , rate: [-0.5,0.5,-0.5,1,-1].choose
      sleep [8,16,24].tick
    end
  end
end




live_loop :phase2 do
  with_fx :ping_pong, mix: 0.7 do
    with_fx :ixi_techno do
      sample "C:/Creatuve Code Challenges/Noise/5MInVersion..wav", beat_stretch: [1,2,0.5,1].choose
      sleep [24,48].tick
    end
  end
end

live_loop :phase3 do
  with_fx :vowel, mix: 0.32 do
    with_fx :gverb do
      sample "C:/Creatuve Code Challenges/Noise/5MInVersion..wav", pitch_stretch: 8
      sleep [72,144].tick
    end
  end
end


live_loop :normal do
  with_fx :echo do
    sample "C:/Creatuve Code Challenges/Noise/5MInVersion..wav"
  end
  sleep sample_duration "C:/Creatuve Code Challenges/Noise/5MInVersion..wav"
end
```

### **SonicPi Code - Vocal**

```ruby

live_loop :phase1 do
  with_fx :flanger, mix: [0.1,0.3,0.4].choose do
    with_fx :ping_pong, mix: 0.3 do
      sample "C:/Creatuve Code Challenges/Noise/synthesized_audio_-_WaveWordflow.wav" , rate: [0.85,1,0.75].choose
      sleep sample_duration "C:/Creatuve Code Challenges/Noise/synthesized_audio_-_WaveWordflow.wav"
    end
  end
end



live_loop :phase2 do
  with_fx :echo, mix: [0.1,0.3,0.4].choose do
    with_fx :ping_pong, mix: 0.1 do
      sample "C:/Creatuve Code Challenges/Noise/synthesized_audio_-_WaveWordflow.wav" , rate: [1,0.85,1,0.75].choose
      sleep (sample_duration "C:/Creatuve Code Challenges/Noise/synthesized_audio_-_WaveWordflow.wav") / 2
    end
  end
end
```

### **Hydra Code**

```javascript
osc(5,0, () => (a.fft[0]*2))
  .blend(noise(1,3.5,()=>(a.fft[1]*2)))
.blend(noise(()=>(a.fft[0]*2)/5,3,5)).out(o0)

osc(5,0, () => (a.fft[0]*2))
  .add(voronoi(1,3.5,()=>(a.fft[1]*2)))
.blend(noise(()=>(a.fft[0]*2)/5,3,5)).out(o1)

osc(5,0, () => (a.fft[0]*2))
  .add(osc(1,3.5,()=>(a.fft[1]*2)))
.blend(noise(()=>(a.fft[0]*2)/5,3,5)).out(o2)

osc(5,0, () => (a.fft[0]*2))
  .blend(noise(1,3.5,()=>(a.fft[1]*2)))
.diff(noise(()=>(a.fft[0]*2)/5,3,5)).out(o3)
```
