CheckBadValues should run on the first sample as well
[supercollider.git] / HelpSource / Guides / Bundled-Messages.schelp
blob0ec318614ba85329cd2629437b019297abe64872
1 title:: Bundled Server Messages
2 summary:: Sending OSC message bundles
3 categories:: OpenSoundControl
4 related:: Guides/ServerTiming
6 When using the Synth/Node/Group sclang objects there is often a need to construct bundles to send messages together. For example when you want to start a synth that should be mapped instantly to certain buses, or need to ensure that two synths start with precise synchronisation.
8 The simplest way to deal with this is through Server's automated bundling support. This allows you to open a bundle into which all osc messages will be collected until it is sent. See Server for details of makeBundle's arguments.
9 code::
10 s.boot;
12 // send a synth def to server
13 SynthDef("tpulse", { arg out=0,freq=700,sawFreq=440.0;
14         Out.ar(out, SyncSaw.ar(freq,  sawFreq,0.1) )
15 }).send(s);
18 // all OSC commands generated in the function contained below will be added to a bundle
19 // and executed simultaneously after 2 seconds.
21 s.makeBundle(2.0, {
22         x = Synth.new("tpulse");
23         a = Bus.control.set(440);
24         x.map(\freq, a);
25 });
27 x.free;
29 // don't send
31 b = s.makeBundle(false, {       
32         x = { PinkNoise.ar(0.1) * In.kr(0, 1); }.play;
33 });
35 // now pass b as a pre-existing bundle, and start both synths synchronously
37 s.makeBundle(nil, { // nil executes ASAP
38         y = { SinOsc.kr(0.2).abs }.play(x, 0, 0, \addBefore); // sine envelope
39 }, b);
41 x.free; y.free;
44 To send a bundle with the default latency of the server, use the message bind:
45 code::
47 s.bind {
48         SynthDef("tpulse2", { arg out=0, freq=700, sawFreq=440.0;
49                 Out.ar(out, Pan2.ar(SyncSaw.ar(freq,  sawFreq, 0.1), SinOsc.kr(8)) )
50         }).send(s);
51         s.sync; // wait until synthdef is loaded
52         x = Synth.new("tpulse2");
53         a = Bus.control.set(440);
54         x.map(\freq, a);
58 a.free; x.free;
61 In addition to this there are a number of methods which return OSC messages which can be added to a bundle. These are detailed in the helpfiles for link::Classes/Node::, link::Classes/Synth::, and link::Classes/Group::.
62 code::
63 s.boot;
64 b = List.new;
65 c = Bus.control(s, 1).set(660);
66 x = Synth.basicNew("default", s); // Create without sending
67 b.add(x.newMsg);
68 b.add(x.mapMsg(\freq, c));
69 b.postln; // here's what it looks like
70 s.listSendBundle(1.0, b); // Execute after 1 second
71 c.set(440);
72 s.queryAllNodes;
73 x.free;