-
Notifications
You must be signed in to change notification settings - Fork 9
/
music-from-code.sc
46 lines (35 loc) · 1.16 KB
/
music-from-code.sc
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
44
// Load files from hackathon folder and create buffers
(
// retrieve all files from a folder where file extension matches a regular expression
~filesInFolder = { |folder, match|
var p;
PathName(folder).filesDo { |x|
match.matchRegexp(x.extension)
.if { p = p.add(x) }
};
p
};
// convert a binary file in a sound buffer
~bufferFromFile = { |fileName|
var sign;
f = File(fileName.fullPath,"rb");
t = [];
a = f.getFloatLE;
sign = -1.0;
while {a.notNil} { t = t.add((a * sign)) ; a = f.getFloatLE();sign = sign * -1 };
b = Buffer.loadCollection(s, t, 1, {f.close});
b.normalize;
b
};
// convert all JS files from hackathon folder to sound buffers
~arrayOfBuffers = ~filesInFolder.("/Users/geoffroy/dev/hackathon", "js").collect { |f| ~bufferFromFile.(f) };
)
// Hackathon synth
(
SynthDef(\hackSynth, { |out = 0, buf = nil, pan = 0, amp = 0.1|
Out.ar(out, Pan2.ar(PlayBuf.ar(1, buf, rate: 0.1, trigger: 1, doneAction: 2), pos: pan, level: amp));
}).add;
)
Synth(\hackSynth, [out: 0, buf: ~arrayOfBuffers[11], pan: 0, amp: 1.0]);
~arrayOfBuffers.do {|b| b.plot;}
Signal.sineFill(512, [1]).plot;