sclang: ServerShmInterface - try to avoid multiple destructor calls
[supercollider.git] / HelpSource / Classes / RecordBuf.schelp
bloba26b35822f2ad00171b3c9815be737c17d9eb24d
1 class:: RecordBuf
2 summary:: Record or overdub into a Buffer.
3 related:: Classes/PlayBuf
4 categories::  UGens>Buffer
6 Description::
7 Records input into a link::Classes/Buffer::.
9 If recLevel is 1.0 and preLevel is 0.0 then the new input overwrites the
10 old data. If they are both 1.0 then the new data is added to the existing
11 data. (Any other settings are also valid.)
13 note:: The number of channels must be fixed for the SynthDef, it cannot vary depending on which buffer you use. ::
15 classmethods::
17 method::ar, kr
19 argument::inputArray
20 An Array of input channels.
22 argument::bufnum
23 The index of the buffer to use.
25 argument::offset
26 An offset into the buffer in samples.
28 argument::recLevel
29 Value to multiply by input before mixing with existing data.
31 argument::preLevel
32 Value to multiply to existing data in buffer before mixing with input.
34 argument::run
35 If zero, then recording stops, otherwise recording proceeds.
37 argument::loop
38 If zero then don't loop, otherwise do. This is modulatable.
40 argument::trigger
41 a trigger causes a jump to the start of the Buffer. A trigger
42 occurs when a signal changes from negative value to positive
43 value.
45 argument:: doneAction
46 an integer representing an action to be executed when the buffer is finished playing. This can be used to free the enclosing synth, etc. See link::Reference/UGen-doneActions:: for more detail. code::doneAction:: is only evaluated if loop is 0.
48 Examples::
50 code::
51 // Execute the following in order
53 // allocate a Buffer
54 s = Server.local;
55 b = Buffer.alloc(s, 44100 * 4.0, 1); // a four second 1 channel Buffer
58 // record for four seconds
60 SynthDef(\help_RecordBuf, { arg out = 0, bufnum = 0;
61         var formant;
62         formant = Formant.ar(XLine.kr(400,1000, 4), 2000, 800, 0.125);
63         RecordBuf.ar(formant, bufnum, doneAction: 2, loop: 0);
64 }).play(s,[\out, 0, \bufnum, b]);
67 // play it back
69 SynthDef(\help_RecordBuf_overdub, { arg out = 0, bufnum = 0;
70         var playbuf;
71         playbuf = PlayBuf.ar(1,bufnum);
72         FreeSelfWhenDone.kr(playbuf); // frees the synth when the PlayBuf is finished
73         Out.ar(out, playbuf);
74 }).play(s, [\out, 0, \bufnum, b]);
77 // overdub
79 SynthDef(\help_RecordBuf_overdub, { arg out=0, bufnum=0;
80         var formant;
81         formant = Formant.ar(XLine.kr(200, 1000, 4), 2000, 800, 0.125);
82         // mixes equally with existing data
83         RecordBuf.ar(formant, bufnum, 0, 0.5, 0.5, doneAction: 2, loop: 0);
84 }).play(s, [\out, 0, \bufnum, b]);
87 // play back the overdubbed version
88 Synth.new(\help_RecordBuf_overdub, [\out, 0, \bufnum, b], s);
90 // write the contents of the buffer to a file (see Buffer for more options)
92 b.write(sampleFormat: 'int16');
93 thisProcess.platform.recordingsDir +/+ "SC_" ++ Date.localtime.stamp ++ ".aiff"; // generated path
96 b.close; b.free; // cleanup