sclang: ServerShmInterface - try to avoid multiple destructor calls
[supercollider.git] / HelpSource / Classes / VOsc.schelp
blobdfcf0986e023e533cd2d6b1e3bd7855fc620b5c8
1 class:: VOsc
2 summary:: Variable wavetable oscillator.
3 related:: Classes/COsc, Classes/Osc, Classes/OscN, Classes/VOsc3
4 categories::  UGens>Generators>Deterministic
7 Description::
9 A wavetable lookup oscillator which can be swept smoothly across
10 wavetables. All the wavetables must be allocated to the same size.
11 Fractional values of table will interpolate between two adjacent tables.
14 This oscillator requires at least two buffers to be filled with a
15 wavetable format signal. This preprocesses the Signal into a form which
16 can be used efficiently by the Oscillator. The buffer size must be a
17 power of 2.
20 This can be achieved by creating a link::Classes/Buffer:: object and sending it one of
21 the "b_gen" messages ( sine1, sine2, sine3 ) with the wavetable flag set to true.
24 This can also be achieved by creating a link::Classes/Signal:: object and sending it
25 the link::Overviews/Methods#asWavetable#asWavetable:: message, saving it to disk, and having the server load
26 it from there.
29 If you use Buffer objects to manage buffer numbers, you can use the
30 [*allocConsecutive] method to allocate a continuous block of buffers.
31 See the link::Classes/Buffer:: helpfile for details.
34 note::
36 VOsc requires the b_gen sine1 wavetable flag to be ON.
40 classmethods::
42 method::ar, kr
44 argument::bufpos
46 Buffer index. Can be swept continuously among adjacent wavetable
47 buffers of the same size.
50 argument::freq
52 Frequency in Hertz.
55 argument::phase
57 Phase offset or modulator in radians.
60 argument::mul
62 Output will be multiplied by this value.
65 argument::add
67 This value will be added to the output.
70 Examples::
72 code::
75 s = Server.local;
76 // allocate and fill tables 0 to 7
77 8.do({ arg i;
78         var n, a;
79         // allocate table
80         s.sendMsg(\b_alloc, i, 1024);
81         // generate array of harmonic amplitudes
82         n = (i+1)**2;
83         a = Array.fill(n, { arg j; ((n-j)/n).squared.round(0.001) });
84         // fill table
85         s.performList(\sendMsg, \b_gen, i, \sine1, 7, a);
86 });
90 SynthDef("help-VOsc",{ arg out=0, bufoffset=0;
91         var x;
92         // mouse x controls the wavetable position
93         x = MouseX.kr(0,7);
94         Out.ar(out,
95                 VOsc.ar(bufoffset+x, [120,121], 0, 0.3)
96         )
97 }).play(s,[\out, 0, \bufoffset, 0]);
101 8.do({ arg i;
102         var a;
103         s.sendMsg(\b_alloc, i, 1024); // allocate table
104         // generate array of harmonic amplitudes
105         a = Array.fill(i, 0) ++ [0.5, 1, 0.5];
106         // fill table
107         s.performList(\sendMsg, \b_gen, i, \sine1, 7, a);
112 8.do({ arg i;
113         var a;
114         s.sendMsg(\b_alloc, i, 1024); // allocate table
115         // generate array of harmonic amplitudes
116         a = Array.fill(32,0);
117         12.do({ arg i; a.put(32.rand, 1) });
118         // fill table
119         s.performList(\sendMsg, \b_gen, i, \sine1, 7, a);
124 8.do({ arg i;
125         var a;
126         s.sendMsg(\b_alloc, i, 1024); // allocate table
127         // generate array of harmonic amplitudes
128         n = (i+1)**2;
129         a = Array.fill(n, { arg j; 1.0.rand2 });
130         // fill table
131         s.performList(\sendMsg, \b_gen, i, \sine1, 7, a);