SynthesizedNoisyBits
For this week's Creative Code challenge by @sableRalph : Noise, Metamere and I decided to team up and use 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 to control a program called SuperCollider for the music synthesis. I used an AI for speech synthesis to read an old stream-of-consciousness poem 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, while I used my old standby of Audacity. Finally, illest did video synthesis using Hydra to create the visuals. You can read more about the process here,
Poetry
For this week, poetry was done by Metamere
Foxdot-Python Code
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
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
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
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)