Merge pull request #506 from andrewcsmith/patch-2
[supercollider.git] / SCClassLibrary / Common / Audio / Line.sc
blob5dec65496d5de85971fcdf38e706111c9acf3cb1
1 Line : UGen {
2         *ar { arg start=0.0, end = 1.0, dur = 1.0, mul = 1.0, add = 0.0, doneAction = 0;
3                 ^this.multiNew('audio', start, end, dur, doneAction).madd(mul, add)
4         }
5         *kr { arg start=0.0, end = 1.0, dur = 1.0, mul = 1.0, add = 0.0, doneAction = 0;
6                 ^this.multiNew('control',  start, end, dur, doneAction).madd(mul, add)
7         }
10 XLine : UGen {
11         *ar { arg start=1.0, end = 2.0, dur = 1.0, mul = 1.0, add = 0.0, doneAction = 0;
12                 ^this.multiNew('audio', start, end, dur, doneAction).madd(mul, add)
13         }
14         *kr { arg start=1.0, end = 2.0, dur = 1.0, mul = 1.0, add = 0.0, doneAction = 0;
15                 ^this.multiNew('control',  start, end, dur, doneAction).madd(mul, add)
16         }
19 LinExp : PureUGen {
20         checkInputs { ^this.checkSameRateAsFirstInput }
21         *ar { arg in=0.0, srclo = 0.0, srchi = 1.0, dstlo = 1.0, dsthi = 2.0;
22                 ^this.multiNew('audio', in, srclo, srchi, dstlo, dsthi)
23         }
24         *kr { arg in=0.0, srclo = 0.0, srchi = 1.0, dstlo = 1.0, dsthi = 2.0;
25                 ^this.multiNew('control',  in, srclo, srchi, dstlo, dsthi)
26         }
29 LinLin {
30         *ar { arg in=0.0, srclo = 0.0, srchi = 1.0, dstlo = 1.0, dsthi = 2.0;
31                 var scale  = (dsthi - dstlo) / (srchi - srclo);
32                 var offset = dstlo - (scale * srclo);
34                 ^MulAdd(in, scale, offset)
35         }
36         *kr { arg in=0.0, srclo = 0.0, srchi = 1.0, dstlo = 1.0, dsthi = 2.0;
37                 var scale  = (dsthi - dstlo) / (srchi - srclo);
38                 var offset = dstlo - (scale * srclo);
40                 ^(in * scale + offset)
41         }
44 AmpComp : PureUGen {
45         *ir { arg freq = 60.midicps, root = 60.midicps, exp = 0.3333;
46                 ^this.multiNew('scalar', freq, root, exp)
47         }
48         *ar { arg freq = 60.midicps, root = 60.midicps, exp = 0.3333;
49                 ^this.multiNew('audio', freq, root, exp)
50         }
51         *kr { arg freq = 60.midicps, root = 60.midicps, exp = 0.3333;
52                 ^this.multiNew('control', freq, root, exp)
53         }
54         checkInputs { ^if(rate === \audio) { this.checkSameRateAsFirstInput } }
57 AmpCompA : AmpComp {
58         *ir { arg freq = 1000, root = 0, minAmp = 0.32, rootAmp = 1.0;
59                 ^this.multiNew('scalar', freq, root, minAmp, rootAmp)
60         }
61         *ar { arg freq = 1000, root = 0, minAmp = 0.32, rootAmp = 1.0;
62                 ^this.multiNew('audio', freq, root, minAmp, rootAmp)
63         }
64         *kr { arg freq = 1000, root = 0, minAmp = 0.32, rootAmp = 1.0;
65                 ^this.multiNew('control', freq, root, minAmp, rootAmp)
66         }
69 K2A : PureUGen { // control rate to audio rate converter
70         *ar { arg in = 0.0;
71                 ^this.multiNew('audio', in)
72         }
75 A2K : PureUGen { // audio rate to control rate converter. only needed in specific cases
76         *kr { arg in = 0.0;
77                 ^this.multiNew('control', in)
78         }
81 T2K : A2K { // audio rate to control rate trigger converter.
82         checkInputs {
83                 if(inputs.at(0).rate != \audio) {
84                         ^"first input is not audio rate"
85                 };
86                 ^nil
87         }
90 T2A : K2A { // control rate to audio rate trigger converter.
91         *ar { arg in = 0.0, offset = 0;
92                 ^this.multiNew('audio', in, offset)
93         }
96 DC : MultiOutUGen {
97         *ar { arg in=0.0;
98                 ^this.multiNew('audio', in)
99         }
100         *kr { arg in=0.0;
101                 ^this.multiNew('control', in)
102         }
103         init { arg ... argInputs;
104                 inputs = argInputs;
105                 ^this.initOutputs(inputs.size, rate)
106         }
109 Silent {
110         *ar { arg numChannels = 1;
111                 var sig = DC.ar(0);
112                 if (numChannels == 1) {
113                         ^sig
114                 } {
115                         ^(sig ! numChannels)
116                 }
117         }