Merge pull request #506 from andrewcsmith/patch-2
[supercollider.git] / HelpSource / Classes / LinExp.schelp
blob286cb455d3fb850d3764f9de899935f43fa5de02
1 class:: LinExp
2 summary:: Map a linear range to an exponential range
3 related:: Classes/LinLin
4 categories::  UGens>Maths
7 Description::
9 Converts a linear range of values to an exponential range of values.
11 classmethods::
13 method::ar, kr
15 argument::in
17 The input signal to convert.
20 argument::srclo
22 Lower limit of input range.
25 argument::srchi
27 Upper limit of input range.
30 argument::dstlo
32 Lower limit of output range.
35 argument::dsthi
37 Upper limit of output range.
39 discussion::
40 The code::dstlo::  and  code::dsthi::  arguments
41 must be nonzero and have the same sign.
44 Examples::
46 code::
47 // compare:
50         var mod = SinOsc.kr(Line.kr(1, 10, 10));
51         SinOsc.ar(mod * 400 + 500) * 0.1
52 }.play;
57         var mod = SinOsc.kr(Line.kr(1, 10, 10));
58         SinOsc.ar(LinExp.kr(mod, -1,1, 100, 900)) * 0.1
59 }.play;
62 // modulating destination values.
65         var mod = LFNoise2.ar(80);
66         SinOsc.ar(LinExp.ar(mod, -1,1, MouseX.kr(200, 8000, 1), MouseY.kr(200, 8000, 1))) * 0.1
67 }.play;
71 code::linexp:: and code::exprange:: can be used to create a LinExp implicitly from a ugen, mapping its output values from linear range to an exponential one. The rate is derived from the ugen.
73 code::
74 // linexp
77         var mod = LFNoise2.ar(80);
78         SinOsc.ar(mod.linexp(-1,1, MouseX.kr(200, 8000, 1), MouseY.kr(200, 8000, 1))) * 0.1
79 }.play;
82 // exprange
85         var mod = LFNoise2.ar(80).exprange(MouseX.kr(200, 8000, 1), MouseY.kr(200, 8000, 1));
86         SinOsc.ar(mod) * 0.1
87 }.play;