scide: implement selectionLength for openDocument
[supercollider.git] / HelpSource / Classes / BufDelayN.schelp
blob28e610eff49960751973119c22cd17262c5568bb
1 class:: BufDelayN
2 summary:: Buffer based simple delay line with no interpolation.
3 related:: Classes/BufDelayC, Classes/BufDelayL, Classes/DelayN
4 categories::  UGens>Delays>Buffer
7 Description::
9 Simple delay line with no interpolation which uses a buffer for its
10 internal memory. See also  link::Classes/BufDelayL::  which uses linear
11 interpolation, and  link::Classes/BufDelayC::  which uses cubic
12 interpolation. Cubic interpolation is more computationally expensive
13 than linear, but more accurate.
16 classmethods::
18 method::ar, kr
20 argument::buf
21 Buffer number.
23 note:: The buffers provided to any of the BufDelay units must be one channel. If you want to delay a multichannel signal, you must provide as many separate (one-channel) buffers as there are input channels.::
25 argument::in
26 The input signal.
28 argument::delaytime
29 Delay time in seconds.
31 argument::mul
33 argument::add
35 discussion::
36 Warning:: For reasons of efficiency, the effective buffer size is limited to the previous power of two. So, if 44100 samples are allocated, the maximum delay would be 32768 samples.
39 Examples::
41 code::
43 // allocate buffer
44 b = Buffer.alloc(s,44100,1);
47 // Dust randomly triggers Decay to create an exponential
48 // decay envelope for the WhiteNoise input source
50 z = Decay.ar(Dust.ar(1,0.5), 0.3, WhiteNoise.ar);
51 BufDelayN.ar(b.bufnum, z, 0.2, 1, z); // input is mixed with delay via the add input
52 }.play
55 b.free;
58 // multichannel
60 // two channels, two buffers
61 b = Buffer.allocConsecutive(2, s, 32768, 1);
63 a = { |bufs = #[0, 1]|
64         var sig = SinOsc.ar([440, 880]) * Decay2.kr(Impulse.kr([2, 4]), 0.01, 0.15);
65         sig + BufDelayN.ar(bufs, sig, delaytime: 0.125)
66 }.play(args: [bufs: b]);
68 a.free;
69 b.do(_.free);