scide: LookupDialog - redo lookup on classes after partial lookup
[supercollider.git] / SCClassLibrary / Common / Audio / Osc.sc
blob92b9b8abb645d20291d377576d249d4d3eac0199
1 /*
2         Osc - oscillator
3         arguments :
4                 bufnum - an index to a buffer
5                 freq - frequency in cycles per second
6                 pm - phase modulation
7                 mul - multiply by signal or scalar
8                 add - add to signal or scalar
9 */
11 Osc : PureUGen {
12         *ar {
13                 arg bufnum, freq=440.0, phase=0.0, mul=1.0, add=0.0;
14                 ^this.multiNew('audio', bufnum, freq, phase).madd(mul, add)
15         }
16         *kr {
17                 arg bufnum, freq=440.0, phase=0.0, mul=1.0, add=0.0;
18                 ^this.multiNew('control', bufnum, freq, phase).madd(mul, add)
19         }
22 SinOsc : PureUGen {
23         *ar {
24                 arg freq=440.0, phase=0.0, mul=1.0, add=0.0;
25                 ^this.multiNew('audio', freq, phase).madd(mul, add)
26         }
27         *kr {
28                 arg freq=440.0, phase=0.0, mul=1.0, add=0.0;
29                 ^this.multiNew('control', freq, phase).madd(mul, add)
30         }
33 SinOscFB : PureUGen {
34         *ar {
35                 arg freq=440.0, feedback=0.0, mul=1.0, add=0.0;
36                 ^this.multiNew('audio', freq, feedback).madd(mul, add)
37         }
38         *kr {
39                 arg freq=440.0, feedback=0.0, mul=1.0, add=0.0;
40                 ^this.multiNew('control', freq, feedback).madd(mul, add)
41         }
44 OscN : PureUGen {
45         *ar {
46                 arg bufnum, freq=440.0, phase=0.0, mul=1.0, add=0.0;
47                 ^this.multiNew('audio', bufnum, freq, phase).madd(mul, add)
48         }
49         *kr {
50                 arg bufnum, freq=440.0, phase=0.0, mul=1.0, add=0.0;
51                 ^this.multiNew('control', bufnum, freq, phase).madd(mul, add)
52         }
56 VOsc : PureUGen {
57         *ar {
58                 arg bufpos, freq=440.0, phase=0.0, mul=1.0, add=0.0;
59                 ^this.multiNew('audio', bufpos, freq, phase).madd(mul, add)
60         }
61         *kr {
62                 arg bufpos, freq=440.0, phase=0.0, mul=1.0, add=0.0;
63                 ^this.multiNew('control', bufpos, freq, phase).madd(mul, add)
64         }
67 VOsc3 : PureUGen {
68         *ar {
69                 arg bufpos, freq1=110.0, freq2=220.0, freq3=440.0, mul=1.0, add=0.0;
70                 ^this.multiNew('audio', bufpos, freq1, freq2, freq3).madd(mul, add)
71         }
72         *kr {
73                 arg bufpos, freq1=110.0, freq2=220.0, freq3=440.0, mul=1.0, add=0.0;
74                 ^this.multiNew('control', bufpos, freq1, freq2, freq3).madd(mul, add)
75         }
78 COsc : PureUGen {
79         *ar {
80                 arg bufnum, freq=440.0, beats=0.5, mul=1.0, add=0.0;
81                 ^this.multiNew('audio', bufnum, freq, beats).madd(mul, add)
82         }
83         *kr {
84                 arg bufnum, freq=440.0, beats=0.5, mul=1.0, add=0.0;
85                 ^this.multiNew('control', bufnum, freq, beats).madd(mul, add)
86         }
89 Formant : PureUGen {
90         *ar {
91                 arg fundfreq = 440.0, formfreq = 1760.0, bwfreq = 880.0, mul = 1.0, add = 0.0;
92                 ^this.multiNew('audio', fundfreq, formfreq, bwfreq).madd(mul, add)
93         }
96 LFSaw : PureUGen {
97         *ar {
98                 arg freq = 440.0, iphase = 0.0, mul = 1.0, add = 0.0;
99                 ^this.multiNew('audio', freq, iphase).madd(mul, add)
100         }
101         *kr {
102                 arg freq = 440.0, iphase = 0.0, mul = 1.0, add = 0.0;
103                 ^this.multiNew('control', freq, iphase).madd(mul, add)
104         }
107 LFPar : LFSaw
111 LFCub : LFSaw
115 LFTri : LFSaw
119 LFGauss : UGen {
120         *ar {
121                 arg duration = 1, width = 0.1, iphase = 0.0, loop = 1, doneAction = 0;
122                 ^this.multiNew('audio', duration, width, iphase, loop, doneAction)
123         }
124         *kr {
125                 arg duration = 1, width = 0.1, iphase = 0.0, loop = 1, doneAction = 0;
126                 ^this.multiNew('control', duration, width, iphase, loop, doneAction)
127         }
128         range { arg min = 0, max = 1;
129                 ^this.linlin(this.minval, 1, min, max)
130         }
131         minval {
132                 var width = inputs[1];
133                 ^exp(1.0 / (-2.0 * squared(width)))
134         }
138 LFPulse : PureUGen {
139         *ar {
140                 arg freq = 440.0, iphase = 0.0, width = 0.5, mul = 1.0, add = 0.0;
141                 ^this.multiNew('audio', freq, iphase, width).madd(mul, add)
142         }
143         *kr {
144                 arg freq = 440.0, iphase = 0.0, width = 0.5, mul = 1.0, add = 0.0;
145                 ^this.multiNew('control', freq, iphase, width).madd(mul, add)
146         }
147         signalRange { ^\unipolar }
150 VarSaw : PureUGen {
151         *ar {
152                 arg freq = 440.0, iphase = 0.0, width = 0.5, mul = 1.0, add = 0.0;
153                 ^this.multiNew('audio', freq, iphase, width).madd(mul, add)
154         }
155         *kr {
156                 arg freq = 440.0, iphase = 0.0, width = 0.5, mul = 1.0, add = 0.0;
157                 ^this.multiNew('control', freq, iphase, width).madd(mul, add)
158         }
161 Impulse : PureUGen {
162         *ar {
163                 arg freq = 440.0, phase = 0.0, mul = 1.0, add = 0.0;
164                 ^this.multiNew('audio', freq, phase).madd(mul, add)
165         }
166         *kr {
167                 arg freq = 440.0, phase = 0.0, mul = 1.0, add = 0.0;
168                 ^this.multiNew('control', freq, phase).madd(mul, add)
169         }
170         signalRange { ^\unipolar }
174 SyncSaw : PureUGen {
175         *ar {
176                 arg syncFreq = 440.0, sawFreq = 440.0, mul = 1.0, add = 0.0;
177                 ^this.multiNew('audio', syncFreq, sawFreq).madd(mul, add)
178         }
179         *kr {
180                 arg syncFreq = 440.0, sawFreq = 440.0, mul = 1.0, add = 0.0;
181                 ^this.multiNew('control', syncFreq, sawFreq).madd(mul, add)
182         }
186 //TPulse : UGen {//exception in GrafDef_Load: UGen 'TPulse' not installed.
187 //      *ar {
188 //              arg trig = 0.0, freq = 440.0, width = 0.5, mul = 1.0, add = 0.0;
189 //              ^this.multiNew('audio', trig, freq, width).madd(mul, add)
190 //      }
191 //      *kr {
192 //              arg trig = 0.0, freq = 440.0, width = 0.5, mul = 1.0, add = 0.0;
193 //              ^this.multiNew('control', trig, freq, width).madd(mul, add)
194 //      }
195 //      signalRange { ^\unipolar }
198 Index : PureUGen {
199         *ar {
200                 arg bufnum, in = 0.0, mul = 1.0, add = 0.0;
201                 ^this.multiNew('audio', bufnum, in).madd(mul, add)
202         }
203         *kr {
204                 arg bufnum, in = 0.0, mul = 1.0, add = 0.0;
205                 ^this.multiNew('control', bufnum, in).madd(mul, add)
206         }
209 WrapIndex : Index {
212 IndexInBetween : Index {
215 DetectIndex : Index {
218 Shaper : Index {
221 IndexL : Index {
224 DegreeToKey : PureUGen {
225         *ar {
226                 arg bufnum, in = 0.0, octave = 12.0, mul = 1.0, add = 0.0;
227                 ^this.multiNew('audio', bufnum, in, octave).madd(mul, add)
228         }
229         *kr {
230                 arg bufnum, in = 0.0, octave = 12.0, mul = 1.0, add = 0.0;
231                 ^this.multiNew('control', bufnum, in, octave).madd(mul, add)
232         }
235 Select : PureUGen {
236         *ar {
237                 arg which, array;
238                 ^this.multiNewList(['audio', which] ++ array)
239         }
240         *kr {
241                 arg which, array;
242                 ^this.multiNewList(['control', which] ++ array)
243         }
244         checkInputs {
245                 if (rate == 'audio', {
246                         for(1, inputs.size - 1, { arg i;
247                                 if (inputs.at(i).rate != 'audio', {
248                                         ^("input was not audio rate: " + inputs.at(i));
249                                 });
250                         });
251                 });
252                 ^this.checkValidInputs
253         }
256 SelectX {
257         *new1 { arg rate, which, array;
258                 var selector = UGen.methodSelectorForRate(rate);
259                 ^this.crossfadeClass.perform(selector,
260                         Select.perform(selector, which.round(2), array),
261                         Select.perform(selector, which.trunc(2) + 1, array),
262                         (which * 2 - 1).fold2(1)
263                 );
264         }
265         *ar { arg which, array, wrap=1;
266                 ^this.new1(\audio, which, array, wrap);
267         }
268         *kr { arg which, array, wrap=1;
269                 ^this.new1(\control, which, array, wrap);
270         }
271         *crossfadeClass {
272                 ^XFade2
273         }
276 LinSelectX : SelectX {
277         *crossfadeClass {
278                 ^LinXFade2
279         }
282 SelectXFocus {  // does not wrap (yet).
283         *new { arg which, array, focus=1;
284                 ^Mix(array.collect({ arg in, i;
285                         (1 - ((which-i).abs * focus) ).max(0) * in;
286                 }))
287         }
288         *ar { arg which, array, focus=1;
289                 ^this.new(which, array, focus);
290         }
291         *kr { arg which, array, focus=1;
292                 ^this.new(which, array, focus);
293         }
296 Vibrato : PureUGen {
297         *ar {
298                 arg freq = 440.0, rate = 6, depth = 0.02, delay = 0.0, onset = 0.0,
299                                 rateVariation = 0.04, depthVariation = 0.1, iphase = 0.0;
300                 ^this.multiNew('audio', freq, rate, depth, delay, onset, rateVariation, depthVariation, iphase)
301         }
302         *kr {
303                 arg freq = 440.0, rate = 6, depth = 0.02, delay = 0.0, onset = 0.0,
304                                 rateVariation = 0.04, depthVariation = 0.1, iphase = 0.0;
305                 ^this.multiNew('control', freq, rate, depth, delay, onset, rateVariation, depthVariation, iphase)
306         }
310 TChoose {
311         *ar { arg trig, array;
312                 ^Select.ar(TIRand.kr(0, array.lastIndex, trig), array)
314         }
315         *kr { arg trig, array;
316                 ^Select.kr(TIRand.kr(0, array.lastIndex, trig), array)
318         }
322 TWChoose {
323         *ar { arg trig, array, weights, normalize=0;
324                 ^Select.ar(TWindex.ar(trig, weights, normalize), array)
325         }
326         *kr { arg trig, array, weights, normalize=0;
327                 ^Select.kr(TWindex.kr(trig, weights, normalize), array)
328         }