linux: shared memory interface - link with librt
[supercollider.git] / HelpSource / Guides / Backwards-Compatibility.schelp
blob1a316f090432cee1e077fad228f640b19de05220
1 title:: Backwards Compatibility
2 summary:: Classes and methods that improve backwards compatibility with SC2 code
3 categories:: SC3 vs SC2
5 There are a number of classes and methods that have been added to allow for backwards compatibility with SC2 code. The most notable of these is code::Synth.play::, which is basically a wrapper for code::Function.play::.
7 code::
8 { SinOsc.ar(440, 0, 0.5) }.play; // creates an arbitrarily named SynthDef and a Synth to play it
9 Synth.play({ SinOsc.ar(440, 0, 0.5) }); // in SC3 just a wrapper for Function.play with fewer args
12 Both of these will create synth nodes on the default server. Note that neither requires the use of an code::Out.ar:: link::Classes/UGen::; they simply output to the first audio bus. One can however add an link::Classes/Out:: to Function.play in order to specify.
14 code::
15 Synth.play({ Out.ar(1, SinOsc.ar(440, 0, 0.5)) });
18 In general, one should be aware of this distinction when using this code. When copying such code for reuse with other SC3 classes (for example in a reusable link::Classes/SynthDef::), it will usually be necessary to add an code::Out.ar::. Although useful for quick testing these methods are generally inferior to code::SynthDef.play::, as the latter is more direct, requires no modifications for general reuse, has greater general flexibility and has slightly less overhead. (Although this is insignificant in most cases, it could be relevant when large numbers of defs or nodes are being created.)
20 Like code::SynthDef.play::, code::Function.play:: returns a link::Classes/Synth:: object which can then be messaged, etc. However, since code::Function.play:: creates an arbitrarily named link::Classes/SynthDef::, one cannot reuse the resulting def, at least not without reading its name from the post window, or getting it from the link::Classes/Synth:: object.
22 code::
23 //The following examples are functionally equivalent
24 x = { arg freq = 440; Out.ar(1, SinOsc.ar(freq, 0, 0.5)) }.play(fadeTime: 0);
25 x.set(\freq, 880);              // you can set arguments
26 y = Synth.new(x.defName);       // get the arbitrary defname from x
27 x.free;
28 y.free;
30 x = SynthDef("backcompat-sine", { arg freq = 440; Out.ar(1, SinOsc.ar(freq, 0, 0.5)) }).play;
31 x.set(\freq, 880);
32 y = Synth.new("backcompat-sine");
33 x.free;
34 y.free;
37 code::Function.play:: is in general superior to both its SC2 equivalent and code::Synth.play::. It has a number of significant features such as the ability to specify the output bus and fade times as arguments. See the link::Classes/Function:: helpfile for a more in-depth discussion.
39 A number of other classes and methods have also been added to improve compatibility. These are listed below. In general there are equivalent or better ways of doing the same things in SC3.
41 table::
42 ## Synth *play || use Function.play or SynthDef.play
43 ## GetFileDialog || use link::Classes/Dialog::
44 ## GetStringDialog ||
45 ## Synth *stop || use Server.freeAll
46 ## Synth *isPlaying || Server.numSynths (this will include non-running nodes)
47 ## Mix *ar *arFill || use Mix *new and *fill
48 ## SimpleNumber.rgb ||
49 ## Rawarray.write ||