scide: LookupDialog - redo lookup on classes after partial lookup
[supercollider.git] / HelpSource / Classes / Ndef.schelp
blob67ec2289bfc8f1bac33926db13615b34c8a76e8d
1 class:: Ndef
2 summary:: node proxy definition
3 categories:: Libraries>JITLib>NodeProxy
4 related:: Classes/ProxySpace, Classes/Tdef
6 description::
7 Reference to a proxy, forms an alternative to link::Classes/ProxySpace::. All methods are inherited from link::Classes/NodeProxy::.
9 code::
10 Ndef(key)       //returns the instance
11 Ndef(key, obj)  //stores the object and returns the instance, like Tdef and Pdef.
14 Graphical editor overviewing all current Ndefs: link::Classes/NdefMixer::. A general overview: link::Overviews/JITLib::.
16 subsection::First Example
18 code::
19 s.boot;
21 Ndef(\a).play; // play to hardware output.
22 Ndef(\a).fadeTime = 2; // fadeTime specifies crossfade
23 // set the source
24 Ndef(\a, { SinOsc.ar([350, 351.3], 0, 0.2) });
25 Ndef(\a, { Pulse.ar([350, 351.3] / 4, 0.4) * 0.2 });
26 Ndef(\a, Pbind(\dur, 0.03, \freq, Pbrown(0, 1, 0.1, inf).linexp(0, 1, 200, 350)));
28 Ndef(\a, { Ringz.ar(Ndef.ar(\b), [350, 351.3] * 8, 0.2) * 4 });
29 Ndef(\b, { Impulse.ar([5, 7]/2, [0, 0.5]) });
31 Ndef.clear(3); // clear all after 3 seconds
34 ClassMethods::
36 private::initClass
38 subsection::Creation
40 method::new
41 Return a new node proxy and store it in a global ProxySpace under the key. If there is already an Ndef there, replace its object with the new one. The object can be any supported class, see link::Classes/NodeProxy:: help.
43 argument::key
44 If key is an association, it is interpreted as strong::key -> server name::. (order changed in SC3.3 !). If no name is given, it uses the default server that was default when Ndef was first called. (to change it, see link::#*defaultServer::).
46 argument::object
47 an object
49 method::ar
50 equivalent to code::*new(key).ar(numChannels, offset):: (see link::Classes/NodeProxy:: help for ar method)
52 method::kr
53 equivalent to code::*new(key).kr(numChannels, offset):: (see link::Classes/NodeProxy:: help for kr method)
55 method::clear
56 clear all proxies
58 method::defaultServer
59 set the default server (default: code::Server.default::)
61 method::all
62 Return the dictionary of all servers, pointing to proxyspaces with Ndefs for each.
64 code::
65 Ndef.all;
68 method::dictFor
69 Return the proxyspace for a given server.
71 code::
72 Ndef.dictFor(s);
75 Examples::
77 code::
78 s.boot;
80 Ndef(\sound).play;
81 Ndef(\sound).fadeTime = 1;
82 Ndef(\sound, { SinOsc.ar([600, 635], 0, SinOsc.kr(2).max(0) * 0.2) });
83 Ndef(\sound, { SinOsc.ar([600, 635] * 3, 0, SinOsc.kr(2 * 3).max(0) * 0.2) });
84 Ndef(\sound, { SinOsc.ar([600, 635] * 2, 0, SinOsc.kr(2 * 3).max(0) * 0.2) });
85 Ndef(\sound, Pbind(\dur, 0.17, \freq, Pfunc({ rrand(300, 700) })) );
87 Ndef(\lfo, { LFNoise1.kr(3, 400, 800) });
88 Ndef(\sound).map(\freq, Ndef(\lfo));
89 Ndef(\sound, { arg freq; SinOsc.ar([600, 635] + freq, 0, SinOsc.kr(2 * 3).max(0) * 0.2) });
90 Ndef(\lfo, { LFNoise1.kr(300, 400, 800) });
92 Ndef.clear; //clear all
95 subsection::Simple audio routing with the <<> operator
97 code::
99 Ndef(\sound, {
100         RHPF.ar(
101                 \in1.ar([0, 0]) * \in2.ar([0, 0]),
102                 \freq.kr(6000, 2),
103                 \rq.kr(0.2)
104         ) * 10
105 }).play;
108 Ndef(\a, { SinOsc.ar(MouseX.kr(300, 1000, 1) * [1, 1.2], \phase.ar([0, 0]) * 0.2) });
109 Ndef(\b, { LFDNoise3.ar(MouseY.kr(3, 1000, 1) * [1, 1.2]) });
110 Ndef(\c, { LFTri.ar(MouseY.kr(3, 10, 1) * [1, 1.2]).max(0) });
112 Ndef(\sound) <<>.in1 Ndef(\a);
113 Ndef(\sound) <<>.in2 Ndef(\b);
114 Ndef(\sound) <<>.in2 Ndef(\c);
115 Ndef(\a) <<>.phase Ndef(\sound);
116 Ndef(\a) <<>.phase nil; // unmap
117 Ndef.clear(3);          // clear all Ndefs
120 subsection::Recursion
122 Ndefs can be used recursively. A structure like the following works:
124 code::
125 Ndef(\sound, { SinOsc.ar([600, 635], Ndef.ar(\sound) * 10, LFNoise1.kr(2).max(0) * 0.2) });
126 Ndef(\sound).play;
129 This is because there is a feedback delay (the server's strong::block size::), usually 64 samples, so that calculation can reiterate over its own outputs. For single sample feedback, see:
131 code::
132 Document.open("Examples/demonstrations/single_sample_feedback.scd")
135 subsection::Using different servers
137 code::
138 // create a new server
139 a = Server(\foo, NetAddr("127.0.0.1", 57123)).boot.makeWindow;
140 Ndef(\sound, { SinOsc.ar([600, 635]) * SinOsc.kr(2).max(0) * 0.2 }).play; // play on default
141 Ndef(\sound -> \foo, { SinOsc.ar([700, 745]) * SinOsc.kr(2).max(0) * 0.2 }).play;// play on foo
143 // clear definitions
144 Ndef(\sound -> \foo).clear(3);
145 Ndef(\sound).clear(3);
148 subsection::GUI
150 code::
151 // create a window for a given Ndef
152 Ndef(\sound).edit
154 Ndef(\sound, { |freq = 440, rate = 2|
155         SinOsc.ar(freq * [1, 1.625]) * SinOsc.kr(rate).max(0) * 0.2
156 }).play;
159 // set lags for controls:
160 Ndef(\sound).lag(\freq, 0.2, \rate, 0.5);
162 // create a mixer for all Ndefs:
163 NdefMixer(s);
166 subsection::Using Associations
168 For a complete list, see link::Classes/NodeProxy::, and link::Reference/NodeProxy_roles::
170 code::
171 // setsrc
173 Ndef(\x,
174         \setsrc -> Pbind(\source,
175                 Pseq([
176                         { LFTri.ar(280 * Line.kr(1.1, 0.4, rrand(2, 3)) + [0,1]) * 0.1 },
177                         { Pulse.ar(40 + [0,1]) * 0.1 },
178                         { LFTri.ar(LFTri.kr(1).round(1.0.rand) + 1 * 180 + [0,1], 0.04) * 0.3 },
179                 ], inf),
180                 \dur, Prand([3, 2, 4], inf)
181         )
182 ).play;