QcPenPrinter: no need to allocate QPrintDialog on heap
[supercollider.git] / HelpSource / Classes / PatternConductor.schelp
blob5cb0779bf309cc210664da7f60e68327051bfcbe
1 class:: PatternConductor
2 summary:: Simple interactive control for playing patterns
3 related:: Classes/Pattern
4 categories:: Streams-Patterns-Events>Patterns
6 description::
8 PatternConductor provides a simple interactive control (supporting play, pause, resume, stop) for playing pattern, much like link::Classes/Pattern#-play::. However, PatternConductor creates its own clock and directly controls the release of sounding notes as well as their initiation by the pattern.
10 InstanceMethods::
12 private::prPlay
14 method::tempo
15 Sets the tempo of the PatternConductor
17 method::play
18 Play the pattern. A link::Classes/TempoClock:: is created, its tempo is set to the PatternConductor tempo, and the pattern is played using that clock. If quant is non-zero, this is synchronized with TempoClock.default at the specified quantization.
20 method::pause
21 Pause the pattern, sustaining notes indefinitely. A subsequent link::#-resume:: will return to the original tempo (so the notes will end as scheduled). A subsequent link::#-play:: will cut-off any sounding notes and resume play at the original tempo.
23 method::stop
24 can cut-off or shorten sounding notes, depending on the value of tempo. If stopTempo is nil, all notes are cut-off immediately. Otherwise, notes end at the specified tempo.
26 Examples::
28 code::
30 // a pattern with long notes
31 p = Pbind(
32         \freq, Pwhite(0,log(32)).exp.round(1) * 36.midicps,
33         \detune, Pfunc({ | ev | ev[\freq]  * rand(0.01) }),
34         \sustain, Pwhite(log(0.1), log(20)).exp,
35         \dur, Prand([0.1,0.1,0.1,0.1,0.2,1,2],inf),
36         \db, Pstep(Pseq([-20,-30,-25,-30], inf),0.2)
39 // unrelated cluster pattern running on TempoClock.default
40 Pbind(\dur,2, \midinote, Pseq([(48..60)],20), \db, -30).play;
42 // make a conductor
43 a = PatternConductor(p, quant: 2);
44 a.play;
48 // now try some interactive control options line by line:
49 a.quant = 0;
50 a.pause;
51 a.resume;
52 a.stop;
53 a.play;
54 a.pause;
55 a.play;
56 a.stop(1000);