class library: SynthDef - lazy implementation of removeUGen
[supercollider.git] / HelpSource / Classes / BufRd.schelp
blobec21abbbb5c6adc2a4ab5b2b1e4b8bddd95e7832
1 class:: BufRd
2 summary:: Buffer reading oscillator.
3 related:: Classes/BufWr
4 categories::  UGens>Buffer
7 Description::
9 Read the content of a buffer at an index.
11 In comparison to link::Classes/PlayBuf:: :
12 PlayBuf plays through the buffer by itself, BufRd only moves its read point by the phase input and
13 therefore has no pitch input. BufRd has variable interpolation.
15 classmethods::
16 private:: categories
17 method::ar, kr
19 argument::numChannels
20 Number of channels that the buffer will be. This must be a fixed
21 integer. The architechture of the SynthDef cannot change after it
22 is compiled.
23 warning::
24 If you supply a  code::bufnum::  of a buffer that has a
25 different  code::numChannels::  then you have specified to
26 the BufRd, it will fail silently.
29 argument::bufnum
30 The index of the buffer to use.
32 argument::phase
33 Audio rate modulateable index into the buffer.
34 Warning:: The phase argument only offers precision for addressing 2**24 samples (about 6.3 minutes at 44100Hz). ::
36 argument::loop
37 1 means true, 0 means false. This is modulateable.
40 argument::interpolation
41 1 means no interpolation, 2 is linear, 4 is cubic interpolation.
43 instancemethods::
44 private:: init, argNamesInputsOffset, checkInputs
46 Examples::
48 code::
51 // read a whole sound into memory
52 s = Server.local;
53 // note: not *that* columbia, the first one
54 b = Buffer.read(s, Help.dir +/+ "sounds/a11wlk01.wav");
57 //use any AUDIO rate ugen as an index generator
59 { BufRd.ar(1, b, SinOsc.ar(0.1) * BufFrames.ir(b)) }.play;
60 { BufRd.ar(1, b, LFNoise1.ar(1) * BufFrames.ir(b)) }.play;
61 { BufRd.ar(1, b, LFNoise1.ar(10) * BufFrames.ir(b)) }.play;
62 { BufRd.ar(1, b, LFTri.ar(0.1) + LFTri.ar(0.23) * BufFrames.ir(b)) }.play;
63 // original duration
64 { BufRd.ar(1, b, LFSaw.ar(BufDur.ir(b).reciprocal).range(0, BufFrames.ir(b)) ) }.play;
67 //use a phasor index into the file
69 { BufRd.ar(1, b, Phasor.ar(0, BufRateScale.kr(b), 0, BufFrames.kr(b))) }.play;
72 //change rate and interpolation
74 x = { arg rate=1, inter=2; 
75         BufRd.ar(1, b, Phasor.ar(0, BufRateScale.kr(b) * rate, 0, BufFrames.kr(b)), 1, inter) 
76 }.play;
79 x.set(\rate, 0.9);
80 x.set(\rate, 0.6);
81 x.set(\inter, 1);
82 x.set(\inter, 0);
85 //write into the buffer with a BufWr
87 y = { arg rate=1;
88         var in;
89         in = SinOsc.ar(LFNoise1.kr(2, 300, 400), 0, 0.1);
90         BufWr.ar(in, b, Phasor.ar(0, BufRateScale.kr(b) * rate, 0, BufFrames.kr(b)));
91         0.0 //quiet
92 }.play;
95 //read it with a BufRd
97 x = { arg rate=1;
98         BufRd.ar(1, b, Phasor.ar(0, BufRateScale.kr(b) * rate, 0, BufFrames.kr(b))) 
99 }.play;
104 x.set(\rate, 5);
105 y.set(\rate, 2.0.rand);
106 x.set(\rate, 2);
108 b.free