Merge pull request #506 from andrewcsmith/patch-2
[supercollider.git] / examples / demonstrations / SC_website_example.scd
blob1b2aa4330d78ec121d05f6d53c56f65e8c260cf6
1 /*
2 // the old sc website example
3 This example comes from supercollider.sourceforge.net as of 2003. It uses a loop to generate 40 different variations on a SynthDef, and then a process to play them.
4 */
6 40.do({ arg i;
7   SynthDef(
8     "rperc" ++ i.asString, 
9     { arg i_bus = 0, amp = 0.1, rate = 1;
10           var n = 12;
11           var exc, out;
12           exc = // exitation signal
13                 // .ar or .kr means it's a unit generator
14             WhiteNoise.ar *   
15             Decay.kr(
16               Impulse.kr(0,0,amp*0.1), 
17               rrand(0.2,1.0)
18             );
19           out = Klank.ar(`[   // resonator
20         {exprand(100.0, 10000.0)}.dup(n),
21         { rrand(0.1,1.0) }.dup(n),
22         {exprand(0.05,1.0)}.dup(n)
23       ], exc, rate);
24       DetectSilence.ar(out, 0.0001, 0.1, 2);
25       Out.ar( // output to bus number i_bus
26         i_bus, 
27         Pan2.ar( out, rrand(-1.0,1.0))
28       );
29   }).send(s); // send synthdef to server
30 });
33 // a process to use them.
36 var s;
37 s = Server.local;
38 Task({
39   var dur=0.2, inst = \rperc0, amp = 0.05;
40   inf.do({      // do forever
41         // 30% chance of picking new synth
42     if (0.3.coin, { 
43       inst = "rperc" ++ 40.rand.asString;
44       amp = exprand(0.02,0.2) * 0.5;
45     });
46     // allocate new synth on server
47     s.sendBundle(0.2, [ 
48       \s_new, inst, -1, 0, 0, 
49       \amp, amp, 
50       \rate, exprand(0.5,2)
51     ]);
52     if (dur.coin, { 
53           dur = 0.1 + 1.9.rand 
54     });
55     dur.wait;
56   }); // inf.do
57 }).play(TempoClock.default);