scel: install files to site-lisp/SuperCollider
[supercollider.git] / HelpSource / Reference / play.schelp
blob975b8f3f59b3c090d4ed96da4454de0b88b9de69
1 title:: play
2 summary:: Start a process
3 categories:: Common methods
5 method:: play
6 The code::play:: message is of common use in sc. Different objects respond to it in various
7 ways, but the simple meaning is: strong::start a process::.
8 It is usually implemented by objects in contributed libraries as well.
10 play usually returns the playing object which might not be the same as the one
11 the message was sent to.
13 opposite: code::stop::
15 section:: Clocks, Routines, Streams and Patterns
16 For a full list of which classes that implements code::play::, see link::Overviews/Methods#play::
18 subsection:: clock.play (stream)
19 returns: the clock
20 code::
22 r = Routine.new({ "...playing".postln; 1.wait; "ok, that was it".postln });
23 SystemClock.play(r);
26 See link::Classes/Clock#*play::
28 subsection:: routine.play (clock)
29 returns: the routine
30 code::
31 Routine.new({ "...playing".postln; 1.wait; "ok, that was it".postln }).play;
33 See link::Classes/Routine#-play::
35 subsection:: stream.play (clock)
36 returns: the stream
38 the stream will loop until it returns nil
39 code::
40 FuncStream({ "ok, that was it".postln; 1 }).play;
42 See link::Classes/FuncStream#-play::
44 subsection:: pausestream.play (clock) / task.play (clock)
45 returns: the stream
46 code::
47 a = PauseStream.new(FuncStream.new({ "ok, that was it".postln; 1 }));
48 a.play;
49 a.stop;
50 a.play;
51 a.stop;
53 a = Task.new({ loop({ "ok, that was it".postln; 1.wait; }) });
54 a.play;
55 a.stop;
57 See link::Classes/Stream#-play:: and link::Classes/Task#-play::
59 subsection:: pattern.play (clock, protoEvent)
60 returns: an link::Classes/EventStreamPlayer::
61 code::
63 Pseq([
64         Pbind(\freq, Pn(500, 1)),
65         Pbind(\dur, Pn(0.1, 1))
66 ], 2).play;
69 See link::Classes/Pattern#-play::
71 section:: Playing single Synths from SynthDefs on the server
73 The following play messages both cause a SynthDef to be written, send it to the server
74 and start a synth with it there.
76 Note that they should not be used in quickly running automated processes,
77 as there are more efficient alternatives ( see link::Guides/SynthDefsVsSynths:: )
79 subsection:: function.play (target, outbus, fadeTime, addAction, args)
81 returns: a link::Classes/Synth::
82 table::
83 ## outbus || on what bus to play (default: 0)
84 ## fadeTime || in what time to fade out when released (defaulr: 0.02)
85 ## addAction || where to add the node (\addToHead by default)
86 ## args || controls to set when starting the synth
89 See link::Classes/Function#-play::
91 code::
92 a = { PinkNoise.ar([0.1, 0.1]) }.play;
93 a.release;
95 // setting argument
96 a = { |freq = 500| HPF.ar(PinkNoise.ar([1, 1] * 0.4), freq) }.play;
97 a.set(\freq, 1000)
98 a.release;
100 // passing argument with play:
101 a = { |freq = 500| HPF.ar(PinkNoise.ar([1, 1] * 0.4), freq) }.play(args: [\freq, 10000]);
103 // note that you can use Out ugens but you do not need to
104 { Out.ar(1, PinkNoise.ar(0.1)) }.play;
105 { XOut.ar(0, MouseX.kr(0,1), PinkNoise.ar(0.1*[1,1])) }.play; // mouse x controls level
108 subsection:: synthDef.play (target, args, addAction)
109 returns: a link::Classes/Synth::
111 Note that you need an out ugen to hear the result.
112 Examples of how to write to the busses in the helpfiles: link::Classes/Out:: / link::Classes/ReplaceOut:: / link::Classes/XOut:: / link::Classes/OffsetOut::
114 Nevertheless, synths can also run without any writing activity: (see e.g. link::Classes/SendTrig::)
116 Some operations provide an out ugen internally: see for example code::function.play::, which plays out
117 to a bus number provided in the argument passed to code::.play::
119 code::
121 x = SynthDef("test", { arg out, amp=0.1;
122         var sound;
123         sound = PinkNoise.ar(amp * [1,1]);
124         Out.ar(out, sound);
125 }).play;
128 //set the synth
129 x.set(\amp, 0.2);
130 //free the synth
131 x.free;
133 See link::Classes/SynthDef#-play::
135 note:: code::Synth.play(function):: is synonymous, for backwards compatibility with sc2 ::