sclang: ServerShmInterface - try to avoid multiple destructor calls
[supercollider.git] / HelpSource / Classes / OffsetOut.schelp
blob2208d4ec4b3af70aea30ffed3df45ece881e0455
1 class:: OffsetOut
2 summary:: Write a signal to a bus with sample accurate timing.
3 related:: Classes/Out, Classes/ReplaceOut, Classes/XOut
4 categories::  UGens>InOut
7 Description::
9 Output signal to a bus,  the sample offset within the bus is kept
10 exactly; i.e. if the synth is scheduled to be started part way through a
11 control cycle, OffsetOut will maintain the correct offset by buffering
12 the output and delaying it until the exact time that the synth was
13 scheduled for.
16 For achieving subsample accuracy see  link::Classes/SubsampleOffset::
18 note::
20 Note that if you have an input to the synth, it will be coming in and
21 its normal time, then mixed in your synth, and then delayed with the
22 output. So you shouldn't use OffsetOut for effects or gating.
26 See the link::Reference/Server-Architecture:: and link::Classes/Bus:: helpfiles for more information on
27 buses and how they are used.
30 classmethods::
32 method::ar
34 argument::bus
36 The index of the bus to write out to. The lowest numbers are
37 written to the audio hardware.
40 argument::channelsArray
42 An Array of channels or single output to write out. You cannot
43 change the size of this once a SynthDef has been built.
46 Examples::
48 code::
51 SynthDef("help-OffsetOut",
52         { arg out=0, freq=440, dur=0.05;
53                 var env;
54                 env = EnvGen.kr(Env.perc(0.01, dur, 0.2), doneAction:2);
55                 OffsetOut.ar(out, SinOsc.ar(freq, 0, env))
56 }).send(s);
58 SynthDef("help-Out",
59         { arg out=0, freq=440, dur=0.05;
60                 var env;
61                 env = EnvGen.kr(Env.perc(0.01, dur, 0.2), doneAction:2);
62                 //compare to Out:
63                 Out.ar(out, SinOsc.ar(freq, 0, env))
64 }).send(s);
68 // these are in sync
70 Routine({
71         loop {
72                 s.sendBundle(0.2, ["/s_new", "help-OffsetOut", -1]);
73                 0.01.wait;
74         }
75 }).play;
78 // these are less reliably in sync and are placed at multiples of blocksize.
80 Routine({
81         loop {
82                 s.sendBundle(0.2, ["/s_new", "help-Out", -1]);
83                 0.01.wait;
84         }
85 }).play;
90 SynthDef("trig1",{
91         var gate,tone;
92         gate = Trig1.ar(1.0,t);
93         tone = In.ar(10,1); // tone comes in normally
94         // but is then delayed when by the OffsetOut
95         OffsetOut.ar(0,
96                 tone * EnvGen.ar(
97                                 Env([0,0.1,0.1,0],[0.01,1.0,0.01],[-4,4],2),
98                                 gate,doneAction: 2
99                         )
100         )