sclang: ServerShmInterface - try to avoid multiple destructor calls
[supercollider.git] / HelpSource / Classes / Ppatlace.schelp
blob619243290cc6bf69abdf10122966105f9f4ae620
1 class:: Ppatlace
2 summary:: interlace streams
3 related:: Classes/Place
4 categories:: Streams-Patterns-Events>Patterns>List
6 description::
8 Similar to link::Classes/Place::, but the list is an array of streams or patterns. The results of each stream will be output in turn.
10 Examples::
12 code::
13 p = Ppatlace([Pwhite(1, 5, 5), Pgeom(10, 1.01, 10)], inf);
14 x = p.asStream;
15 x.all;
18 5               // from Pwhite
19 10              // from Pgeom
20 4               // from Pwhite
21 10.1            // etc....
23 10.201
25 10.30301
27 10.4060401
28 10.510100501
29 10.61520150601
30 10.72135352107
31 10.828567056281
32 10.936852726844
33 nil
36 Note that the Ppatlace has an infinite number of repeats, but the resulting stream is finite because the member streams are all finite. When the first stream (Pwhite) comes to an end, it is skipped and you see only the second stream until it stops.
38 If even one member stream is infinite and Ppatlace has infinite repeats, the Ppatlace stream will also be infinite.
41 code::
42 //Ppatlace as a sequence of pitches:
45 SynthDef(\help_sinegrain,
46         { arg out=0, freq=440, sustain=0.05;
47                 var env;
48                 env = EnvGen.kr(Env.perc(0.01, sustain, 0.2), doneAction:2);
49                 Out.ar(out, SinOsc.ar(freq, 0, env))
50         }).add;
54 // interlace two streams
56 var c = Ppatlace([
57                 Pseq([0, 0, 0, 0, 8, 0, 8], inf),
58                 Pseries(1, 1, 32)
59         ], inf) + 67;
60 x = c.asStream;
62 Routine({
63         loop({
64                 Synth(\help_sinegrain, [\freq, x.next.midicps, \dur, 0.2]);
65                 0.17.wait;
66         })
67 }).play;
73 // a more complicated example:
75 c = Ppatlace([
76         Pxrand([
77                 Pseq(#[0, -2, -3, -5, -7], 1), Pwhite(-12, 4, 3), Pshuf(#[0, -2, -3, -5, -7], 1)
78         ], inf),
79         Pxrand([
80                 Pseq(#[0, 2, 4, 5, 7], 1), Pwhite(-4, 12, 3), Pshuf(#[0, 2, 4, 5, 7], 1)
81         ], inf)
82 ], inf) + 67;
83 x = c.asStream;
85 Routine({
86         loop({
87                 Synth(\help_sinegrain, [\freq, x.next.midicps, \dur, 0.2]);
88                 0.17.wait;
89         })
90 }).play;