Merge pull request #506 from andrewcsmith/patch-2
[supercollider.git] / HelpSource / Classes / DegreeToKey.schelp
blob1bd6aecfb76e6408f425da5d707d6f64ad40d595
1 class:: DegreeToKey
2 summary:: Convert signal to modal pitch.
3 categories::  UGens>Conversion
6 Description::
8 The input signal value is truncated to an integer value and used as an
9 index into an octave repeating table of note values. Indices wrap around
10 the table and shift octaves as they do.
13 classmethods::
15 method::ar, kr
17 argument::bufnum
19 Index of the buffer which contains the steps for each scale
20 degree.
23 argument::in
25 The input signal.
28 argument::octave
30 The number of steps per octave in the scale.
33 argument::mul
35 Output will be multiplied by this value.
38 argument::add
40 This value will be added to the output.
43 Examples::
45 code::
48 // modal space
49 // mouse x controls discrete pitch in dorian mode
50 var scale, buffer;
51 scale = FloatArray[0, 2, 3.2, 5, 7, 9, 10]; // dorian scale
52 buffer = Buffer.alloc(s, scale.size,1, {|b| b.setnMsg(0, scale) });
54 play({
55         var mix;
57         mix =
59         // lead tone
60         SinOsc.ar(
61                 (
62                         DegreeToKey.kr(
63                                 buffer.bufnum,
64                                 MouseX.kr(0,15),                // mouse indexes into scale
65                                 12,                                     // 12 notes per octave
66                                 1,                                      // mul = 1
67                                 72                                      // offset by 72 notes
68                         )
69                         + LFNoise1.kr([3,3], 0.04)      // add some low freq stereo detuning
70                 ).midicps,                                              // convert midi notes to hertz
71                 0,
72                 0.1)
74         // drone 5ths
75         + RLPF.ar(LFPulse.ar([48,55].midicps, 0.15),
76                 SinOsc.kr(0.1, 0, 10, 72).midicps, 0.1, 0.1);
78         // add some 70's euro-space-rock echo
79         CombN.ar(mix, 0.31, 0.31, 2, 1, mix)