Skip to content

Commit

Permalink
GUI examples made cross-platform where possible.
Browse files Browse the repository at this point in the history
  • Loading branch information
sciss committed Feb 4, 2008
1 parent e0bbd47 commit 22d8ed9
Show file tree
Hide file tree
Showing 23 changed files with 1,708 additions and 1,641 deletions.
68 changes: 36 additions & 32 deletions build/Help/3vs2/Spawning.html
Expand Up @@ -10,20 +10,24 @@
p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 18.0px Helvetica}
p.p2 {margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica; min-height: 14.0px}
p.p3 {margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica}
p.p4 {margin: 0.0px 0.0px 0.0px 0.0px; font: 9.0px Monaco; color: #902a19}
p.p4 {margin: 0.0px 0.0px 0.0px 0.0px; font: 9.0px Monaco; color: #84301e}
p.p5 {margin: 0.0px 0.0px 0.0px 0.0px; font: 9.0px Monaco}
p.p6 {margin: 0.0px 0.0px 0.0px 0.0px; font: 9.0px Monaco; color: #606060}
p.p7 {margin: 0.0px 0.0px 0.0px 0.0px; font: 9.0px Monaco; min-height: 12.0px}
p.p8 {margin: 0.0px 0.0px 0.0px 0.0px; font: 9.0px Monaco; color: #091fb1}
p.p9 {margin: 0.0px 0.0px 0.0px 10.0px; font: 9.0px Monaco}
p.p10 {margin: 0.0px 0.0px 0.0px 0.0px; font: 9.0px Monaco; color: #902a19; min-height: 12.0px}
p.p8 {margin: 0.0px 0.0px 0.0px 0.0px; font: 9.0px Monaco; color: #0827ac}
p.p9 {margin: 0.0px 0.0px 0.0px 0.0px; font: 9.0px Monaco; color: #000000}
p.p10 {margin: 0.0px 0.0px 0.0px 0.0px; font: 9.0px Monaco; color: #bf0000}
p.p11 {margin: 0.0px 0.0px 0.0px 10.0px; font: 9.0px Monaco; color: #000000}
p.p12 {margin: 0.0px 0.0px 0.0px 0.0px; font: 9.0px Monaco; color: #0000bf}
p.p13 {margin: 0.0px 0.0px 0.0px 0.0px; font: 9.0px Monaco; color: #84301e; min-height: 12.0px}
span.s1 {font: 12.0px Helvetica; color: #000000}
span.s2 {color: #000000}
span.s3 {color: #091fb1}
span.s3 {color: #0827ac}
span.s4 {color: #606060}
span.s5 {color: #902a19}
span.s6 {font: 12.0px Helvetica}
span.s7 {color: #456c20}
span.s5 {color: #84301e}
span.s6 {color: #0000bf}
span.s7 {font: 12.0px Helvetica}
span.s8 {color: #4d6a25}
span.Apple-tab-span {white-space:pre}
</style>
</head>
Expand Down Expand Up @@ -68,22 +72,22 @@
<p class="p3">In SC3 time-based sequences of events can be implemented using Routines. A <b>Routine</b> which yields a number can be scheduled using a clock:</p>
<p class="p2"><br></p>
<p class="p5"><span class="Apple-tab-span"> </span>(</p>
<p class="p5"><span class="Apple-tab-span"> </span><span class="s3">var</span> w, r;</p>
<p class="p5"><span class="Apple-tab-span"> </span>w = <span class="s3">SCWindow</span>(<span class="s4">"trem"</span>, <span class="s3">Rect</span>(512, 256, 360, 130));</p>
<p class="p5"><span class="Apple-tab-span"> </span>w.front;</p>
<p class="p5"><span class="Apple-tab-span"> </span>r = <span class="s3">Routine</span>({ <span class="s3">arg</span> time;</p>
<p class="p5"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span>60.do({ <span class="s3">arg</span> i;</p>
<p class="p4"><span class="s2"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span>0.05.yield; </span>// wait for 0.05 seconds</p>
<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>
<p class="p9"><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>w.bounds = w.bounds.moveBy(10.rand2, 10.rand2);</p>
<p class="p9"><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>w.alpha = cos(i*0.1pi)*0.5+0.5;</p>
<p class="p9"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span>}.defer;</p>
<p class="p5"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span>});</p>
<p class="p4"><span class="s2"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span>1.yield; </span>// wait for 1 second before closing w</p>
<p class="p5"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span>w.close;</p>
<p class="p5"><span class="Apple-tab-span"> </span>});</p>
<p class="p8"><span class="s2"><span class="Apple-tab-span"> </span></span>SystemClock<span class="s2">.play(r);</span></p>
<p class="p5"><span class="Apple-tab-span"> </span>)</p>
<p class="p9"><span class="Apple-tab-span"> </span><span class="s6">var</span> w, r;</p>
<p class="p9"><span class="Apple-tab-span"> </span>w = <span class="s6">GUI</span>.window.new(<span class="s4">"trem"</span>, <span class="s6">Rect</span>(512, 256, 360, 130));</p>
<p class="p9"><span class="Apple-tab-span"> </span>w.front;</p>
<p class="p9"><span class="Apple-tab-span"> </span>r = <span class="s6">Routine</span>({ <span class="s6">arg</span> time;</p>
<p class="p9"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span>60.do({ <span class="s6">arg</span> i;</p>
<p class="p10"><span class="s2"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span>0.05.yield; </span>// wait for 0.05 seconds</p>
<p class="p9"><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>
<p class="p11"><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>w.bounds = w.bounds.moveBy(10.rand2, 10.rand2);</p>
<p class="p11"><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>w.alpha = cos(i*0.1pi)*0.5+0.5;</p>
<p class="p11"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span>}.defer;</p>
<p class="p9"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span>});</p>
<p class="p10"><span class="s2"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span>1.yield; </span>// wait for 1 second before closing w</p>
<p class="p9"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span>w.close;</p>
<p class="p9"><span class="Apple-tab-span"> </span>});</p>
<p class="p12"><span class="s2"><span class="Apple-tab-span"> </span></span>SystemClock<span class="s2">.play(r);</span></p>
<p class="p5"><span class="s2"><span class="Apple-tab-span"> </span></span>)</p>
<p class="p7"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span></p>
<p class="p3">Note that this implementation avoids one of the stranger aspects of the SC2 approach: The need to start a Synth to schedule time-based behavior, even if no audio is involved.</p>
<p class="p2"><br></p>
Expand Down Expand Up @@ -144,7 +148,7 @@
<p class="p7"><span class="Apple-tab-span"> </span></p>
<p class="p3">Note the alternative syntax for playing a Routine. aClock.play(aRoutine) and aRoutine.play(aClock) are functionally equivalent. The two make different things more or less convienent, like sending messages to the <b>Routine</b> or <b>Clock</b>. (See the <b>play</b> helpfile for a more detailed discussion.) For instance:</p>
<p class="p2"><br></p>
<p class="p5"><span class="s6"><span class="Apple-tab-span"> </span></span>(</p>
<p class="p5"><span class="s7"><span class="Apple-tab-span"> </span></span>(</p>
<p class="p4"><span class="s2"><span class="Apple-tab-span"> </span></span>// this, that and the other</p>
<p class="p5"><span class="Apple-tab-span"> </span>r = <span class="s3">Routine</span>.new({<span class="s3">var</span> i = 0; { (<span class="s4">"this: "</span> ++ i).postln; i = i + 1; 1.yield; }.loop });</p>
<p class="p5"><span class="Apple-tab-span"> </span>q = <span class="s3">Routine</span>.new({<span class="s3">var</span> i = 0; { (<span class="s4">"that: "</span> ++ i).postln; i = i + 1; 1.yield; }.loop });<span class="Apple-converted-space"> </span></p>
Expand All @@ -157,24 +161,24 @@
<p class="p7"><span class="Apple-tab-span"> </span></p>
<p class="p4"><span class="s2"><span class="Apple-tab-span"> </span>r.stop; <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>// stop this but not that or the other</p>
<p class="p4"><span class="s2"><span class="Apple-tab-span"> </span>q.reset;<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>// reset that while playing</p>
<p class="p10"><span class="Apple-tab-span"> </span></p>
<p class="p13"><span class="Apple-tab-span"> </span></p>
<p class="p4"><span class="s2"><span class="Apple-tab-span"> </span>c = </span><span class="s3">TempoClock</span><span class="s2">.new;<span class="Apple-tab-span"> </span></span>// make a TempoClock</p>
<p class="p4"><span class="s2"><span class="Apple-tab-span"> </span>r.reset;<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>// have to reset this because it's stopped</p>
<p class="p4"><span class="s2"><span class="Apple-tab-span"> </span>c.play(r);<span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span></span>// play this in the new clock; starts from the beginning</p>
<p class="p4"><span class="s2"><span class="Apple-tab-span"> </span>c.tempo = 16;<span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span></span>// increase the tempo of this</p>
<p class="p10"><span class="Apple-tab-span"> </span></p>
<p class="p13"><span class="Apple-tab-span"> </span></p>
<p class="p4"><span class="s2"><span class="Apple-tab-span"> </span></span><span class="s3">SystemClock</span><span class="s2">.clear; <span class="Apple-tab-span"> </span></span>// clear EVERYTHING scheduled in the SystemClock; so that and the other<span class="Apple-converted-space"> </span></p>
<p class="p4"><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>// but not this</p>
<p class="p10"><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></p>
<p class="p13"><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></p>
<p class="p4"><span class="s2"><span class="Apple-tab-span"> </span>c.clear;<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>// clear everything scheduled in c, i.e. this</p>
<p class="p4"><span class="s2"><span class="Apple-tab-span"> </span>c.play(r);<span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span></span>// since it wasn't stopped, we don't have to reset this</p>
<p class="p4"><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>// and it picks up where it left off</p>
<p class="p10"><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></p>
<p class="p13"><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></p>
<p class="p4"><span class="s2"><span class="Apple-tab-span"> </span>c.stop<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>// stop c, destroy its scheduler, and release its OS thread</p>
<p class="p2"><br></p>
<p class="p3">For convenience pauseable scheduling can be implemented with a <b>Task</b>. Task.new takes two arguments, a function and a clock, and creates it's own <b>Routine</b>. If you don't specify a clock, it will create a <b>TempoClock</b> for you. Since you don't have to explicitly create a Clock or Routine, use of Task can result in code that is a little more compact.</p>
<p class="p2"><br></p>
<p class="p5"><span class="s6"><span class="Apple-tab-span"> </span></span>(</p>
<p class="p5"><span class="s7"><span class="Apple-tab-span"> </span></span>(</p>
<p class="p5"><span class="Apple-tab-span"> </span>t = <span class="s3">Task.</span>new({<span class="Apple-converted-space"> </span></p>
<p class="p5"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="s3">inf</span>.do({ <span class="s3">arg</span> i;</p>
<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>i.postln;<span class="Apple-converted-space"> </span></p>
Expand All @@ -196,7 +200,7 @@
<p class="p2"><br></p>
<p class="p3">TSpawn's functionality can be replicated with <b>SendTrig</b> and <b>OSCresponder</b> or <b>OSCresponderNode</b>. See their individual helpfiles for details on their arguments and functionality.</p>
<p class="p2"><br></p>
<p class="p5"><span class="s6"><span class="Apple-tab-span"> </span></span>s = <span class="s3">Server</span>.default;</p>
<p class="p5"><span class="s7"><span class="Apple-tab-span"> </span></span>s = <span class="s3">Server</span>.default;</p>
<p class="p5"><span class="Apple-tab-span"> </span>s.boot;</p>
<p class="p7"><span class="Apple-tab-span"> </span></p>
<p class="p5"><span class="Apple-tab-span"> </span>(</p>
Expand All @@ -211,7 +215,7 @@
<p class="p7"><span class="Apple-tab-span"> </span></p>
<p class="p5"><span class="Apple-tab-span"> </span>(</p>
<p class="p4"><span class="s2"><span class="Apple-tab-span"> </span></span>// this recieves the trigger on the client side and 'Spawns' a new Synth on the server</p>
<p class="p5"><span class="Apple-tab-span"> </span><span class="s3">OSCresponder</span>(s.addr,<span class="s7">'/tr'</span>,{<span class="Apple-converted-space"> </span></p>
<p class="p5"><span class="Apple-tab-span"> </span><span class="s3">OSCresponder</span>(s.addr,<span class="s8">'/tr'</span>,{<span class="Apple-converted-space"> </span></p>
<p class="p5"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="s3">SynthDef</span>(<span class="s4">"help-EnvGen"</span>,{ <span class="s3">arg</span> out=0;</p>
<p class="p5"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="s3">Out</span>.ar(out,</p>
<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><span class="s3">EnvGen</span>.kr(<span class="s3">Env</span>.perc,1.0,doneAction: 2)<span class="Apple-converted-space"> </span></p>
Expand Down

0 comments on commit 22d8ed9

Please sign in to comment.