84 lines
1.4 KiB
Text
84 lines
1.4 KiB
Text
|
class:: DegreeToKey
|
||
|
summary:: Convert signal to modal pitch.
|
||
|
categories:: UGens>Conversion
|
||
|
|
||
|
|
||
|
Description::
|
||
|
|
||
|
The input signal value is truncated to an integer value and used as an
|
||
|
index into an octave repeating table of note values. Indices wrap around
|
||
|
the table and shift octaves as they do.
|
||
|
|
||
|
|
||
|
classmethods::
|
||
|
|
||
|
method::ar, kr
|
||
|
|
||
|
argument::bufnum
|
||
|
|
||
|
Index of the buffer which contains the steps for each scale
|
||
|
degree.
|
||
|
|
||
|
|
||
|
argument::in
|
||
|
|
||
|
The input signal.
|
||
|
|
||
|
|
||
|
argument::octave
|
||
|
|
||
|
The number of steps per octave in the scale.
|
||
|
|
||
|
|
||
|
argument::mul
|
||
|
|
||
|
Output will be multiplied by this value.
|
||
|
|
||
|
|
||
|
argument::add
|
||
|
|
||
|
This value will be added to the output.
|
||
|
|
||
|
|
||
|
Examples::
|
||
|
|
||
|
code::
|
||
|
|
||
|
(
|
||
|
// modal space
|
||
|
// mouse x controls discrete pitch in dorian mode
|
||
|
var scale, buffer;
|
||
|
scale = FloatArray[0, 2, 3.2, 5, 7, 9, 10]; // dorian scale
|
||
|
buffer = Buffer.alloc(s, scale.size,1, {|b| b.setnMsg(0, scale) });
|
||
|
|
||
|
play({
|
||
|
var mix;
|
||
|
|
||
|
mix =
|
||
|
|
||
|
// lead tone
|
||
|
SinOsc.ar(
|
||
|
(
|
||
|
DegreeToKey.kr(
|
||
|
buffer.bufnum,
|
||
|
MouseX.kr(0,15), // mouse indexes into scale
|
||
|
12, // 12 notes per octave
|
||
|
1, // mul = 1
|
||
|
72 // offset by 72 notes
|
||
|
)
|
||
|
+ LFNoise1.kr([3,3], 0.04) // add some low freq stereo detuning
|
||
|
).midicps, // convert midi notes to hertz
|
||
|
0,
|
||
|
0.1)
|
||
|
|
||
|
// drone 5ths
|
||
|
+ RLPF.ar(LFPulse.ar([48,55].midicps, 0.15),
|
||
|
SinOsc.kr(0.1, 0, 10, 72).midicps, 0.1, 0.1);
|
||
|
|
||
|
// add some 70's euro-space-rock echo
|
||
|
CombN.ar(mix, 0.31, 0.31, 2, 1, mix)
|
||
|
})
|
||
|
)
|
||
|
|
||
|
::
|