-
Notifications
You must be signed in to change notification settings - Fork 0
/
2015-03-05-spiderfall.py
43 lines (31 loc) · 1.08 KB
/
2015-03-05-spiderfall.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
from pippi import dsp
g = dsp.read('sounds/seneca3bars.wav').data
numsections = 12
numlayers = 30
numgrains = 22
sections = []
for s in range(numsections):
layers = []
for layer in range(numlayers):
minlen = 40
lenrange = dsp.rand(300, 500)
lengths = dsp.wavetable('hann', numgrains * 2)[:numgrains]
lengths = [ dsp.mstf(l * lenrange + minlen) for l in lengths ]
pans = dsp.breakpoint([ dsp.rand() for p in range(numgrains / 3)], numgrains)
layers += [ (lengths, pans) ]
sections += [ layers ]
out = ''
for section in sections:
layers = []
for layer in section:
startpoint = dsp.randint(0, dsp.flen(g) - max(layer[0]))
grains = ''
for l, p in zip(layer[0], layer[1]):
grain = dsp.cut(g, startpoint, l)
grain = dsp.env(grain, 'phasor')
grain = dsp.taper(grain, dsp.mstf(10))
grain = dsp.pan(grain, p)
grains += grain
layers += [ dsp.env(grains, 'phasor') ]
out += dsp.mix(layers)
dsp.write(out, 'spiderfall')