supernova: allocators - fix construct method
[supercollider.git] / Help / Streams-Patterns-Events / Patterns / Pspawner.html
blob2e333f554ca2f93d6b13c76c74864a268beefaf4
1 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
2 <html>
3 <head>
4 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
5 <meta http-equiv="Content-Style-Type" content="text/css">
6 <title></title>
7 <meta name="Generator" content="Cocoa HTML Writer">
8 <meta name="CocoaVersion" content="949.43">
9 <style type="text/css">
10 p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica; color: #000000}
11 p.p2 {margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica; color: #000000; min-height: 14.0px}
12 p.p3 {margin: 0.0px 0.0px 0.0px 0.0px; font: 9.0px Monaco; min-height: 12.0px}
13 p.p4 {margin: 0.0px 0.0px 0.0px 0.0px; font: 9.0px Monaco; color: #bf0000}
14 p.p5 {margin: 0.0px 0.0px 0.0px 0.0px; font: 9.0px Monaco; color: #000000; min-height: 12.0px}
15 p.p6 {margin: 0.0px 0.0px 0.0px 0.0px; font: 9.0px Monaco; color: #000000}
16 p.p7 {margin: 0.0px 0.0px 0.0px 0.0px; font: 9.0px Monaco; color: #0000bf}
17 span.s1 {font: 18.0px Helvetica}
18 span.s2 {color: #0000bf}
19 span.s3 {color: #000000}
20 span.s4 {color: #0000bf}
21 span.s5 {color: #007300}
22 span.Apple-tab-span {white-space:pre}
23 </style>
24 </head>
25 <body>
26 <p class="p1"><span class="s1"><b>Pspawner<span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span></b></span><b>dynamic control of multiple event streams from a Routine</b></p>
27 <p class="p2"><br></p>
28 <p class="p1"><b>superclass: </b><a href="Proutine.html"><span class="s2">Proutine</span></a></p>
29 <p class="p1"><b>related class: Spawner</b></p>
30 <p class="p2"><br></p>
31 <p class="p1"><b>Pspawner </b>allows a routine to dynamically start and stop subpatterns. <span class="Apple-converted-space"> </span></p>
32 <p class="p2"><br></p>
33 <p class="p1">see also <a href="Pspawn.html"><span class="s2">Pspawn</span></a></p>
34 <p class="p2"><br></p>
35 <p class="p2"><br></p>
36 <p class="p1"><b>Pspawner(function)</b></p>
37 <p class="p1">The function defines a Routine that receives a <b>Spawner </b>as its sole argument. All control of subpatterns</p>
38 <p class="p1">is through the spawner</p>
39 <p class="p2"><br></p>
40 <p class="p1"><b>Spawner</b> responds to the messages:</p>
41 <p class="p2"><br></p>
42 <p class="p1"><span class="Apple-tab-span"> </span><b>par(pattern, delta = 0)</b></p>
43 <p class="p1"><b><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span></b>Begin an event stream in parallel to the routine. If delta is non-zero, the pattern will begin that many beats</p>
44 <p class="p1"> <span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span>after 'now', provided that now + delta is later than the next event that the Spawner will generate. The</p>
45 <p class="p1"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span>method returns the stream. This may be called from any object</p>
46 <p class="p2"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="Apple-converted-space"> </span></p>
47 <p class="p1"><b><span class="Apple-tab-span"> </span>seq(pattern)</b></p>
48 <p class="p1"><b><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span></b>run the entire pattern and then return control to the routine</p>
49 <p class="p2"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span></p>
50 <p class="p1"><b><span class="Apple-tab-span"> </span>wait(dur)</b></p>
51 <p class="p1"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span>wait <b>dur </b>seconds and then return control to the routine</p>
52 <p class="p2"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span></p>
53 <p class="p1"><span class="Apple-tab-span"> </span><b>suspend (stream)<span class="Apple-converted-space"> </span></b></p>
54 <p class="p1"><b><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span></b>Find the stream in the Spawner and stop it,<span class="Apple-converted-space">  </span>returns nil if the stream is not found, the stream otherwise</p>
55 <p class="p2"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span></p>
56 <p class="p1"><span class="Apple-tab-span"> </span><b>suspendAll</b></p>
57 <p class="p1"><b><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span></b>Stop all substreams of the Spawner</p>
58 <p class="p3"><br></p>
59 <p class="p3"><br></p>
60 <p class="p3"><br></p>
61 <p class="p3"><br></p>
62 <p class="p4">// example 1: a simple Pspawner</p>
63 <p class="p5"><br></p>
64 <p class="p6">(</p>
65 <p class="p7"><span class="s3"><span class="Apple-tab-span"> </span></span>Pspawner<span class="s3">({ </span>| sp |</p>
66 <p class="p5"><span class="Apple-tab-span"> </span></p>
67 <p class="p4"><span class="s3"><span class="Apple-tab-span"> </span></span>// parallel in-c'ish pulses will run throughout the example</p>
68 <p class="p6"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span>sp.par(<span class="s4">Pbind</span>(*[ degree: [0,7], octave: 7, dur: 0.2, db: <span class="s4">Pseq</span>([-20, -24, -22, -24], <span class="s4">inf</span>)]) );</p>
69 <p class="p5"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span></p>
70 <p class="p4"><span class="s3"><span class="Apple-tab-span"> </span></span>// scales in sequence with pauses</p>
71 <p class="p6"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span>sp.seq(</p>
72 <p class="p6"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="s4">Pbind</span>(*[ degree: <span class="s4">Pseq</span>((0..7).mirror), dur: 0.2])</p>
73 <p class="p6"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span>);</p>
74 <p class="p6"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span>sp.wait(0.4);</p>
75 <p class="p6"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span>sp.seq(</p>
76 <p class="p6"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="s4">Ppar</span>([</p>
77 <p class="p6"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="s4">Pbind</span>(*[ degree: <span class="s4">Pseq</span>((0..7).mirror), dur: 0.2, octave: 4]),</p>
78 <p class="p6"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="s4">Pbind</span>(*[ degree: <span class="s4">Pseq</span>((0..7).reverse.mirror), dur: 0.2])</p>
79 <p class="p6"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span>])</p>
80 <p class="p5"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span></p>
81 <p class="p6"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span>);</p>
82 <p class="p6"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span>sp.wait(3);</p>
83 <p class="p6"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span>sp.seq(</p>
84 <p class="p6"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="s4">Pbind</span>(*[ degree: <span class="s4">Pseq</span>((0..7).mirror), dur: 0.2, mtranspose: (0,2..14)])</p>
85 <p class="p6"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span>);</p>
86 <p class="p5"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span></p>
87 <p class="p4"><span class="s3"><span class="Apple-tab-span"> </span></span>// scales overlaped at 0.4 second intervals</p>
88 <p class="p5"><br></p>
89 <p class="p6"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span>10.do {</p>
90 <p class="p6"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span>sp.par(</p>
91 <p class="p6"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="s4">Pbind</span>(*[ degree: <span class="s4">Pseq</span>((0..7).mirror), dur: 0.2])</p>
92 <p class="p6"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span>);</p>
93 <p class="p5"><span class="Apple-tab-span"> </span></p>
94 <p class="p6"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span>sp.wait(0.4)</p>
95 <p class="p6"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span>};</p>
96 <p class="p6"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span>sp.wait(1.6);</p>
97 <p class="p6"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span>sp.suspendAll;<span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span></p>
98 <p class="p5"><span class="Apple-tab-span"> </span></p>
99 <p class="p6"><span class="Apple-tab-span"> </span>}).play</p>
100 <p class="p6">)</p>
101 <p class="p5"><br></p>
102 <p class="p5"><br></p>
103 <p class="p6">(</p>
104 <p class="p4"><span class="s3"><span class="Apple-tab-span"> </span></span>// example 2: create 5 streams at 4 second intervals</p>
105 <p class="p4"><span class="s3"><span class="Apple-tab-span"> </span></span>// then delete them in the order they were created</p>
106 <p class="p5"><span class="Apple-tab-span"> </span></p>
107 <p class="p7"><span class="s3"><span class="Apple-tab-span"> </span></span>Pspawner<span class="s3">({ </span>| sp |</p>
108 <p class="p6"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="s4">var</span> streams, stream;</p>
109 <p class="p4"><span class="s3"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span></span>// start patterns, collect the resultant event streams</p>
110 <p class="p6"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span>streams = [2,<span class="Apple-converted-space">  </span>3, 4,<span class="Apple-converted-space">  </span>6, 7, 8].collect { <span class="s4">| i |</span></p>
111 <p class="p6"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span>stream = sp.par(<span class="s4">Pbind</span>(*[</p>
112 <p class="p6"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span>harmonic: i,</p>
113 <p class="p6"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span>ctranspose: <span class="Apple-tab-span"> </span>[0, 1, 3]/40,</p>
114 <p class="p6"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span>octave:<span class="Apple-tab-span"> </span><span class="s4">Pbrown</span>(2,8,2), dur: 1/i, db: -30</p>
115 <p class="p6"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span>]) );</p>
116 <p class="p6"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span>sp.wait(4);</p>
117 <p class="p6"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span>stream;</p>
118 <p class="p6"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span>};</p>
119 <p class="p5"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span></p>
120 <p class="p4"><span class="s3"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span></span>// now stop those streams one by one</p>
121 <p class="p6"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span>streams.do { <span class="s4">| s |</span> sp.suspend(s); sp.wait(4) };</p>
122 <p class="p6"><span class="Apple-tab-span"> </span>}).play</p>
123 <p class="p5"><br></p>
124 <p class="p6">)</p>
125 <p class="p5"><br></p>
126 <p class="p6">(</p>
127 <p class="p4">// example 3: define a Pspawner and use Pattern manipulations</p>
128 <p class="p7"><span class="s3">p = <span class="Apple-tab-span"> </span></span>Pspawner<span class="s3">({ </span>| sp |<span class="s3"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span></span></p>
129 <p class="p5"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span></p>
130 <p class="p6"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span>sp.par(<span class="s4">Pbind</span>(*[octave: 5, degree: <span class="s4">Pbrown</span>( -7, 7, 3), dur: 0.2]) );</p>
131 <p class="p5"><br></p>
132 <p class="p6"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span>sp.wait(2);</p>
133 <p class="p6"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span>sp.par(<span class="s4">Pbind</span>(*[octave: 5, degree: <span class="s4">Pbrown</span>( -7, 7, 3), dur: 0.1]) );</p>
134 <p class="p6"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span>sp.wait(1);</p>
135 <p class="p6"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span>sp.par(<span class="s4">Pbind</span>(*[octave: 6, degree: <span class="s4">Pbrown</span>( -7, 7, 3), dur: 0.05]) );</p>
136 <p class="p6"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span>sp.wait(0.5);</p>
137 <p class="p5"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span></p>
138 <p class="p6"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span>sp.wait(4);</p>
139 <p class="p6"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span>sp.par(<span class="s4">Pbind</span>(*[octave: 5, degree: <span class="s4">Pbrown</span>( -7, 7, 3), dur: 0.2]) );</p>
140 <p class="p5"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span></p>
141 <p class="p6"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span>sp.wait(4);</p>
142 <p class="p6"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span>sp.suspendAll;</p>
143 <p class="p5"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span></p>
144 <p class="p6"><span class="Apple-tab-span"> </span>});</p>
145 <p class="p6">)</p>
146 <p class="p5"><br></p>
147 <p class="p4">// play the basic patten<span class="Apple-converted-space"> </span></p>
148 <p class="p6">( p.play )</p>
149 <p class="p5"><br></p>
150 <p class="p6">(</p>
151 <p class="p4">// manipulate it with Pchain</p>
152 <p class="p7">Pchain<span class="s3">(</span></p>
153 <p class="p6"><span class="Apple-tab-span"> </span><span class="s4">Pbind</span>(*[ctranspose: 0 + <span class="s4">Pwhite</span>(-0.1, 0.1)]),</p>
154 <p class="p6"><span class="Apple-tab-span"> </span><span class="s4">Pbind</span>(*[mtranspose:<span class="Apple-tab-span"> </span><span class="s4">Pkey</span>(<span class="s5">\mtranspose</span>) +<span class="Apple-converted-space">  </span><span class="s4">Pstutter</span>(8, <span class="s4">Prand</span>([0,[-3,0,2],[0,2,4,6,8,10]], <span class="s4">inf</span>))<span class="Apple-converted-space">  </span>] ),</p>
155 <p class="p6"><span class="Apple-tab-span"> </span><span class="s4">Pn</span>(<span class="s4">Pseq</span>([p, (type:<span class="s5">\rest</span>, dur: 0.4)]) ),<span class="Apple-converted-space"> </span></p>
156 <p class="p7"><span class="s3"><span class="Apple-tab-span"> </span></span>Pbind<span class="s3">(*[</span></p>
157 <p class="p6"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span>db: <span class="s4">Pstep</span>(<span class="s4">Pseq</span>([-10, -13, -13, -11, -13, -13], <span class="s4">inf</span>), 0.1) - 10,</p>
158 <p class="p6"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span>mtranspose: <span class="s4">Pstep</span>(<span class="s4">Pwhite</span>(-7, 7), <span class="s4">Prand</span>([5,4,2],<span class="s4">inf</span>) )</p>
159 <p class="p6"><span class="Apple-converted-space"> <span class="Apple-tab-span"> </span></span>])<span class="Apple-converted-space"> </span></p>
160 <p class="p6"><span class="Apple-converted-space"> </span>).play(protoEvent: <span class="s4">Event</span>.default)</p>
161 <p class="p5"><span class="Apple-tab-span"> </span></p>
162 <p class="p6">)</p>
163 <p class="p5"><br></p>
164 <p class="p4">// example 4: altering the contents of the Pspawner from separate code</p>
165 <p class="p5"><span class="Apple-tab-span"> </span></p>
166 <p class="p6">(</p>
167 <p class="p7"><span class="s3"><span class="Apple-tab-span"> </span>a = </span>Pspawner<span class="s3">({ </span>|sp |<span class="s3"><span class="Apple-converted-space"> </span></span></p>
168 <p class="p4"><span class="s3"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span>c = sp; <span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span></span>// store the Spawner in a global variable</p>
169 <p class="p6"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span>100.do{ sp.wait(1) }<span class="Apple-converted-space"> </span></p>
170 <p class="p6"><span class="Apple-tab-span"> </span>});</p>
171 <p class="p6"><span class="Apple-tab-span"> </span>a.play;<span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span></p>
172 <p class="p6">)</p>
173 <p class="p5"><br></p>
174 <p class="p4"><span class="s3">(<span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span></span>// c will not be valid until the Pspawner has run</p>
175 <p class="p4"><span class="s3"><span class="Apple-tab-span"> </span>b = c.par(<span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span></span>// now start a pattern in spawner</p>
176 <p class="p6"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="s4">Pbind</span>(*[degree: <span class="s4">Pseq</span>((0..6) ++ (7..1), <span class="s4">inf</span>), dur: 0.2])</p>
177 <p class="p6"><span class="Apple-tab-span"> </span>);</p>
178 <p class="p6">)</p>
179 <p class="p4"><span class="s3"><span class="Apple-tab-span"> </span>c.suspend(b)<span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span></span>// we can suspend and resume the stream</p>
180 <p class="p6"><span class="Apple-tab-span"> </span>c.par(b)</p>
181 <p class="p6"><span class="Apple-tab-span"> </span>c.suspend(b)</p>
182 <p class="p4"><span class="s3"><span class="Apple-tab-span"> </span>b = c.par(<span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span></span>// or just start up a new pattern</p>
183 <p class="p6"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="s4">Pbind</span>(*[degree: <span class="s4">Pseq</span>((0..6) ++ (7..1), <span class="s4">inf</span>), dur: 0.2])</p>
184 <p class="p6"><span class="Apple-tab-span"> </span>);</p>
185 <p class="p5"><br></p>
186 <p class="p4">// example 5: Spawner can be used directly in the manner of Pspawner.</p>
187 <p class="p4">// This allows external code to access to the spawner whether or not it has run<span class="Apple-tab-span"> </span></p>
188 <p class="p6">(</p>
189 <p class="p7"><span class="s3"><span class="Apple-tab-span"> </span>c = </span>Spawner<span class="s3">({ </span>|sp |<span class="s3"><span class="Apple-converted-space"> </span></span></p>
190 <p class="p6"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span>100.do{ sp.wait(1) }<span class="Apple-converted-space"> </span></p>
191 <p class="p6"><span class="Apple-tab-span"> </span>});</p>
192 <p class="p5"><span class="Apple-tab-span"> </span></p>
193 <p class="p4"><span class="s3"><span class="Apple-tab-span"> </span>b = c.par(<span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span></span>// now start a pattern in spawner</p>
194 <p class="p6"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="s4">Pbind</span>(*[degree: <span class="s4">Pseq</span>((0..6) ++ (7..1), <span class="s4">inf</span>), dur: 0.2])</p>
195 <p class="p6"><span class="Apple-tab-span"> </span>);</p>
196 <p class="p4"><span class="s3"><span class="Apple-tab-span"> </span>c.play;<span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span></span>// in this case, c is always valid</p>
197 <p class="p6">)</p>
198 <p class="p4"><span class="s3"><span class="Apple-tab-span"> </span>c.suspend(b)<span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span></span>// we can suspend and resume the stream</p>
199 <p class="p6"><span class="Apple-tab-span"> </span>c.par(b)</p>
200 <p class="p6"><span class="Apple-tab-span"> </span>c.suspend(b)</p>
201 <p class="p4"><span class="s3"><span class="Apple-tab-span"> </span>b = c.par(<span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span></span>// or just start up a new pattern</p>
202 <p class="p6"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="s4">Pbind</span>(*[degree: <span class="s4">Pseq</span>((0..6) ++ (7..1), <span class="s4">inf</span>), dur: 0.2])</p>
203 <p class="p6"><span class="Apple-tab-span"> </span>);</p>
204 <p class="p5"><span class="Apple-tab-span"> </span></p>
205 <p class="p5"><span class="Apple-tab-span"> </span></p>
206 <p class="p7"><span class="s3"><span class="Apple-tab-span"> </span></span>Pspawner<span class="s3">({ </span>| sp |</p>
207 <p class="p6"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span>(1..5).do { <span class="s4">| i |</span></p>
208 <p class="p6"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span>sp.par(<span class="s4">Pbind</span>(*[</p>
209 <p class="p6"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span>octave: i + 2,</p>
210 <p class="p6"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span>degree:<span class="Apple-tab-span"> </span><span class="s4">Pwhite</span>(0,7), dur: 1/i, db: -30</p>
211 <p class="p6"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span>]) );</p>
212 <p class="p6"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span>sp.wait(4);</p>
213 <p class="p6"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span>};<span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span></p>
214 <p class="p6"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span>sp.suspendAll;</p>
215 <p class="p6"><span class="Apple-tab-span"> </span>}).play</p>
216 <p class="p5"><br></p>
217 </body>
218 </html>