Explicitly include a boost "windows" folder even on linux
[supercollider.git] / HelpSource / Classes / Phasor.schelp
blob96f0018aa46a6ae9b5330ac3cf6cc22702effe9a
1 class:: Phasor
2 summary:: A resettable linear ramp between two levels.
3 categories::  UGens>Triggers, UGens>Buffer
6 Description::
8 Phasor is a linear ramp between start and end values. When its trigger
9 input crosses from non-positive to positive, Phasor's output will jump to
10 its reset position. Upon reaching the end of its ramp Phasor will wrap
11 back to its start.
14 note::
15 N.B. Since end is defined as the wrap point, its value is never
16 actually output.
19 Phasor is commonly used as an index control with  link::Classes/BufRd::
20 and  link::Classes/BufWr:: .
23 classmethods::
25 method::ar, kr
27 argument::trig
29 When triggered, jump to resetPos (default: 0, equivalent to
30 start).
33 argument::rate
35 The amount of change per sample, i.e at a rate of 1 the value of
36 each sample will be 1 greater than the preceding sample.
39 argument::start
41 Start point of the ramp.
44 argument::end
46 End point of the ramp.
49 argument::resetPos
51 The value to jump to upon receiving a trigger.
54 Examples::
56 code::
58 // phasor controls sine frequency: end frequency matches a second sine wave.
61 { var trig, rate, x, sr;
62         rate = MouseX.kr(0.2, 2, 1);
63         trig = Impulse.ar(rate);
64         sr = SampleRate.ir;
65         x = Phasor.ar(trig, rate / sr);
66         SinOsc.ar(
67                 [
68                         LinLin.kr(x, 0, 1, 600, 1000), // convert range from 0..1 to 600..1000
69                         1000 // constant second frequency
70                 ], 0, 0.2)
72 }.play;
76 // two phasors control two sine frequencies: mouse y controls resetPos of the second
78 { var trig, rate, x, sr;
79         rate = MouseX.kr(1, 200, 1);
80         trig = Impulse.ar(rate);
81         sr = SampleRate.ir;
82         x = Phasor.ar(trig, rate / sr, 0, 1, [0, MouseY.kr(0, 1)]);
83         SinOsc.ar(x * 500 + 500, 0, 0.2)
84 }.play;
88 // use phasor to index into a sound file
90 // allocate a buffer with a sound file
91 b = Buffer.read(s, Platform.resourceDir +/+ "sounds/a11wlk01.wav");
93 // simple playback (more examples: see BufRd)
94 // Start and end here are defined as 0 and the number of frames in the buffer.
95 // This means that the Phasor will output values from 0 to numFrames - 1 before looping,
96 // which is perfect for driving BufRd. (See note above)
97 { BufRd.ar(1, b.bufnum, Phasor.ar(0, BufRateScale.kr(b.bufnum), 0, BufFrames.kr(b.bufnum))) }.play;
100 // two phasors control two sound file positions: mouse y controls resetPos of the second
102 { var trig, rate, framesInBuffer;
103         rate = MouseX.kr(0.1, 100, 1);
104         trig = Impulse.ar(rate);
105         framesInBuffer = BufFrames.kr(b.bufnum);
106         x = Phasor.ar(trig, BufRateScale.kr(b.bufnum), 0, framesInBuffer,
107                 [0, MouseY.kr(0, framesInBuffer)]);
108         BufRd.ar(1, b.bufnum, x);
109 }.play;