[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[sc-dev] SF.net SVN: supercollider:[8243] trunk/build/Help/Streams-Patterns-Events/ Pbind.html
Revision: 8243
http://supercollider.svn.sourceforge.net/supercollider/?rev=8243&view=rev
Author: rkuivila
Date: 2008-12-22 17:14:36 +0000 (Mon, 22 Dec 2008)
Log Message:
-----------
A little more work on the Pbind help file.
Modified Paths:
--------------
trunk/build/Help/Streams-Patterns-Events/Pbind.html
Modified: trunk/build/Help/Streams-Patterns-Events/Pbind.html
===================================================================
--- trunk/build/Help/Streams-Patterns-Events/Pbind.html 2008-12-22 14:40:56 UTC (rev 8242)
+++ trunk/build/Help/Streams-Patterns-Events/Pbind.html 2008-12-22 17:14:36 UTC (rev 8243)
@@ -7,428 +7,435 @@
<meta name="Generator" content="Cocoa HTML Writer">
<meta name="CocoaVersion" content="949.35">
<style type="text/css">
-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: 12.0px Helvetica; color: #0014bc}
-p.p5 {margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica; color: #a91616}
-p.p6 {margin: 0.0px 0.0px 0.0px 0.0px; font: 9.0px Monaco; color: #603923}
-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}
-p.p9 {margin: 0.0px 0.0px 0.0px 0.0px; font: 9.0px Monaco; color: #2342a3}
-p.p10 {margin: 0.0px 0.0px 0.0px 0.0px; font: 9.0px Monaco; color: #5c602e}
-p.p11 {margin: 0.0px 0.0px 0.0px 0.0px; font: 9.0px Monaco; color: #722f22}
-p.p12 {margin: 0.0px 0.0px 0.0px 0.0px; font: 9.0px Monaco; color: #603923; min-height: 12.0px}
-span.s1 {color: #000000}
-span.s2 {color: #606060}
-span.s3 {color: #0014bc}
-span.s4 {color: #307109}
-span.s5 {color: #2342a3}
-span.s6 {color: #5c602e}
-span.s7 {color: #0026f7}
-span.s8 {color: #603923}
+p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica}
+p.p2 {margin: 0.0px 0.0px 0.0px 0.0px; font: 18.0px Helvetica; min-height: 22.0px}
+p.p3 {margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica; min-height: 14.0px}
+p.p4 {margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Helvetica}
+p.p5 {margin: 0.0px 0.0px 0.0px 57.0px; text-indent: -57.0px; font: 9.0px Monaco; min-height: 12.0px}
+p.p6 {margin: 0.0px 0.0px 0.0px 57.0px; text-indent: -57.0px; font: 12.0px Helvetica}
+p.p7 {margin: 0.0px 0.0px 0.0px 57.0px; text-indent: -57.0px; font: 12.0px Helvetica; min-height: 14.0px}
+p.p8 {margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica; color: #961e1e}
+p.p9 {margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica; color: #001db9}
+p.p10 {margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica; color: #bf0000}
+p.p11 {margin: 0.0px 0.0px 0.0px 57.0px; text-indent: -57.0px; font: 14.0px Helvetica}
+p.p12 {margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica; color: #0023b6}
+p.p13 {margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica; color: #862323}
+p.p14 {margin: 0.0px 0.0px 0.0px 0.0px; font: 9.0px Monaco; min-height: 12.0px}
+p.p15 {margin: 0.0px 0.0px 0.0px 0.0px; font: 9.0px Monaco}
+p.p16 {margin: 0.0px 0.0px 0.0px 0.0px; font: 9.0px Monaco; color: #5d5f30}
+p.p17 {margin: 0.0px 0.0px 0.0px 0.0px; font: 9.0px Monaco; color: #5a3a25}
+p.p18 {margin: 0.0px 0.0px 0.0px 0.0px; font: 9.0px Monaco; color: #5a3a25; min-height: 12.0px}
+p.p19 {margin: 0.0px 0.0px 0.0px 0.0px; font: 9.0px Monaco; color: #2844a1}
+p.p20 {margin: 0.0px 0.0px 0.0px 0.0px; font: 9.0px Monaco; color: #683125}
+span.s1 {font: 18.0px Helvetica}
+span.s2 {color: #000000}
+span.s3 {color: #961e1e}
+span.s4 {color: #606060}
+span.s5 {color: #001db9}
+span.s6 {color: #bf0000}
+span.s7 {color: #0023b6}
+span.s8 {color: #4d6d13}
+span.s9 {color: #2844a1}
+span.s10 {color: #5d5f30}
+span.s11 {color: #002ff3}
+span.s12 {color: #5a3a25}
span.Apple-tab-span {white-space:pre}
</style>
</head>
<body>
-<p class="p1"><b>Pbind</b></p>
-<p class="p2"><br></p>
-<p class="p3"><b>superclass: Pattern</b></p>
-<p class="p2"><br></p>
-<p class="p3"><b>Pbind(key1, pattern1, key2, pattern2...)</b></p>
-<p class="p2"><br></p>
-<p class="p3"><b>Pbind</b> is a pattern that specifies sequences of Events to generate music (or any other time based media, such as graphics). It works with <b>SynthDef</b> and <b>Event</b> to form SuperCollider's basic score language.<span class="Apple-converted-space"> </span>It is helpful to review the relation of SynthDef and Event before proceeding to a detailed discussion.</p>
-<p class="p2"><br></p>
-<p class="p3"><b>SynthDef and Event</b></p>
-<p class="p2"><br></p>
-<p class="p3">A <b>SynthDef</b> assigns a name to an interconnection of unit generators to be run as a synth on a server.<span class="Apple-converted-space"> </span>It also assigns <b>control</b> <b>names</b> to the synth's control inputs. In the following example the SynthDef <b>"test" </b>has control inputs <b>out, freq, amp, nharms, pan, </b>and <b>gate</b>. <span class="Apple-converted-space"> </span></p>
-<p class="p2"><br></p>
-<p class="p4"><span class="s1"><span class="Apple-tab-span"> </span></span>SynthDef<span class="s1">( </span><span class="s2">"test"</span><span class="s1">, { </span>| out, freq = 440, amp = 0.1, nharms = 10, pan = 0, gate = 1 |</p>
-<p class="p3"><span class="s3"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span>var audio = Blip</span>.ar(freq, nharms, amp);</p>
-<p class="p3"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span>var env = <span class="s3">Linen</span>.kr(gate, doneAction: 2);</p>
-<p class="p3"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="s3">OffsetOut</span>.ar(out, <span class="s3">Pan2</span>.ar(<span class="s3">audio</span>, pan, env) );</p>
-<p class="p3"><span class="Apple-tab-span"> </span>}).store;</p>
-<p class="p2"><span class="Apple-tab-span"> </span></p>
-<p class="p3">The SynthDef needs to be downloaded to the server upon which it is to be run. The method <b>store </b>(appended to the end of the SynthDef) guarantees that the synthdef will be loaded to any Servers that are running or subsequently started.<span class="Apple-converted-space"> </span>It also creates a <b>SynthDesc, </b>which describes the names and locations of the SynthDefs controls.</p>
-<p class="p2"><br></p>
-<p class="p3">An <b>Event</b> is a Dictionary that specifies an action to be taken in response to <b>play </b>and a time increment to be returned in response to <b>delta</b>. Events can be written as a series of key value pairs enclosed in parentheses.<span class="Apple-converted-space"> </span>Empty parentheses<span class="Apple-converted-space"> </span>create an empty event.<span class="Apple-converted-space"> </span></p>
-<p class="p2"><br></p>
-<p class="p3">By default, Events play synths on a server. Such <i>note events</i> use the following keys:</p>
-<p class="p2"><br></p>
-<p class="p3"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><b>instrument <span class="Apple-tab-span"> </span>(\default)<span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span></b>The synthdef to be played<span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span></p>
-<p class="p3"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><b>server<span class="Apple-tab-span"> </span></b><span class="Apple-tab-span"> </span>(<b>Server.default</b>)<span class="Apple-tab-span"> </span>The server that plays the synth<span class="Apple-converted-space"> <span class="Apple-tab-span"> </span></span></p>
-<p class="p3"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><b>group<span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span>( 1</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>The group that conatins the synth or synth it is placed before or after</p>
-<p class="p3"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><b>addAction<span class="Apple-tab-span"> </span>(0)<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>How the synth is placed relative to the target specified by <b>group</b></p>
-<p class="p3"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><b>delta<span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span>(function)<span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span></b>The time until the next event in a sequence of events, generally specified</p>
-<p class="p3"><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 class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span>indirectly through <b>dur</b></p>
-<p class="p2"><br></p>
-<p class="p3">When the Event is played,<span class="Apple-converted-space"> </span>it creates an OSC command to play a synth.<span class="Apple-converted-space"> </span>It uses the name assigned to <b>instrument<span class="Apple-converted-space"> </span></b> to the select the SynthDef to be played.<span class="Apple-converted-space"> </span>The SynthDef's controlnames (found in its SynthDesc) are looked up in the event and the corresponding values included in the command.</p>
-<p class="p2"><br></p>
-<p class="p3"><span class="Apple-converted-space"> </span>There are a number of coventional names typically used to identify controls in a synth.</p>
-<p class="p2"><span class="Apple-converted-space"> </span></p>
-<p class="p3"><b><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span>out<span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span></b>output bus index</p>
-<p class="p3"><b><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span>in<span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span></b>input bus index<span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span>(for filters, modulators, etc)</p>
-<p class="p3"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><b>gate<span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span></b>envelope gate (not level!) - should default to 1.0, deletes synth when released</p>
-<p class="p3"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><b>trig<span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span></b>envelope gate (not level!) - should default to 1.0, does not delete synth when released</p>
-<p class="p3"><b><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span>pan<span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span></b>panning position</p>
-<p class="p3"><b><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span>bufnum<span class="Apple-tab-span"> </span></b>buffer number (used in synths that utilize PlayBuf, DiskIn, etc)</p>
-<p class="p3"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><b>sustain<span class="Apple-tab-span"> </span></b>duration of the synth</p>
-<p class="p3"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><b>amp<span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span></b>amplitude of the synth</p>
-<p class="p3"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><b>freq<span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span></b>base pitch of the synth</p>
-<p class="p2"><br></p>
-<p class="p3">Event implements a layered specification scheme for some of these controls.<span class="Apple-converted-space"> </span>In the following list, the first and leftmost name is the actual control name, names below and indented are more abstract ways to specify the control.</p>
-<p class="p2"><br></p>
-<p class="p3"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><b>delta<span class="Apple-tab-span"> </span></b>The time until the next event.<span class="Apple-converted-space"> </span>Generally determined by:</p>
-<p class="p3"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><b>dur<span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span></b>The time until next event in a sequence of events</p>
-<p class="p3"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><b>stretch<span class="Apple-tab-span"> </span></b>Scales event timings (i.e. stretch == 2 => durations are twice as long)</p>
-<p class="p2"><br></p>
-<p class="p3"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><b>sustain<span class="Apple-tab-span"> </span></b>Duration of the synth, typically determined (in stretched time units) by:<span class="Apple-tab-span"> </span></p>
-<p class="p3"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><b>legato<span class="Apple-tab-span"> </span></b>The ratio of the synth's duration to the event's duration</p>
-<p class="p2"><br></p>
-<p class="p3"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><b>amp<span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span></b>synth amplitude (typically ranging from 0 to 1), often determined by</p>
-<p class="p3"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><b>db<span class="Apple-tab-span"> </span></b>Amplitude in decibels</p>
-<p class="p2"><br></p>
-<p class="p3"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><b>detunedFreq<span class="Apple-tab-span"> </span></b>actual "pitch" of a synth, determined by</p>
-<p class="p3"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><b>freq + detune</b>; freq is<b> </b>determined by</p>
-<p class="p3"><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>midinote</b> + <b>ctranspose).midicps * harmonic; </b>midinote is determined by</p>
-<p class="p3"><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>(<b>note + gtranspose + root)/stepsPerOctave * octave * 12; </b>note is determined by</p>
-<p class="p3"><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><b>(degree + mtranspose).degreeToKey(scale, stepsPerOctave)</b><span class="Apple-tab-span"> </span></p>
-<p class="p2"><br></p>
-<p class="p2"><br></p>
-<p class="p3">(</p>
-<p class="p5"><span class="s1"><b><span class="Apple-tab-span"> </span></b></span><b>// the SynthDef</b></p>
-<p class="p4"><span class="s1"><b><span class="Apple-tab-span"> </span></b></span><b>SynthDef</b><span class="s1"><b>( </b></span><span class="s2"><b>"test"</b></span><span class="s1"><b>, { </b></span><b>| out, freq = 440, amp = 0.1, nharms = 10, pan = 0, gate = 1 |</b></p>
-<p class="p3"><b><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span></b><span class="s3"><b>var</b></span><b> audio = </b><span class="s3"><b>Blip</b></span><b>.ar(freq, nharms, amp);</b></p>
-<p class="p3"><b><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span></b><span class="s3"><b>var</b></span><b> env = </b><span class="s3"><b>Linen</b></span><b>.kr(gate, doneAction: 2);</b></p>
-<p class="p3"><b><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span></b><span class="s3"><b>OffsetOut</b></span><b>.ar(out, </b><span class="s3"><b>Pan2</b></span><b>.ar(audio, pan, env) );</b></p>
-<p class="p3"><b><span class="Apple-tab-span"> </span>}).store;</b></p>
-<p class="p2"><br></p>
-<p class="p5"><span class="s1"><b><span class="Apple-tab-span"> </span></b></span><b>// Events are written as parantheses enclosing key/value pairs</b></p>
-<p class="p3"><b><span class="Apple-tab-span"> </span>(instrument: </b><span class="s4"><b>\test</b></span><b>).play;</b></p>
-<p class="p3"><b><span class="Apple-tab-span"> </span>(instrument: </b><span class="s4"><b>\test</b></span><b>, freq: 20, nharms: 50).play;</b></p>
-<p class="p3">)</p>
-<p class="p2"><br></p>
-<p class="p2"><br></p>
-<p class="p3"><b>Pbind</b></p>
-<p class="p2"><br></p>
-<p class="p3">A pattern defined with <b>Pbind </b>binds different patterns to different keys in an Event to define a sequence of events.<span class="Apple-converted-space"> </span>The sequence of Events typically defines a sequence of synths that generates music (but may include control changes, buffer allocations, etc).<span class="Apple-converted-space"> </span>The patterns bound to keys are referred to as <i>value patterns</i> and the Pbind itself is termed an <i>event pattern</i>.<span class="Apple-converted-space"> </span>For example:</p>
-<p class="p2"><br></p>
-<p class="p3">(</p>
-<p class="p5"><span class="s1"><b><span class="Apple-tab-span"> </span></b></span><b>// the SynthDef</b></p>
-<p class="p4"><span class="s1"><b><span class="Apple-tab-span"> </span></b></span><b>SynthDef</b><span class="s1"><b>( </b></span><span class="s2"><b>"test"</b></span><span class="s1"><b>, { </b></span><b>| out, freq = 440, amp = 0.1, nharms = 10, pan = 0, gate = 1 |</b></p>
-<p class="p3"><b><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span></b><span class="s3"><b>var</b></span><b> audio = </b><span class="s3"><b>Blip</b></span><b>.ar(freq, nharms, amp);</b></p>
-<p class="p3"><b><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span></b><span class="s3"><b>var</b></span><b> env = </b><span class="s3"><b>Linen</b></span><b>.kr(gate, doneAction: 2);</b></p>
-<p class="p3"><b><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span></b><span class="s3"><b>OffsetOut</b></span><b>.ar(out, </b><span class="s3"><b>Pan2</b></span><b>.ar(audio, pan, env) );</b></p>
-<p class="p3"><b><span class="Apple-tab-span"> </span>}).store;</b></p>
-<p class="p2"><br></p>
-<p class="p3"><span class="Apple-tab-span"> </span><b>Pbind(*[</b></p>
-<p class="p3"><b><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span>instrument:<span class="Apple-tab-span"> </span>\test,</b></p>
-<p class="p3"><b><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span>nharms:<span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span>Pseq([4,10,40], inf),</b></p>
-<p class="p3"><b><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span>dur:<span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span>Pseq([1,1,2,1]/10,inf)</b>,</p>
-<p class="p3"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><b>sustain:<span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span>Pseq([1/10, 0.5, 1, 2],inf),</b></p>
-<p class="p3"><b><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span>freq:<span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span>Pseq( (1..16) * 50, 4)</b></p>
-<p class="p3"><b><span class="Apple-tab-span"> </span>]).play</b></p>
-<p class="p3">)</p>
-<p class="p2"><span class="Apple-converted-space"> <span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span></span></p>
-<p class="p3">When a Pbind is sent <b>asStream</b>, it creates streams out of all of its constituent patterns and a Stream to obtain values from those streams and insert them into an event.<span class="Apple-converted-space"> </span>This "realization" of the Pbind is actually performed by an <b>EventStreamPlayer </b>that takes events from the Stream, plays those events and schedules itself in accordance with the results of sending <b>delta </b>messages to those events.</p>
-<p class="p2"><br></p>
-<p class="p2"><br></p>
-<p class="p3">The Pbind stream returns nil whenever the first one of its streams ends or if nil is passed in.</p>
-<p class="p2"><br></p>
-<p class="p6">// example:</p>
+<p class="p1"><span class="s1"><b>Pbind<span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span></b></span><b>Pbind defines streams of Events by "binding" patterns to keys (or sets of keys) in the Event</b></p>
+<p class="p2"><b><span class="Apple-tab-span"> </span></b></p>
+<p class="p1"><b>Inherits from: Object : AbstractFunction : Pattern</b></p>
+<p class="p3"><br></p>
+<p class="p1"><b>Pbind</b> works with the classes <b>SynthDef </b>and <b>Event </b>and the rest of the <b>Pattern </b>Library to form one of Supercollider's basic<span class="Apple-converted-space"> </span></p>
+<p class="p1">score language facilities. ( See <b>SynthDef and Event</b> below for a brief discussion of both in relation to Pbind.)</p>
+<p class="p3"><br></p>
+<p class="p1"><b>Pbind </b>specifies a stream of <b>Events</b> in terms of different<span class="Apple-converted-space"> </span>patterns<i> </i>that are <b>bound </b>to different keys in the Event.</p>
+<p class="p1">The patterns bound to keys are referred to as <i>value patterns</i> and the Pbind itself is termed an <i>event pattern.</i></p>
+<p class="p3"><br></p>
+<p class="p1">The keys used in a Pbind are usually determined by <b>Event's</b> default mechanism and the controls defined for the</p>
+<p class="p1"><b>SynthDef</b> to be played.<span class="Apple-converted-space"> </span>Consult [<b>SynthDef and Event</b>] for details.</p>
+<p class="p3"><span class="Apple-tab-span"> </span></p>
+<p class="p4"><b>Creation / Class Methods</b></p>
+<p class="p5"><br></p>
+<p class="p6"><b><span class="Apple-tab-span"> </span>*new (key1, pattern1, key2, pattern2 ...)</b></p>
+<p class="p6"><b><span class="Apple-tab-span"> </span></b><span class="Apple-tab-span"> </span>The arguments to Pbind are an alternating sequence of keys and patterns.</p>
+<p class="p6"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span>A pattern can also be bount to an array of keys.<span class="Apple-converted-space"> </span>In this case, the pattern must specify</p>
+<p class="p6"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span>a sequence whose elements are arrays with at least as many elements as there are keys.</p>
+<p class="p3"><br></p>
+<p class="p1"><b>Examples</b></p>
<p class="p7"><br></p>
-<p class="p8">a = <span class="s5">Pbind</span>(<span class="s6">\x</span>, 77, <span class="s6">\y</span>, <span class="s5">Pseq</span>([1, 2, 3]));</p>
-<p class="p8">x = a.asStream;</p>
-<p class="p8">4.do { x.next(<span class="s5">Event</span>.new).postln };</p>
-<p class="p2"><br></p>
-<p class="p8">a = <span class="s5">Pbind</span>(<span class="s6">\x</span>, 77, <span class="s6">\y</span>, <span class="s5">Pseq</span>([1, 2, 3]));</p>
-<p class="p8">x = a.asStream;</p>
-<p class="p6"><span class="s1">x.next; </span>// this returns nil.</p>
-<p class="p2"><br></p>
-<p class="p2"><br></p>
-<p class="p3">An <b><i>event stream</i></b> is created for a Pattern by sending it the <i>asEventStreamPlayer</i> message. The <i>asEventStreamPlayer</i> message takes an Event as an argument. This event is copied for each call to next to pass down and back up the tree of patterns so that each pattern can modify the event. What Pbind does is put the values for its symbols into the event, possibly overwriting previous bindings to those symbols.</p>
-<p class="p2"><br></p>
-<p class="p3">This uses the default event.<span class="Apple-converted-space"> </span>In the next example we will supply our own event (synth function).</p>
-<p class="p2"><br></p>
-<p class="p6">// example:</p>
-<p class="p8">(</p>
-<p class="p9">Pbind<span class="s1">(</span></p>
-<p class="p8"><span class="Apple-tab-span"> </span><span class="s6">\degree</span>, <span class="s5">Pseq</span>([1,3,5,7], <span class="s5">inf</span>),</p>
-<p class="p8"><span class="Apple-tab-span"> </span><span class="s6">\dur</span>, 0.125,<span class="Apple-converted-space"> </span></p>
-<p class="p10"><span class="s1"><span class="Apple-tab-span"> </span></span>\octave<span class="s1">, 4,<span class="Apple-converted-space"> </span></span></p>
-<p class="p10"><span class="s1"><span class="Apple-tab-span"> </span></span>\root<span class="s1">, 3</span></p>
-<p class="p8">).play</p>
-<p class="p8">)</p>
+<p class="p1">(</p>
+<p class="p8"><span class="s2"><b><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span></b></span><b>// A SynthDef</b></p>
+<p class="p9"><span class="s3"><span class="Apple-tab-span"> </span></span><span class="s2"><b><span class="Apple-tab-span"> </span></b></span><b>SynthDef</b><span class="s2"><b>( </b></span><span class="s4"><b>"test"</b></span><span class="s2"><b>, { </b></span><b>| out, freq = 440, amp = 0.1, nharms = 10, pan = 0, gate = 1 |</b></p>
+<p class="p1"><span class="s5"><span class="Apple-tab-span"> </span></span><b><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span></b><span class="s5"><b>var</b></span><b> audio = </b><span class="s5"><b>Blip</b></span><b>.ar(freq, nharms, amp);</b></p>
+<p class="p1"><span class="Apple-tab-span"> </span><b><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span></b><span class="s5"><b>var</b></span><b> env = </b><span class="s5"><b>Linen</b></span><b>.kr(gate, doneAction: 2);</b></p>
+<p class="p1"><span class="Apple-tab-span"> </span><b><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span></b><span class="s5"><b>OffsetOut</b></span><b>.ar(out, </b><span class="s5"><b>Pan2</b></span><b>.ar(audio, pan, env) );</b></p>
+<p class="p1"><span class="Apple-tab-span"> </span><b><span class="Apple-tab-span"> </span>}).store;</b></p>
+<p class="p3"><span class="Apple-tab-span"> </span></p>
+<p class="p3"><br></p>
+<p class="p10">//<span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span>standard syntax, arguments alternate symbols and patterns</p>
+<p class="p1"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><b>Pbind(</b></p>
+<p class="p1"><span class="Apple-tab-span"> </span><b><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span>\instrument,<span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span>\test,</b></p>
+<p class="p1"><span class="Apple-tab-span"> </span><b><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span>\nharms,<span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span>Pseq([4,10,40], inf),</b></p>
+<p class="p1"><span class="Apple-tab-span"> </span><b><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span>\dur,<span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span>Pseq([1,1,2,1]/10,inf)</b>,</p>
+<p class="p1"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><b>#[freq, sustain],<span class="Apple-converted-space"> <span class="Apple-tab-span"> </span></span>Ptuple([<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></b><span class="s6"><b>// assignment to multiple keys</b></span></p>
+<p class="p1"><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 class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span>Pseq( (1..16) * 50, 4),</b></p>
+<p class="p1"><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 class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span>Pseq([1/10, 0.5, 1, 2],inf)</b></p>
+<p class="p1"><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 class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span>])<span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span></b></p>
+<p class="p1"><span class="Apple-tab-span"> </span><b><span class="Apple-tab-span"> </span>).play</b></p>
+<p class="p3"><br></p>
+<p class="p1">)</p>
+<p class="p3"><br></p>
+<p class="p6">It is<span class="Apple-converted-space"> </span>possible to specify a Pbind with an Array preceded by <b>*</b>. Arrays treat identifiers ending with a colon as<span class="Apple-converted-space"> </span></p>
+<p class="p6">Symbols, making the syntax of the Pbind specification a bit more concise:</p>
+<p class="p3"><br></p>
+<p class="p1">(</p>
+<p class="p10">//<span class="Apple-tab-span"> </span>Alternative syntax, using a key/pattern array:</p>
+<p class="p3"><br></p>
+<p class="p1"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><b>Pbind(*[</b></p>
+<p class="p1"><span class="Apple-tab-span"> </span><b><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span>instrument:<span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span>\test,</b></p>
+<p class="p1"><span class="Apple-tab-span"> </span><b><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span>nharms:<span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span>Pseq([4,10,40], inf),</b></p>
+<p class="p1"><span class="Apple-tab-span"> </span><b><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span>dur:<span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span>Pseq([1,1,2,1]/10,inf)</b>,</p>
+<p class="p1"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><b>#[freq, sustain],<span class="Apple-converted-space"> <span class="Apple-tab-span"> </span></span>Ptuple([</b></p>
+<p class="p1"><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 class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span>Pseq( (1..16) * 50, 4),</b></p>
+<p class="p1"><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 class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span>Pseq([1/10, 0.5, 1, 2],inf)</b></p>
+<p class="p1"><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 class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span>]),<span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span></b></p>
+<p class="p1"><span class="Apple-tab-span"> </span><b><span class="Apple-tab-span"> </span>]).play</b></p>
+<p class="p1">)</p>
+<p class="p3"><b></b><br></p>
+<p class="p11"><b>SynthDef and Event</b></p>
+<p class="p3"><br></p>
+<p class="p1">The keys used in a Pbind are determined by the <b>SynthDef </b>used and the structure of the extensive default mechanism provided by <b>Event.<span class="Apple-converted-space"> </span></b>This section provides a brief review of both.</p>
+<p class="p3"><br></p>
+<p class="p1">A <b>SynthDef</b> assigns a name to an interconnection of unit generators to be run as a synth on a server.<span class="Apple-converted-space"> </span>It also assigns <b>control</b> <b>names</b> to the synth's control inputs. In the following example the SynthDef <b>"test" </b>has control inputs <b>out, freq, amp, nharms, pan, </b>and <b>gate</b>. <span class="Apple-converted-space"> </span></p>
+<p class="p3"><br></p>
+<p class="p12"><span class="s2"><span class="Apple-tab-span"> </span></span>SynthDef<span class="s2">( </span><span class="s4">"test"</span><span class="s2">, { </span>| out, freq = 440, amp = 0.1, nharms = 10, pan = 0, gate = 1 |</p>
+<p class="p1"><span class="s7"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span>var audio = Blip</span>.ar(freq, nharms, amp);</p>
+<p class="p1"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span>var env = <span class="s7">Linen</span>.kr(gate, doneAction: 2);</p>
+<p class="p1"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="s7">OffsetOut</span>.ar(out, <span class="s7">Pan2</span>.ar(<span class="s7">audio</span>, pan, env) );</p>
+<p class="p1"><span class="Apple-tab-span"> </span>}).store;</p>
+<p class="p3"><span class="Apple-tab-span"> </span></p>
+<p class="p1">The SynthDef needs to be downloaded to the server upon which it is to be run. The method <b>store </b>(appended to the end of the SynthDef) guarantees that the synthdef will be loaded to any Servers that are running or subsequently started.<span class="Apple-converted-space"> </span>It also creates a <b>SynthDesc, </b>which describes the names and locations of the SynthDefs controls.</p>
+<p class="p3"><br></p>
+<p class="p1">An <b>Event</b> is a Dictionary that specifies an action to be taken in response to <b>play </b>and a time increment to be returned in response to <b>delta</b>. Events can be written as a series of key value pairs enclosed in parentheses.<span class="Apple-converted-space"> </span>Empty parentheses<span class="Apple-converted-space"> </span>create an empty event.<span class="Apple-converted-space"> </span></p>
+<p class="p3"><br></p>
+<p class="p1">By default, Events play synths on a server. Such <i>note events</i> use the following keys:</p>
+<p class="p3"><br></p>
+<p class="p1"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><b>instrument <span class="Apple-tab-span"> </span>(\default)<span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span></b>The synthdef to be played<span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span></p>
+<p class="p1"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><b>server<span class="Apple-tab-span"> </span></b><span class="Apple-tab-span"> </span>(<b>Server.default</b>)<span class="Apple-tab-span"> </span>The server that plays the synth<span class="Apple-converted-space"> <span class="Apple-tab-span"> </span></span></p>
+<p class="p1"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><b>group<span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span>( 1</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>The new synth's or the synth the new synth is placed before or after</p>
+<p class="p1"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><b>addAction<span class="Apple-tab-span"> </span>(0)<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>How the synth is placed relative to the target specified by <b>group</b></p>
+<p class="p1"><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 class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span>0 -> head of group</b></p>
+<p class="p1"><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 class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span>1 -> tail of group</b></p>
+<p class="p1"><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 class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span>2 -> before group (could be a Synth)</b></p>
+<p class="p1"><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 class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span>3 -> after group (could be a Synth)</b></p>
+<p class="p1"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><b>delta<span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span>(function)<span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span></b>The time until the next event in a sequence of events, generally specified</p>
+<p class="p1"><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 class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span>indirectly through <b>dur</b></p>
+<p class="p3"><br></p>
+<p class="p1">When the Event is played,<span class="Apple-converted-space"> </span>it creates an OSC command to play a synth.<span class="Apple-converted-space"> </span>It uses the name assigned to <b>instrument<span class="Apple-converted-space"> </span></b> to the select the SynthDef to be played.<span class="Apple-converted-space"> </span>The SynthDef's controlnames (found in its SynthDesc) are looked up in the event and the corresponding values included in the command.</p>
+<p class="p3"><br></p>
+<p class="p1"><span class="Apple-converted-space"> </span>There are a number of coventional names typically used to identify controls in a synth.</p>
+<p class="p3"><span class="Apple-converted-space"> </span></p>
+<p class="p1"><b><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span>out<span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span></b>output bus index</p>
+<p class="p1"><b><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span>in<span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span></b>input bus index<span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span>(for filters, modulators, etc)</p>
+<p class="p1"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><b>gate<span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span></b>envelope gate (not level!) - should default to 1.0, deletes synth when released</p>
+<p class="p1"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><b>trig<span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span></b>envelope gate (not level!) - should default to 1.0, does not delete synth when released</p>
+<p class="p1"><b><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span>pan<span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span></b>panning position</p>
+<p class="p1"><b><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span>bufnum<span class="Apple-tab-span"> </span></b>buffer number (used in synths that utilize PlayBuf, DiskIn, etc)</p>
+<p class="p1"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><b>sustain<span class="Apple-tab-span"> </span></b>duration of the synth</p>
+<p class="p1"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><b>amp<span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span></b>amplitude of the synth</p>
+<p class="p1"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><b>freq<span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span></b>base pitch of the synth</p>
+<p class="p3"><br></p>
+<p class="p1">Event implements a layered specification scheme for some of these controls.<span class="Apple-converted-space"> </span>In the following list, the first and leftmost name is the actual control name, names below and indented are more abstract ways to specify the control.</p>
+<p class="p3"><br></p>
+<p class="p1"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><b>delta<span class="Apple-tab-span"> </span></b>The time until the next event.<span class="Apple-converted-space"> </span>Generally determined by:</p>
+<p class="p1"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><b>dur<span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span></b>The time until next event in a sequence of events</p>
+<p class="p1"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><b>stretch<span class="Apple-tab-span"> </span></b>Scales event timings (i.e. stretch == 2 => durations are twice as long)</p>
+<p class="p3"><br></p>
+<p class="p1"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><b>sustain<span class="Apple-tab-span"> </span></b>Duration of the synth, typically determined (in stretched time units) by:<span class="Apple-tab-span"> </span></p>
+<p class="p1"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><b>legato<span class="Apple-tab-span"> </span></b>The ratio of the synth's duration to the event's duration</p>
+<p class="p3"><br></p>
+<p class="p1"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><b>amp<span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span></b>synth amplitude (typically ranging from 0 to 1), often determined by</p>
+<p class="p1"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><b>db<span class="Apple-tab-span"> </span></b>Amplitude in decibels</p>
+<p class="p3"><br></p>
+<p class="p1"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><b>detunedFreq<span class="Apple-tab-span"> </span></b>actual "pitch" of a synth, determined by</p>
+<p class="p1"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><b>freq + detune</b>; freq is<b> </b>determined by</p>
+<p class="p1"><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>midinote</b> + <b>ctranspose).midicps * harmonic; </b>midinote is determined by</p>
+<p class="p1"><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>(<b>note + gtranspose + root)/stepsPerOctave * octave * 12; </b>note is determined by</p>
+<p class="p1"><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><b>(degree + mtranspose).degreeToKey(scale, stepsPerOctave)</b><span class="Apple-tab-span"> </span></p>
+<p class="p1">(</p>
+<p class="p13"><span class="s2"><b><span class="Apple-tab-span"> </span></b></span><b>// the SynthDef</b></p>
+<p class="p12"><span class="s2"><b><span class="Apple-tab-span"> </span></b></span><b>SynthDef</b><span class="s2"><b>( </b></span><span class="s4"><b>"test"</b></span><span class="s2"><b>, { </b></span><b>| out, freq = 440, amp = 0.1, nharms = 10, pan = 0, gate = 1 |</b></p>
+<p class="p1"><b><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span></b><span class="s7"><b>var</b></span><b> audio = </b><span class="s7"><b>Blip</b></span><b>.ar(freq, nharms, amp);</b></p>
+<p class="p1"><b><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span></b><span class="s7"><b>var</b></span><b> env = </b><span class="s7"><b>Linen</b></span><b>.kr(gate, doneAction: 2);</b></p>
+<p class="p1"><b><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span></b><span class="s7"><b>OffsetOut</b></span><b>.ar(out, </b><span class="s7"><b>Pan2</b></span><b>.ar(audio, pan, env) );</b></p>
+<p class="p1"><b><span class="Apple-tab-span"> </span>}).store;</b></p>
+<p class="p3"><br></p>
+<p class="p13"><span class="s2"><b><span class="Apple-tab-span"> </span></b></span><b>// Events are written as parantheses enclosing key/value pairs</b></p>
+<p class="p1"><b><span class="Apple-tab-span"> </span>(instrument: </b><span class="s8"><b>\test</b></span><b>).play;</b></p>
+<p class="p1"><b><span class="Apple-tab-span"> </span>(instrument: </b><span class="s8"><b>\test</b></span><b>, freq: 20, nharms: 50).play;</b></p>
+<p class="p1">)</p>
+<p class="p3"><br></p>
+<p class="p3"><br></p>
+<p class="p11"><b>The Play Method<span class="Apple-converted-space"> </span></b></p>
+<p class="p3"><br></p>
+<p class="p1">While the play method is actually defined in the class <b>Pattern</b>, it is useful to review it here:</p>
+<p class="p3"><br></p>
+<p class="p1"><b><span class="Apple-tab-span"> </span>play (clock, protoEvent, quant)<span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span></b>returns an <b>EventStreamPlayer</b><span class="Apple-converted-space"> </span></p>
+<p class="p3"><span class="Apple-tab-span"> </span></p>
+<p class="p1"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><b>clock <span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span></b>The clock that schedules the EventStreamPlayer, defaults to <b>TempoClock.default</b>. <span class="Apple-converted-space"> </span></p>
+<p class="p1"><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>Patterns that change graphics must use <b>AppClock</b>.</p>
+<p class="p1"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><b>protoEvent </b><span class="Apple-tab-span"> </span>The initial event modified by <b>Pbind</b>, defaults to <b>Event.default</b>.</p>
+<p class="p1"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><b>quant<span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span></b>A quantization value used by clock.<span class="Apple-converted-space"> </span>When a number, the pattern will start at the next even multiple<span class="Apple-converted-space"> </span></p>
+<p class="p1"><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>of that number. May also be a <b>Quant, </b>which specifies quantization, time position within that quantization,<span class="Apple-converted-space"> </span></p>
+<p class="p1"><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 a timingOffset. See <b>Quant </b>for details.</p>
+<p class="p3"><br></p>
+<p class="p11"><b>Realtime Control with EventStreamPlayer</b></p>
<p class="p7"><br></p>
-<p class="p8">(</p>
-<p class="p8"><span class="s5">SynthDef</span>(<span class="s6">\cfstring1</span>, { <span class="s5">arg</span> i_out, freq = 360, gate = 1, pan, amp=0.1;</p>
-<p class="p8"><span class="Apple-tab-span"> </span><span class="s5">var</span> out, eg, fc, osc, a, b, w;</p>
-<p class="p8"><span class="Apple-tab-span"> </span>fc = <span class="s5">LinExp</span>.kr(<span class="s5">LFNoise1</span>.kr(<span class="s5">Rand</span>(0.25,0.4)), -1,1,500,2000);</p>
-<p class="p8"><span class="Apple-tab-span"> </span>osc = <span class="s5">Mix</span>.fill(8, {<span class="s5">LFSaw</span>.ar(freq * [<span class="s5">Rand</span>(0.99,1.01),<span class="s5">Rand</span>(0.99,1.01)], 0, amp) }).distort * 0.2;</p>
-<p class="p8"><span class="Apple-tab-span"> </span>eg = <span class="s5">EnvGen</span>.kr(<span class="s5">Env</span>.asr(1,1,1), gate, doneAction:2);</p>
-<p class="p8"><span class="Apple-tab-span"> </span>out = eg * <span class="s5">RLPF</span>.ar(osc, fc, 0.1);</p>
-<p class="p8"><span class="Apple-tab-span"> </span>#a, b = out;</p>
-<p class="p8"><span class="Apple-tab-span"> </span><span class="s5">Out</span>.ar(i_out, <span class="s5">Mix</span>.ar(<span class="s5">PanAz</span>.ar(4, [a, b], [pan, pan+0.3])));</p>
-<p class="p8">}).store;</p>
-<p class="p8">)</p>
-<p class="p7"><br></p>
-<p class="p7"><br></p>
-<p class="p8">(</p>
-<p class="p8">e = <span class="s5">Pbind</span>(</p>
-<p class="p8"><span class="Apple-tab-span"> </span><span class="s6">\degree</span>, <span class="s5">Pwhite</span>(0,12),<span class="Apple-converted-space"> </span></p>
-<p class="p8"><span class="Apple-tab-span"> </span><span class="s6">\dur</span>, 0.2,<span class="Apple-converted-space"> </span></p>
-<p class="p10"><span class="s1"><span class="Apple-tab-span"> </span></span>\instrument<span class="s1">, </span>\cfstring1</p>
-<p class="p6"><span class="s1">).play; </span>// returns an EventStream</p>
-<p class="p8">)</p>
-<p class="p7"><br></p>
-<p class="p6">// the event stream's stream can be changed while it is running:</p>
-<p class="p7"><br></p>
-<p class="p8">(</p>
-<p class="p8">e.stream = <span class="s5">Pbind</span>(</p>
-<p class="p8"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="s6">\degree</span>, <span class="s5">Pseq</span>([0,1,2,4,6,3,4,8],<span class="s5">inf</span>),<span class="Apple-converted-space"> </span></p>
-<p class="p8"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="s6">\dur</span>, <span class="s5">Prand</span>([0.2,0.4,0.8],<span class="s5">inf</span>),<span class="Apple-converted-space"> </span></p>
-<p class="p8"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="s6">\amp</span>, 0.05, <span class="s6">\octave</span>, 5,<span class="Apple-converted-space"> </span></p>
-<p class="p10"><span class="s1"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span></span>\instrument<span class="s1">, </span>\cfstring1<span class="s1">, </span>\ctranspose<span class="s1">, 0</span></p>
-<p class="p8">).asStream;</p>
-<p class="p8">)</p>
-<p class="p7"><br></p>
-<p class="p8">(</p>
-<p class="p8">e.stream = <span class="s5">Pbind</span>(</p>
-<p class="p8"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="s6">\degree</span>, <span class="s5">Pseq</span>([0,1,2,4,6,3,4,8],<span class="s5">inf</span>),<span class="Apple-converted-space"> </span></p>
-<p class="p8"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="s6">\dur</span>, <span class="s5">Prand</span>([0.2,0.4,0.8],<span class="s5">inf</span>),<span class="Apple-converted-space"> </span></p>
-<p class="p8"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="s6">\amp</span>, 0.05, <span class="s6">\octave</span>, 5,<span class="Apple-converted-space"> </span></p>
-<p class="p10"><span class="s1"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span></span>\instrument<span class="s1">, </span>\cfstring1<span class="s1">, </span>\ctranspose<span class="s1">, 0</span></p>
-<p class="p8">).asStream;</p>
-<p class="p8">)</p>
-<p class="p7"><br></p>
-<p class="p8">(</p>
-<p class="p8">e.stream = <span class="s5">Pbind</span>(</p>
-<p class="p8"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="s6">\degree</span>, <span class="s5">Pxrand</span>([0,1,2,4,6,3,5,7,8],<span class="s5">inf</span>),<span class="Apple-converted-space"> </span></p>
-<p class="p8"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="s6">\dur</span>, <span class="s5">Prand</span>([0.2,0.4,0.8],<span class="s5">inf</span>), <span class="s6">\amp</span>, 0.05,<span class="Apple-converted-space"> </span></p>
-<p class="p10"><span class="s1"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span></span>\octave<span class="s1">, 5, </span>\instrument<span class="s1">, </span>\cfstring1</p>
-<p class="p8">).asStream;</p>
-<p class="p8">)</p>
-<p class="p7"><br></p>
-<p class="p6">// pairs of names can be used to group several parameters</p>
-<p class="p7"><br></p>
-<p class="p8">(</p>
-<p class="p8">e.stream = <span class="s5">Pbind</span>(</p>
-<p class="p10"><span class="s1"><span class="Apple-tab-span"> </span>[</span>\degree<span class="s1">, </span>\dur<span class="s1">], </span><span class="s5">Pseq</span><span class="s1">([</span></p>
-<p class="p8"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="s5">Pseq</span>([[0,0.1],[2,0.1],[3,0.1],[4,0.1],[5,0.8]],2),</p>
-<p class="p8"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="s5">Ptuple</span>([<span class="s5">Pxrand</span>([6,7,8,9],4), 0.4]),</p>
-<p class="p8"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="s5">Ptuple</span>([<span class="s5">Pseq</span>([9,8,7,6,5,4,3,2]), 0.2])</p>
-<p class="p8"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span>],<span class="s5">inf</span>),</p>
-<p class="p10"><span class="s1"><span class="Apple-tab-span"> </span></span>\amp<span class="s1">, 0.05, </span>\octave<span class="s1">, 5, </span>\instrument<span class="s1">, </span>\cfstring1<span class="s1">, </span>\mtranspose<span class="s1">, 0).asStream;</span></p>
-<p class="p8">)</p>
-<p class="p7"><br></p>
-<p class="p7"><br></p>
-<p class="p8">(</p>
-<p class="p8">e.stream = <span class="s5">Pbind</span>(</p>
-<p class="p10"><span class="s1"><span class="Apple-tab-span"> </span>[</span>\degree<span class="s1">, </span>\dur<span class="s1">], </span><span class="s5">Pseq</span><span class="s1">([</span></p>
-<p class="p8"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="s5">Pseq</span>([[0,0.1],[2,0.1],[3,0.1],[4,0.1],[5,0.8]],2),</p>
-<p class="p8"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="s5">Ptuple</span>([<span class="s5">Pxrand</span>([6,7,8,9],4), 0.4]),</p>
-<p class="p8"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="s5">Ptuple</span>([<span class="s5">Pseq</span>([9,8,7,6,5,4,3,2]), 0.2])</p>
-<p class="p8"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span>],<span class="s5">inf</span>),</p>
-<p class="p10"><span class="s1"><span class="Apple-tab-span"> </span></span>\amp<span class="s1">, 0.05, </span>\octave<span class="s1">, 6, </span>\instrument<span class="s1">, </span>\cfstring1<span class="s1">, </span>\mtranspose<span class="s1">, 0).asStream;</span></p>
-<p class="p8">)</p>
-<p class="p7"><br></p>
-<p class="p7"><br></p>
-<p class="p7"><br></p>
-<p class="p7"><br></p>
-<p class="p6">// play control:</p>
-<p class="p7"><br></p>
-<p class="p6"><span class="s1">e.mute; </span>// keeps playing, but replaces notes with rests</p>
-<p class="p7"><br></p>
-<p class="p8">e.unmute;</p>
-<p class="p7"><br></p>
-<p class="p6"><span class="s1">e.reset;<span class="Apple-converted-space"> </span></span>// reset the stream.</p>
-<p class="p6"><span class="s1">e.reset;<span class="Apple-converted-space"> </span></span>// reset the stream.</p>
-<p class="p6"><span class="s1">e.reset;<span class="Apple-converted-space"> </span></span>// reset the stream.</p>
-<p class="p6"><span class="s1">e.reset;<span class="Apple-converted-space"> </span></span>// reset the stream.</p>
-<p class="p7"><br></p>
-<p class="p6"><span class="s1">e.pause;<span class="Apple-converted-space"> </span></span>// will resume where paused.</p>
-<p class="p7"><br></p>
-<p class="p8">e.play;</p>
-<p class="p7"><br></p>
-<p class="p6"><span class="s1">e.stop;<span class="Apple-converted-space"> </span></span>// will reset before resume.</p>
-<p class="p7"><br></p>
-<p class="p8">e.play;</p>
-<p class="p7"><br></p>
-<p class="p2"><br></p>
-<p class="p2"><br></p>
-<p class="p2"><br></p>
-<p class="p3">Another example with a different SynthDef:</p>
-<p class="p7"><br></p>
-<p class="p8">(</p>
-<p class="p8"><span class="s5">SynthDef</span>(<span class="s6">\berlinb</span>, { <span class="s5">arg</span> out=0, freq = 80, amp = 0.01, pan=0, gate=1;</p>
-<p class="p8"><span class="Apple-tab-span"> </span><span class="s5">var</span> synth, env;</p>
-<p class="p8"><span class="Apple-tab-span"> </span>env = <span class="s5">Decay2</span>.kr(gate, 0.05, 8, 0.0003);</p>
-<p class="p8"><span class="Apple-tab-span"> </span>synth = <span class="s5">RLPF</span>.ar(</p>
-<p class="p8"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="s5">LFPulse</span>.ar(freq, 0, <span class="s5">SinOsc</span>.kr(0.12,[0,0.5pi],0.48,0.5)),</p>
-<p class="p8"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span>freq * <span class="s5">SinOsc</span>.kr(0.21,0,18,20),</p>
-<p class="p8"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span>0.07</p>
-<p class="p8"><span class="Apple-tab-span"> </span>);</p>
-<p class="p8"><span class="Apple-tab-span"> </span>#a, b = synth*env;</p>
-<p class="p8"><span class="Apple-tab-span"> </span><span class="s5">DetectSilence</span>.ar(a, 0.1, doneAction: 2);</p>
-<p class="p8"><span class="Apple-tab-span"> </span><span class="s5">Out</span>.ar(out, <span class="s5">Mix</span>.ar(<span class="s5">PanAz</span>.ar(4, [a,b], [pan, pan+1])));</p>
-<p class="p8">}).store;</p>
-<p class="p8">)</p>
-<p class="p7"><br></p>
-<p class="p8">(</p>
-<p class="p8">f = <span class="s5">Pbind</span>(</p>
-<p class="p8"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="s6">\degree</span>, <span class="s5">Pseq</span>([0,1,2,4,6,3,4,8],<span class="s5">inf</span>),<span class="Apple-converted-space"> </span></p>
-<p class="p10"><span class="s1"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span></span>\dur<span class="s1">, 0.5, </span>\octave<span class="s1">, 3, </span>\instrument<span class="s1">, </span>\berlinb</p>
-<p class="p8">).play;</p>
-<p class="p8">)</p>
-<p class="p7"><br></p>
-<p class="p8">(</p>
-<p class="p8">f.stream = <span class="s5">Pbind</span>(</p>
-<p class="p8"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="s6">\degree</span>, <span class="s5">Pseq</span>([0,1,2,4,6,3,4,8],<span class="s5">inf</span>),<span class="Apple-converted-space"> </span></p>
-<p class="p8"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="s6">\dur</span>, 0.5, <span class="s6">\octave</span>, [2,1],</p>
-<p class="p10"><span class="s1"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span></span>\instrument<span class="s1">, </span>\berlinb<span class="s1">,<span class="Apple-converted-space"> </span></span></p>
-<p class="p8"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="s6">\pan</span>, <span class="s5">Pfunc</span>({1.0.rand2})<span class="Apple-converted-space"> </span></p>
-<p class="p8">).asStream;</p>
-<p class="p3">)</p>
-<p class="p2"><br></p>
-<p class="p2"><br></p>
-<p class="p2"><br></p>
-<p class="p3"><b>Additional arguments</b></p>
-<p class="p3">Here is an example with more bindings.<span class="Apple-converted-space"> </span>Here we have added a filter with cutoff and resonance arguments.</p>
-<p class="p3">You will need to hit command '.' before executing the next few pbind ex. without having them stack up.</p>
-<p class="p3">also, due to the synthdef's and synthdeclib, if the server is shut down you will have to reload the<span class="Apple-converted-space"> </span></p>
-<p class="p3">synthdef and re-read the synthdesclib.<span class="Apple-converted-space"> </span></p>
-<p class="p2"><br></p>
-<p class="p8">(</p>
-<p class="p8"><span class="s5">SynthDef</span>(<span class="s2">"acid"</span>, { <span class="s5">arg</span> out, freq = 1000, gate = 1, pan = 1, cut = 4000, rez = 0.8, amp = 1;</p>
-<p class="p8"><span class="Apple-tab-span"> </span><span class="s5">Out</span>.ar(out,</p>
-<p class="p8"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="s5">Pan2</span>.ar(</p>
-<p class="p8"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="s5">RLPF</span>.ar(</p>
-<p class="p8"><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="s5">Pulse</span>.ar(freq,0.05),</p>
-<p class="p8"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span>cut, rez),</p>
-<p class="p8"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span>pan) * <span class="s5">EnvGen</span>.kr(<span class="s5">Env</span>.linen(0.01, 1, 0.3), gate, amp, doneAction:2);</p>
-<p class="p8"><span class="Apple-tab-span"> </span>)<span class="Apple-converted-space"> </span></p>
-<p class="p8">}).store;</p>
-<p class="p8">)</p>
-<p class="p7"><br></p>
-<p class="p8">(</p>
-<p class="p8"><span class="s5">Pbind</span>(<span class="s6">\instrument</span>,<span class="s6">\acid</span>, <span class="s6">\dur</span>,<span class="s5">Pseq</span>([0.25,0.5,0.25],<span class="s5">inf</span>), <span class="s6">\root</span>,-12,</p>
-<p class="p8"><span class="Apple-tab-span"> </span><span class="s6">\degree</span>,<span class="s5">Pseq</span>([0,3,5,7,9,11,5,1],<span class="s5">inf</span>), <span class="s6">\pan</span>,<span class="s5">Pfunc</span>({1.0.rand2}),</p>
-<p class="p8"><span class="Apple-tab-span"> </span><span class="s6">\cut</span>,<span class="s5">Pxrand</span>([1000,500,2000,300],<span class="s5">inf</span>), <span class="s6">\rez</span>,<span class="s5">Pfunc</span>({0.7.rand +0.3}), <span class="s6">\amp</span>,0.2).play;</p>
-<p class="p8">)</p>
-<p class="p7"><br></p>
-<p class="p7"><br></p>
-<p class="p3">The <b>ListPatterns</b> can be put around Event Streams to create sequences of Event Streams.</p>
-<p class="p8">(</p>
-<p class="p9">Pseq<span class="s1">([</span></p>
-<p class="p8"><span class="Apple-tab-span"> </span><span class="s5">Pbind</span>(<span class="s6">\instrument</span>,<span class="s6">\acid</span>, <span class="s6">\dur</span>,<span class="s5">Pseq</span>([0.25,0.5,0.25],4), <span class="s6">\root</span>,-24,</p>
-<p class="p8"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="s6">\degree</span>,<span class="s5">Pseq</span>([0,3,5,7,9,11,5,1],<span class="s5">inf</span>), <span class="s6">\pan</span>,<span class="s5">Pfunc</span>({1.0.rand2}),</p>
-<p class="p8"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="s6">\cut</span>,<span class="s5">Pxrand</span>([1000,500,2000,300],<span class="s5">inf</span>),<span class="s6">\rez</span>,<span class="s5">Pfunc</span>({0.7.rand +0.3}), <span class="s6">\amp</span>,0.2),</p>
-<p class="p7"><br></p>
-<p class="p8"><span class="Apple-tab-span"> </span><span class="s5">Pbind</span>(<span class="s6">\instrument</span>,<span class="s6">\acid</span>, <span class="s6">\dur</span>,<span class="s5">Pseq</span>([0.25],6), <span class="s6">\root</span>,-24, <span class="s6">\degree</span>,<span class="s5">Pseq</span>([18,17,11,9],<span class="s5">inf</span>),</p>
-<p class="p8"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="s6">\pan</span>,<span class="s5">Pfunc</span>({1.0.rand2}),<span class="s6">\cut</span>,1500, <span class="s6">\rez</span>,<span class="s5">Pfunc</span>({0.7.rand +0.3}), <span class="s6">\amp</span>,0.16)</p>
-<p class="p7"><br></p>
-<p class="p8">],<span class="s5">inf</span>).play;</p>
-<p class="p8">)</p>
-<p class="p2"><br></p>
-<p class="p3">'<b>Pseq</b>' in the above ex. can be any pattern object:</p>
-<p class="p8">(</p>
-<p class="p9">Prand<span class="s1">([</span></p>
-<p class="p8"><span class="Apple-tab-span"> </span><span class="s5">Pbind</span>(<span class="s6">\instrument</span>,<span class="s6">\acid</span>, <span class="s6">\dur</span>,<span class="s5">Pseq</span>([0.25,0.5,0.25],4), <span class="s6">\root</span>,-24,</p>
-<p class="p8"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="s6">\degree</span>,<span class="s5">Pseq</span>([0,3,5,7,9,11,5,1],<span class="s5">inf</span>),<span class="s6">\pan</span>,<span class="s5">Pfunc</span>({1.0.rand2}),</p>
-<p class="p8"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="s6">\cut</span>,<span class="s5">Pxrand</span>([1000,500,2000,300],<span class="s5">inf</span>), <span class="s6">\rez</span>,<span class="s5">Pfunc</span>({0.7.rand +0.3}),<span class="Apple-converted-space"> </span></p>
-<p class="p8"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="s6">\amp</span>,0.2),</p>
-<p class="p7"><br></p>
-<p class="p8"><span class="Apple-tab-span"> </span><span class="s5">Pbind</span>(<span class="s6">\instrument</span>,<span class="s6">\acid</span>, <span class="s6">\dur</span>,<span class="s5">Pseq</span>([0.25],6), <span class="s6">\root</span>,-24, <span class="s6">\degree</span>,<span class="s5">Pseq</span>([18,17,11,9],<span class="s5">inf</span>), <span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="s6">\pan</span>,<span class="s5">Pfunc</span>({1.0.rand2}),<span class="s6">\cut</span>,1500, <span class="s6">\rez</span>,<span class="s5">Pfunc</span>({0.7.rand +0.3}), <span class="s6">\amp</span>,0.16)</p>
-<p class="p7"><br></p>
-<p class="p8">],<span class="s5">inf</span>).play;</p>
-<p class="p8">)</p>
-<p class="p7"><br></p>
-<p class="p7"><br></p>
-<p class="p2"><br></p>
-<p class="p3"><b>Multichannel Expansion.</b></p>
-<p class="p3">If we supply an array for any argument, the synth node will<span class="Apple-converted-space"> </span></p>
-<p class="p3">automatically replicate to handle the additional arguments.</p>
-<p class="p3">When we give the 'root' argument an array, we should hear a chord....</p>
-<p class="p2"><br></p>
-<p class="p8">(</p>
-<p class="p9">Pbind<span class="s1">(</span></p>
-<p class="p8"><span class="Apple-tab-span"> </span><span class="s6">\instrument</span>,<span class="s6">\acid</span>, <span class="s6">\dur</span>,<span class="s5">Pseq</span>([0.25,0.5,0.25],<span class="s5">inf</span>),<span class="Apple-converted-space"> </span></p>
-<p class="p8"><span class="Apple-tab-span"> </span><span class="s6">\root</span>,[-24,-17],<span class="Apple-converted-space"> </span></p>
-<p class="p8"><span class="Apple-tab-span"> </span><span class="s6">\degree</span>,<span class="s5">Pseq</span>([0,3,5,7,9,11,5,1],<span class="s5">inf</span>),<span class="Apple-converted-space"> </span></p>
-<p class="p8"><span class="Apple-tab-span"> </span><span class="s6">\pan</span>,<span class="s5">Pfunc</span>({1.0.rand2}),<span class="s6">\cut</span>,<span class="s5">Pxrand</span>([1000,500,2000,300],<span class="s5">inf</span>), <span class="s6">\rez</span>,<span class="s5">Pfunc</span>({0.7.rand +0.3}),</p>
-<p class="p8"><span class="Apple-tab-span"> </span><span class="s6">\amp</span>,0.2).play;</p>
-<p class="p7"><br></p>
-<p class="p8">)</p>
-<p class="p7"><br></p>
-<p class="p7"><br></p>
-<p class="p3">Using <a href="../Libraries/JITLib/Patterns/Pdef.html"><span class="s7">Pdef</span></a> (JITLib) makes it easy to replace patterns on the fly:</p>
-<p class="p7"><br></p>
-<p class="p7"><br></p>
-<p class="p8">(</p>
-<p class="p10"><span class="s5">Pdef</span><span class="s1">(</span>\buckyball<span class="s1">).play;</span></p>
-<p class="p8">)</p>
-<p class="p7"><br></p>
-<p class="p8">(</p>
-<p class="p8"><span class="s5">Pdef</span>(<span class="s6">\buckyball</span>, <span class="s5">Pbind</span>(<span class="s6">\instrument</span>,<span class="s6">\acid</span>, <span class="s6">\dur</span>,<span class="s5">Pseq</span>([0.25,0.5,0.25],<span class="s5">inf</span>), <span class="s6">\root</span>,[-24,-17],<span class="Apple-converted-space"> </span></p>
-<p class="p8"><span class="Apple-tab-span"> </span><span class="s6">\degree</span>,<span class="s5">Pseq</span>([0,3,5,7,9,11,[5,17],1],<span class="s5">inf</span>), <span class="s6">\pan</span>,<span class="s5">Pfunc</span>({[1.0.rand2,1.0.rand2]}),</p>
-<p class="p8"><span class="Apple-tab-span"> </span><span class="s6">\cut</span>,<span class="s5">Pxrand</span>([1000,500,2000,300],<span class="s5">inf</span>), <span class="s6">\rez</span>,<span class="s5">Pfunc</span>({0.7.rand +0.3}), <span class="s6">\amp</span>,[0.15,0.22]));</p>
-<p class="p8">)</p>
-<p class="p8">(</p>
-<p class="p8"><span class="s5">Pdef</span>(<span class="s6">\buckyball</span>, <span class="s5">Pbind</span>(<span class="s6">\instrument</span>,<span class="s6">\acid</span>, <span class="s6">\dur</span>,<span class="s5">Pseq</span>([0.25,0.5,0.25],<span class="s5">inf</span>), <span class="s6">\root</span>,[-24,-17],<span class="Apple-converted-space"> </span></p>
-<p class="p8"><span class="Apple-tab-span"> </span><span class="s6">\degree</span>,<span class="s5">Pseq</span>([0b,3b,5b,7b,9b,11b,5b,0b],<span class="s5">inf</span>), <span class="s6">\pan</span>,<span class="s5">Pfunc</span>({1.0.rand2}),<span class="Apple-converted-space"> </span><span class="s8">//notice the flats</span></p>
-<p class="p8"><span class="Apple-tab-span"> </span><span class="s6">\cut</span>,<span class="s5">Pxrand</span>([1000,500,2000,300],<span class="s5">inf</span>), <span class="s6">\rez</span>,<span class="s5">Pfunc</span>({0.7.rand +0.3}), <span class="s6">\amp</span>,0.2));</p>
-<p class="p8">)</p>
-<p class="p7"><br></p>
-<p class="p6">//stop the Pdef</p>
-<p class="p10"><span class="s5">Pdef</span><span class="s1">(</span>\buckyball<span class="s1">).stop;</span></p>
-<p class="p7"><br></p>
-<p class="p6">//start the Pdef</p>
-<p class="p8"><span class="s5">Pdef</span>(<span class="s6">\buckyball</span>).resume;</p>
-<p class="p7"><br></p>
-<p class="p6">//removing the Pdef</p>
-<p class="p11">Pdef.remove(\buckyball);</p>
-<p class="p7"><br></p>
-<p class="p2"><br></p>
-<p class="p3"><b>Sending to effects.</b></p>
-<p class="p3">Assignment to effect processors can be achieved by setting the 'out' argument to the desired</p>
-<p class="p3">efx's input bus.<span class="Apple-converted-space"> </span>The effect Synth must also be created.<span class="Apple-converted-space"> </span>Synth.new is one way of doing this.</p>
-<p class="p2"><br></p>
-<p class="p8">(</p>
-<p class="p6">//efx synthdef- dig the timing on the delay and the pbind.<span class="Apple-converted-space"> </span>:-P</p>
-<p class="p8"><span class="s5">SynthDef</span>(<span class="s2">"pbindefx"</span>, { <span class="s5">arg</span> out, in, time1=0.25, time2=0.5; <span class="Apple-converted-space"> <span class="Apple-tab-span"> </span></span></p>
-<p class="p8"><span class="Apple-tab-span"> </span>var audio, efx;</p>
-<p class="p8"><span class="Apple-tab-span"> </span>audio = <span class="s5">In</span>.ar([20,21],2);</p>
-<p class="p8"><span class="Apple-tab-span"> </span>efx=<span class="s5">CombN</span>.ar(audio, 0.5, [time1,time2], 10, 1, audio); <span class="Apple-converted-space"> <span class="Apple-tab-span"> </span></span></p>
-<p class="p8"><span class="Apple-tab-span"> </span><span class="s5">Out</span>.ar(out, <span class="s5">efx</span>);</p>
-<p class="p8">}).store;</p>
-<p class="p12"><br></p>
-<p class="p6">//create efx synth</p>
-<p class="p8"><span class="s5">a = Synth</span>.after(1, <span class="s2">"pbindefx"</span>);</p>
-<p class="p12"><br></p>
-<p class="p6">//if you don't like the beats change to 0.4,0.24</p>
-<p class="p6">//a.set(\time1,0.4, \time2,0.24);</p>
-<p class="p7"><br></p>
-<p class="p8"><span class="s5">SynthDef</span>(<span class="s2">"acid"</span>, { <span class="s5">arg</span> out, freq = 1000, gate = 1, pan = 0, cut = 4000, rez = 0.8, amp = 1;</p>
-<p class="p8"><span class="Apple-tab-span"> </span><span class="s5">Out</span>.ar(out,</p>
-<p class="p8"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="s5">Pan2</span>.ar(</p>
-<p class="p8"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="s5">RLPF</span>.ar(</p>
-<p class="p8"><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="s5">Pulse</span>.ar(freq,0.05),</p>
-<p class="p8"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span>cut, rez),</p>
-<p class="p8"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span>pan) * <span class="s5">EnvGen</span>.kr(<span class="s5">Env</span>.linen(0.02, 1, 0.3), gate, amp, doneAction:2);</p>
-<p class="p8"><span class="Apple-tab-span"> </span>)<span class="Apple-converted-space"> </span></p>
-<p class="p8">}).store;</p>
-<p class="p7"><br></p>
-<p class="p8"><span class="s5">SynthDescLib</span>.global.read;</p>
-<p class="p7"><br></p>
-<p class="p8">)</p>
-<p class="p7"><br></p>
-<p class="p7"><br></p>
-<p class="p8">(</p>
-<p class="p8"><span class="s5">Pbind</span>(<span class="s6">\instrument</span>,<span class="s6">\acid</span>, <span class="s6">\out</span>, 20, <span class="s6">\dur</span>,<span class="s5">Pseq</span>([0.25,0.5,0.25],<span class="s5">inf</span>), <span class="s6">\root</span>,[-24,-17],</p>
-<p class="p8"><span class="Apple-tab-span"> </span><span class="s6">\degree</span>,<span class="s5">Pseq</span>([0,3,5,7,9,11,5,1],<span class="s5">inf</span>), <span class="s6">\pan</span>,<span class="s5">Pfunc</span>({1.0.rand2}),</p>
-<p class="p8"><span class="Apple-tab-span"> </span><span class="s6">\cut</span>,<span class="s5">Pxrand</span>([1000,500,2000,300],<span class="s5">inf</span>), <span class="s6">\rez</span>,<span class="s5">Pfunc</span>({0.7.rand +0.3}), <span class="s6">\amp</span>,0.12).play;</p>
-<p class="p8">)</p>
-<p class="p2"><br></p>
-<p class="p2"><br></p>
+<p class="p1">The EventStreamPlayer provides realtime control through <b>mute</b>, <b>unmute</b>, <b>stop, play </b>and <b>reset</b>. <span class="Apple-converted-space"> </span></p>
+<p class="p14"><br></p>
+<p class="p15">(</p>
+<p class="p15"><span class="s9">SynthDef</span>(<span class="s10">\cfstring1</span>, { <span class="s9">arg</span> i_out, freq = 360, gate = 1, pan, amp=0.1;</p>
+<p class="p15"><span class="Apple-tab-span"> </span><span class="s9">var</span> out, eg, fc, osc, a, b, w;</p>
+<p class="p15"><span class="Apple-tab-span"> </span>fc = <span class="s9">LinExp</span>.kr(<span class="s9">LFNoise1</span>.kr(<span class="s9">Rand</span>(0.25,0.4)), -1,1,500,2000);</p>
+<p class="p15"><span class="Apple-tab-span"> </span>osc = <span class="s9">Mix</span>.fill(8, {<span class="s9">LFSaw</span>.ar(freq * [<span class="s9">Rand</span>(0.99,1.01),<span class="s9">Rand</span>(0.99,1.01)], 0, amp) }).distort * 0.2;</p>
+<p class="p15"><span class="Apple-tab-span"> </span>eg = <span class="s9">EnvGen</span>.kr(<span class="s9">Env</span>.asr(1,1,1), gate, doneAction:2);</p>
+<p class="p15"><span class="Apple-tab-span"> </span>out = eg * <span class="s9">RLPF</span>.ar(osc, fc, 0.1);</p>
+<p class="p15"><span class="Apple-tab-span"> </span>#a, b = out;</p>
+<p class="p15"><span class="Apple-tab-span"> </span><span class="s9">Out</span>.ar(i_out, <span class="s9">Mix</span>.ar(<span class="s9">PanAz</span>.ar(4, [a, b], [pan, pan+0.3])));</p>
+<p class="p15">}).store;</p>
+<p class="p14"><br></p>
+<p class="p15">e = <span class="s9">Pbind</span>(</p>
+<p class="p15"><span class="Apple-tab-span"> </span><span class="s10">\degree</span>, <span class="s9">Pseq(</span>(0..12),inf),<span class="Apple-converted-space"> </span></p>
+<p class="p15"><span class="Apple-tab-span"> </span><span class="s10">\dur</span>, 0.2,<span class="Apple-converted-space"> </span></p>
+<p class="p16"><span class="s2"><span class="Apple-tab-span"> </span></span>\instrument<span class="s2">, </span>\cfstring1</p>
+<p class="p17"><span class="s2">).play; </span>// returns an EventStream</p>
+<p class="p15">)</p>
+<p class="p14"><br></p>
+<p class="p17">( // an interactive session</p>
+<p class="p17">e.stop</p>
+<p class="p17">e.play</p>
+<p class="p17">e.reset</p>
+<p class="p14"><br></p>
+<p class="p17"><span class="s2">e.mute; </span>// keeps playing, but replaces notes with rests</p>
+<p class="p14"><br></p>
+<p class="p15">e.unmute;</p>
+<p class="p14"><br></p>
+<p class="p17"><span class="s2">e.reset;<span class="Apple-converted-space"> </span></span>// reset the stream.</p>
+<p class="p17"><span class="s2">e.reset;<span class="Apple-converted-space"> </span></span>// reset the stream.</p>
+<p class="p17"><span class="s2">e.reset;<span class="Apple-converted-space"> </span></span>// reset the stream.</p>
+<p class="p17"><span class="s2">e.reset;<span class="Apple-converted-space"> </span></span>// reset the stream.</p>
+<p class="p14"><br></p>
+<p class="p17"><span class="s2">e.pause;<span class="Apple-converted-space"> </span></span>// will resume where paused.</p>
+<p class="p14"><br></p>
+<p class="p15">e.play;</p>
+<p class="p14"><br></p>
+<p class="p17"><span class="s2">e.stop;<span class="Apple-converted-space"> </span></span>// will reset before resume.</p>
+<p class="p14"><br></p>
+<p class="p15">e.play;</p>
+<p class="p18"><br></p>
+<p class="p17">)</p>
+<p class="p18"><br></p>
+<p class="p1">In addition, the stream the EventStreamPlayer plays can be altered while it is running through the method</p>
+<p class="p1"><b>stream_(aStream)</b>.</p>
+<p class="p14"><br></p>
+<p class="p15">(</p>
+<p class="p15">e.stream = <span class="s9">Pbind</span>(</p>
+<p class="p15"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="s10">\degree</span>, <span class="s9">Pseq</span>([0,1,2,4,6,3,4,8],<span class="s9">inf</span>),<span class="Apple-converted-space"> </span></p>
+<p class="p15"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="s10">\dur</span>, <span class="s9">Prand</span>([0.2,0.4,0.8],<span class="s9">inf</span>),<span class="Apple-converted-space"> </span></p>
+<p class="p15"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="s10">\amp</span>, 0.05, <span class="s10">\octave</span>, 5,<span class="Apple-converted-space"> </span></p>
+<p class="p16"><span class="s2"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span></span>\instrument<span class="s2">, </span>\cfstring1<span class="s2">, </span>\ctranspose<span class="s2">, 0</span></p>
+<p class="p15">).asStream;</p>
+<p class="p15">)</p>
+<p class="p14"><br></p>
+<p class="p15">(</p>
+<p class="p15">e.stream = <span class="s9">Pbind</span>(</p>
+<p class="p15"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="s10">\degree</span>, <span class="s9">Pseq</span>([0,1,2,4,6,3,4,8],<span class="s9">inf</span>),<span class="Apple-converted-space"> </span></p>
+<p class="p15"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="s10">\dur</span>, <span class="s9">Prand</span>([0.2,0.4,0.8],<span class="s9">inf</span>),<span class="Apple-converted-space"> </span></p>
+<p class="p15"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="s10">\amp</span>, 0.05, <span class="s10">\octave</span>, 5,<span class="Apple-converted-space"> </span></p>
+<p class="p16"><span class="s2"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span></span>\instrument<span class="s2">, </span>\cfstring1<span class="s2">, </span>\ctranspose<span class="s2">, 0</span></p>
+<p class="p15">).asStream;</p>
+<p class="p15">)</p>
+<p class="p14"><br></p>
+<p class="p15">(</p>
+<p class="p15">e.stream = <span class="s9">Pbind</span>(</p>
+<p class="p15"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="s10">\degree</span>, <span class="s9">Pxrand</span>([0,1,2,4,6,3,5,7,8],<span class="s9">inf</span>),<span class="Apple-converted-space"> </span></p>
+<p class="p15"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="s10">\dur</span>, <span class="s9">Prand</span>([0.2,0.4,0.8],<span class="s9">inf</span>), <span class="s10">\amp</span>, 0.05,<span class="Apple-converted-space"> </span></p>
+<p class="p16"><span class="s2"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span></span>\octave<span class="s2">, 5, </span>\instrument<span class="s2">, </span>\cfstring1</p>
+<p class="p15">).asStream;</p>
+<p class="p15">)</p>
+<p class="p3"><br></p>
+<p class="p14"><br></p>
+<p class="p14"><br></p>
+<p class="p11"><b>Additional examples:</b></p>
+<p class="p14"><br></p>
+<p class="p15">(</p>
+<p class="p15"><span class="s9">SynthDef</span>(<span class="s10">\berlinb</span>, { <span class="s9">arg</span> out=0, freq = 80, amp = 0.01, pan=0, gate=1;</p>
+<p class="p15"><span class="Apple-tab-span"> </span><span class="s9">var</span> synth, env;</p>
+<p class="p15"><span class="Apple-tab-span"> </span>env = <span class="s9">Decay2</span>.kr(gate, 0.05, 8, 0.0003);</p>
+<p class="p15"><span class="Apple-tab-span"> </span>synth = <span class="s9">RLPF</span>.ar(</p>
+<p class="p15"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="s9">LFPulse</span>.ar(freq, 0, <span class="s9">SinOsc</span>.kr(0.12,[0,0.5pi],0.48,0.5)),</p>
+<p class="p15"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span>freq * <span class="s9">SinOsc</span>.kr(0.21,0,18,20),</p>
+<p class="p15"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span>0.07</p>
+<p class="p15"><span class="Apple-tab-span"> </span>);</p>
+<p class="p15"><span class="Apple-tab-span"> </span>#a, b = synth*env;</p>
+<p class="p15"><span class="Apple-tab-span"> </span><span class="s9">DetectSilence</span>.ar(a, 0.1, doneAction: 2);</p>
+<p class="p15"><span class="Apple-tab-span"> </span><span class="s9">Out</span>.ar(out, <span class="s9">Mix</span>.ar(<span class="s9">PanAz</span>.ar(4, [a,b], [pan, pan+1])));</p>
+<p class="p15">}).store;</p>
+<p class="p15">)</p>
+<p class="p14"><br></p>
+<p class="p15">(</p>
+<p class="p15">f = <span class="s9">Pbind</span>(</p>
+<p class="p15"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="s10">\degree</span>, <span class="s9">Pseq</span>([0,1,2,4,6,3,4,8],<span class="s9">inf</span>),<span class="Apple-converted-space"> </span></p>
+<p class="p16"><span class="s2"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span></span>\dur<span class="s2">, 0.5, </span>\octave<span class="s2">, 3, </span>\instrument<span class="s2">, </span>\berlinb</p>
+<p class="p15">).play;</p>
+<p class="p15">)</p>
+<p class="p14"><br></p>
+<p class="p15">(</p>
+<p class="p15">f.stream = <span class="s9">Pbind</span>(</p>
+<p class="p15"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="s10">\degree</span>, <span class="s9">Pseq</span>([0,1,2,4,6,3,4,8],<span class="s9">inf</span>),<span class="Apple-converted-space"> </span></p>
+<p class="p15"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="s10">\dur</span>, 0.5, <span class="s10">\octave</span>, [2,1],</p>
+<p class="p16"><span class="s2"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span></span>\instrument<span class="s2">, </span>\berlinb<span class="s2">,<span class="Apple-converted-space"> </span></span></p>
+<p class="p15"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="s10">\pan</span>, <span class="s9">Pfunc</span>({1.0.rand2})<span class="Apple-converted-space"> </span></p>
+<p class="p15">).asStream;</p>
+<p class="p1">)</p>
+<p class="p3"><br></p>
+<p class="p1"><b>Additional arguments</b></p>
+<p class="p1">Here is an example with more bindings.<span class="Apple-converted-space"> </span>Here we have added a filter with cutoff and resonance arguments.</p>
+<p class="p1">You will need to hit command '.' before executing the next few pbind ex. without having them stack up.</p>
+<p class="p1">also, due to the synthdef's and synthdeclib, if the server is shut down you will have to reload the<span class="Apple-converted-space"> </span></p>
+<p class="p1">synthdef and re-read the synthdesclib.<span class="Apple-converted-space"> </span></p>
+<p class="p3"><br></p>
+<p class="p15">(</p>
+<p class="p15"><span class="s9">SynthDef</span>(<span class="s4">"acid"</span>, { <span class="s9">arg</span> out, freq = 1000, gate = 1, pan = 1, cut = 4000, rez = 0.8, amp = 1;</p>
+<p class="p15"><span class="Apple-tab-span"> </span><span class="s9">Out</span>.ar(out,</p>
+<p class="p15"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="s9">Pan2</span>.ar(</p>
+<p class="p15"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="s9">RLPF</span>.ar(</p>
+<p class="p15"><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="s9">Pulse</span>.ar(freq,0.05),</p>
+<p class="p15"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span>cut, rez),</p>
+<p class="p15"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span>pan) * <span class="s9">EnvGen</span>.kr(<span class="s9">Env</span>.linen(0.01, 1, 0.3), gate, amp, doneAction:2);</p>
+<p class="p15"><span class="Apple-tab-span"> </span>)<span class="Apple-converted-space"> </span></p>
+<p class="p15">}).store;</p>
+<p class="p15">)</p>
+<p class="p14"><br></p>
+<p class="p15">(</p>
+<p class="p15"><span class="s9">Pbind</span>(<span class="s10">\instrument</span>,<span class="s10">\acid</span>, <span class="s10">\dur</span>,<span class="s9">Pseq</span>([0.25,0.5,0.25],<span class="s9">inf</span>), <span class="s10">\root</span>,-12,</p>
+<p class="p15"><span class="Apple-tab-span"> </span><span class="s10">\degree</span>,<span class="s9">Pseq</span>([0,3,5,7,9,11,5,1],<span class="s9">inf</span>), <span class="s10">\pan</span>,<span class="s9">Pfunc</span>({1.0.rand2}),</p>
+<p class="p15"><span class="Apple-tab-span"> </span><span class="s10">\cut</span>,<span class="s9">Pxrand</span>([1000,500,2000,300],<span class="s9">inf</span>), <span class="s10">\rez</span>,<span class="s9">Pfunc</span>({0.7.rand +0.3}), <span class="s10">\amp</span>,0.2).play;</p>
+<p class="p15">)</p>
+<p class="p14"><br></p>
+<p class="p14"><br></p>
+<p class="p1">The <b>ListPatterns</b> can be put around Event Streams to create sequences of Event Streams.</p>
+<p class="p15">(</p>
+<p class="p19">Pseq<span class="s2">([</span></p>
+<p class="p15"><span class="Apple-tab-span"> </span><span class="s9">Pbind</span>(<span class="s10">\instrument</span>,<span class="s10">\acid</span>, <span class="s10">\dur</span>,<span class="s9">Pseq</span>([0.25,0.5,0.25],4), <span class="s10">\root</span>,-24,</p>
+<p class="p15"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="s10">\degree</span>,<span class="s9">Pseq</span>([0,3,5,7,9,11,5,1],<span class="s9">inf</span>), <span class="s10">\pan</span>,<span class="s9">Pfunc</span>({1.0.rand2}),</p>
+<p class="p15"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="s10">\cut</span>,<span class="s9">Pxrand</span>([1000,500,2000,300],<span class="s9">inf</span>),<span class="s10">\rez</span>,<span class="s9">Pfunc</span>({0.7.rand +0.3}), <span class="s10">\amp</span>,0.2),</p>
+<p class="p14"><br></p>
+<p class="p15"><span class="Apple-tab-span"> </span><span class="s9">Pbind</span>(<span class="s10">\instrument</span>,<span class="s10">\acid</span>, <span class="s10">\dur</span>,<span class="s9">Pseq</span>([0.25],6), <span class="s10">\root</span>,-24, <span class="s10">\degree</span>,<span class="s9">Pseq</span>([18,17,11,9],<span class="s9">inf</span>),</p>
+<p class="p15"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="s10">\pan</span>,<span class="s9">Pfunc</span>({1.0.rand2}),<span class="s10">\cut</span>,1500, <span class="s10">\rez</span>,<span class="s9">Pfunc</span>({0.7.rand +0.3}), <span class="s10">\amp</span>,0.16)</p>
+<p class="p14"><br></p>
+<p class="p15">],<span class="s9">inf</span>).play;</p>
+<p class="p15">)</p>
+<p class="p3"><br></p>
+<p class="p1">'<b>Pseq</b>' in the above ex. can be any pattern object:</p>
+<p class="p15">(</p>
+<p class="p19">Prand<span class="s2">([</span></p>
+<p class="p15"><span class="Apple-tab-span"> </span><span class="s9">Pbind</span>(<span class="s10">\instrument</span>,<span class="s10">\acid</span>, <span class="s10">\dur</span>,<span class="s9">Pseq</span>([0.25,0.5,0.25],4), <span class="s10">\root</span>,-24,</p>
+<p class="p15"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="s10">\degree</span>,<span class="s9">Pseq</span>([0,3,5,7,9,11,5,1],<span class="s9">inf</span>),<span class="s10">\pan</span>,<span class="s9">Pfunc</span>({1.0.rand2}),</p>
+<p class="p15"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="s10">\cut</span>,<span class="s9">Pxrand</span>([1000,500,2000,300],<span class="s9">inf</span>), <span class="s10">\rez</span>,<span class="s9">Pfunc</span>({0.7.rand +0.3}),<span class="Apple-converted-space"> </span></p>
+<p class="p15"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="s10">\amp</span>,0.2),</p>
+<p class="p14"><br></p>
+<p class="p15"><span class="Apple-tab-span"> </span><span class="s9">Pbind</span>(<span class="s10">\instrument</span>,<span class="s10">\acid</span>, <span class="s10">\dur</span>,<span class="s9">Pseq</span>([0.25],6), <span class="s10">\root</span>,-24, <span class="s10">\degree</span>,<span class="s9">Pseq</span>([18,17,11,9],<span class="s9">inf</span>), <span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="s10">\pan</span>,<span class="s9">Pfunc</span>({1.0.rand2}),<span class="s10">\cut</span>,1500, <span class="s10">\rez</span>,<span class="s9">Pfunc</span>({0.7.rand +0.3}), <span class="s10">\amp</span>,0.16)</p>
+<p class="p14"><br></p>
+<p class="p15">],<span class="s9">inf</span>).play;</p>
+<p class="p15">)</p>
+<p class="p3"><br></p>
+<p class="p1"><b>Multichannel Expansion.</b></p>
+<p class="p1">If we supply an array for any argument, the synth node will<span class="Apple-converted-space"> </span></p>
+<p class="p1">automatically replicate to handle the additional arguments.</p>
+<p class="p1">When we give the 'root' argument an array, we should hear a chord....</p>
+<p class="p3"><br></p>
+<p class="p15">(</p>
+<p class="p19">Pbind<span class="s2">(</span></p>
+<p class="p15"><span class="Apple-tab-span"> </span><span class="s10">\instrument</span>,<span class="s10">\acid</span>, <span class="s10">\dur</span>,<span class="s9">Pseq</span>([0.25,0.5,0.25],<span class="s9">inf</span>),<span class="Apple-converted-space"> </span></p>
+<p class="p15"><span class="Apple-tab-span"> </span><span class="s10">\root</span>,[-24,-17],<span class="Apple-converted-space"> </span></p>
+<p class="p15"><span class="Apple-tab-span"> </span><span class="s10">\degree</span>,<span class="s9">Pseq</span>([0,3,5,7,9,11,5,1],<span class="s9">inf</span>),<span class="Apple-converted-space"> </span></p>
+<p class="p15"><span class="Apple-tab-span"> </span><span class="s10">\pan</span>,<span class="s9">Pfunc</span>({1.0.rand2}),<span class="s10">\cut</span>,<span class="s9">Pxrand</span>([1000,500,2000,300],<span class="s9">inf</span>), <span class="s10">\rez</span>,<span class="s9">Pfunc</span>({0.7.rand +0.3}),</p>
+<p class="p15"><span class="Apple-tab-span"> </span><span class="s10">\amp</span>,0.2).play;</p>
+<p class="p14"><br></p>
+<p class="p15">)</p>
+<p class="p14"><br></p>
+<p class="p14"><br></p>
+<p class="p1">Using <a href="../Libraries/JITLib/Patterns/Pdef.html"><span class="s11">Pdef</span></a> (JITLib) makes it easy to replace patterns on the fly:</p>
+<p class="p14"><br></p>
+<p class="p14"><br></p>
+<p class="p15">(</p>
+<p class="p16"><span class="s9">Pdef</span><span class="s2">(</span>\buckyball<span class="s2">).play;</span></p>
+<p class="p15">)</p>
+<p class="p14"><br></p>
+<p class="p15">(</p>
+<p class="p15"><span class="s9">Pdef</span>(<span class="s10">\buckyball</span>, <span class="s9">Pbind</span>(<span class="s10">\instrument</span>,<span class="s10">\acid</span>, <span class="s10">\dur</span>,<span class="s9">Pseq</span>([0.25,0.5,0.25],<span class="s9">inf</span>), <span class="s10">\root</span>,[-24,-17],<span class="Apple-converted-space"> </span></p>
+<p class="p15"><span class="Apple-tab-span"> </span><span class="s10">\degree</span>,<span class="s9">Pseq</span>([0,3,5,7,9,11,[5,17],1],<span class="s9">inf</span>), <span class="s10">\pan</span>,<span class="s9">Pfunc</span>({[1.0.rand2,1.0.rand2]}),</p>
+<p class="p15"><span class="Apple-tab-span"> </span><span class="s10">\cut</span>,<span class="s9">Pxrand</span>([1000,500,2000,300],<span class="s9">inf</span>), <span class="s10">\rez</span>,<span class="s9">Pfunc</span>({0.7.rand +0.3}), <span class="s10">\amp</span>,[0.15,0.22]));</p>
+<p class="p15">)</p>
+<p class="p15">(</p>
+<p class="p15"><span class="s9">Pdef</span>(<span class="s10">\buckyball</span>, <span class="s9">Pbind</span>(<span class="s10">\instrument</span>,<span class="s10">\acid</span>, <span class="s10">\dur</span>,<span class="s9">Pseq</span>([0.25,0.5,0.25],<span class="s9">inf</span>), <span class="s10">\root</span>,[-24,-17],<span class="Apple-converted-space"> </span></p>
+<p class="p15"><span class="Apple-tab-span"> </span><span class="s10">\degree</span>,<span class="s9">Pseq</span>([0b,3b,5b,7b,9b,11b,5b,0b],<span class="s9">inf</span>), <span class="s10">\pan</span>,<span class="s9">Pfunc</span>({1.0.rand2}),<span class="Apple-converted-space"> </span><span class="s12">//notice the flats</span></p>
+<p class="p15"><span class="Apple-tab-span"> </span><span class="s10">\cut</span>,<span class="s9">Pxrand</span>([1000,500,2000,300],<span class="s9">inf</span>), <span class="s10">\rez</span>,<span class="s9">Pfunc</span>({0.7.rand +0.3}), <span class="s10">\amp</span>,0.2));</p>
+<p class="p15">)</p>
+<p class="p14"><br></p>
+<p class="p17">//stop the Pdef</p>
+<p class="p16"><span class="s9">Pdef</span><span class="s2">(</span>\buckyball<span class="s2">).stop;</span></p>
+<p class="p14"><br></p>
+<p class="p17">//start the Pdef</p>
+<p class="p15"><span class="s9">Pdef</span>(<span class="s10">\buckyball</span>).resume;</p>
+<p class="p14"><br></p>
+<p class="p17">//removing the Pdef</p>
+<p class="p20">Pdef.remove(\buckyball);</p>
+<p class="p14"><br></p>
+<p class="p3"><br></p>
+<p class="p1"><b>Sending to effects.</b></p>
+<p class="p1">Assignment to effect processors can be achieved by setting the 'out' argument to the desired</p>
+<p class="p1">efx's input bus.<span class="Apple-converted-space"> </span>The effect Synth must also be created.<span class="Apple-converted-space"> </span>Synth.new is one way of doing this.</p>
+<p class="p3"><br></p>
+<p class="p15">(</p>
+<p class="p17">//efx synthdef- dig the timing on the delay and the pbind.<span class="Apple-converted-space"> </span>:-P</p>
+<p class="p15"><span class="s9">SynthDef</span>(<span class="s4">"pbindefx"</span>, { <span class="s9">arg</span> out, in, time1=0.25, time2=0.5; <span class="Apple-converted-space"> <span class="Apple-tab-span"> </span></span></p>
+<p class="p15"><span class="Apple-tab-span"> </span>var audio, efx;</p>
+<p class="p15"><span class="Apple-tab-span"> </span>audio = <span class="s9">In</span>.ar([20,21],2);</p>
+<p class="p15"><span class="Apple-tab-span"> </span>efx=<span class="s9">CombN</span>.ar(audio, 0.5, [time1,time2], 10, 1, audio); <span class="Apple-converted-space"> <span class="Apple-tab-span"> </span></span></p>
+<p class="p15"><span class="Apple-tab-span"> </span><span class="s9">Out</span>.ar(out, <span class="s9">efx</span>);</p>
+<p class="p15">}).store;</p>
+<p class="p18"><br></p>
+<p class="p17">//create efx synth</p>
+<p class="p15"><span class="s9">a = Synth</span>.after(1, <span class="s4">"pbindefx"</span>);</p>
+<p class="p18"><br></p>
+<p class="p17">//if you don't like the beats change to 0.4,0.24</p>
+<p class="p17">//a.set(\time1,0.4, \time2,0.24);</p>
+<p class="p14"><br></p>
+<p class="p15"><span class="s9">SynthDef</span>(<span class="s4">"acid"</span>, { <span class="s9">arg</span> out, freq = 1000, gate = 1, pan = 0, cut = 4000, rez = 0.8, amp = 1;</p>
+<p class="p15"><span class="Apple-tab-span"> </span><span class="s9">Out</span>.ar(out,</p>
+<p class="p15"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="s9">Pan2</span>.ar(</p>
+<p class="p15"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="s9">RLPF</span>.ar(</p>
+<p class="p15"><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="s9">Pulse</span>.ar(freq,0.05),</p>
@@ Diff output truncated at 100000 characters. @@
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
_______________________________________________
sc-dev mailing list
info (subscription, etc.): http://www.beast.bham.ac.uk/research/sc_mailing_lists.shtml
archive: https://listarc.bham.ac.uk/marchives/sc-dev/
search: https://listarc.bham.ac.uk/lists/sc-dev/search/