Scale:degreeToRatio should handle degrees outside of one octave's range
[supercollider.git] / SCClassLibrary / Common / Audio / Splay.sc
blobd3fd59a08ab023f4500bf5b9f1e2b4790d41c4f0
1 Splay : UGen {
2         
3         *new1 { arg rate, spread = 1, level = 1, center = 0.0, levelComp = true ... inArray;
4                 
5                 var n = max(2, inArray.size); 
6                 var n1 = n - 1;
7                 var positions = ((0 .. n1) * (2 / n1) - 1) * spread + center;
9                 if (levelComp) { 
10                         if(rate == \audio) {
11                                 level = level * n.reciprocal.sqrt 
12                         } {
13                                 level = level / n
14                         }
15                  };
16                  
17                 ^Pan2.perform(this.methodSelectorForRate(rate), inArray, positions).sum * level;
18         }
19         
20         *kr { arg inArray, spread = 1, level = 1, center = 0.0, levelComp = true;
21                 ^this.multiNewList([\control, spread, level, center, levelComp] ++ inArray)
22                 
23         }
24         
25         *ar { arg inArray, spread = 1, level = 1, center = 0.0, levelComp = true;
26                 ^this.multiNewList([\audio, spread, level, center, levelComp] ++ inArray)
27         }
28         
29         /*
30         
31         *ar { arg inArray, spread = 1, level = 1, center = 0.0, levelComp = true;
32                 
33                 var n = inArray.size.max(2); 
34                 var n1 = n-1;
36                 if (levelComp) { level = level * n.reciprocal.sqrt };
38                 ^Pan2.ar(
39                         inArray,
40                         ((0 .. n1) * (2 / n1) - 1) * spread + center
41                 ).sum * level;
42         }
43         
44         */
46         *arFill { arg n, function, spread = 1, level = 1, center = 0.0, levelComp = true;
47                 ^this.ar((function ! n), spread, level, center, levelComp)
48         }
53 SplayAz : UGen {
54         
55         *new1 { arg rate, numChans = 4, spread = 1, level = 1, width = 2, center = 0.0,
56                         orientation = 0.5, levelComp = true ... inArray;
58                 var n = max(1, inArray.size); 
59                 var moreOuts = numChans > n;
60                 var positions = ((0 .. n-1) / n * 2) * spread + center;
61                 
63                 if (levelComp) { 
64                         if(rate == \audio) {
65                                 level = level * n.reciprocal.sqrt 
66                         } {
67                                 level = level / n
68                         }
69                  };
70                  
71                 if (moreOuts) { inArray = inArray * level };
73                 ^PanAz.perform(
74                         this.methodSelectorForRate(rate),
75                         numChans,
76                         inArray,
77                         positions,
78                         1,
79                         width,
80                         orientation
81                 ).sum * if (moreOuts) { 1 } { level };
82         }
83         
84         *kr { arg numChans = 4, inArray, spread = 1, level = 1, width = 2, center = 0.0,
85                         orientation = 0.5, levelComp = true;
86                  ^this.multiNewList([\control, numChans, spread, level, width, center,
87                         orientation, levelComp] ++ inArray)
88         }
89         
90         *ar { arg numChans = 4, inArray, spread = 1, level = 1, width = 2, center = 0.0,
91                         orientation = 0.5, levelComp = true;
92                  ^this.multiNewList([\audio, numChans, spread, level, width, center,
93                         orientation, levelComp] ++ inArray)
94         }
97         /**ar { arg numChans = 4, inArray, spread = 1, level = 1, width = 2, center = 0.0,
98                         orientation = 0.5, levelComp = true;
100                 var n = inArray.size.max(1);
101                 var moreOuts = numChans > n;
103                 if (levelComp) { level = level * n.reciprocal.sqrt };
104                 if (moreOuts) { inArray = inArray * level };
106                 ^PanAz.ar(
107                         numChans,
108                         inArray,
109                         ((0 .. n-1) / n * 2) * spread + center,
110                         1,
111                         width,
112                         orientation
113                 ).sum * if (moreOuts, 1, level);
114         }
116         *arFill { arg numChans = 4, n, function, spread = 1, level = 1, width = 2, center = 0.0,
117                 orientation = 0.5, levelComp = true;
118                 ^this.ar(numChans, function ! n, spread, level, width, center,
119                 orientation, levelComp)
120         }
125 SplayZ {
126         *ar { arg numChans = 4, inArray, spread = 1, level = 1, width = 2, center = 0.0,
127                         orientation = 0.5, levelComp = true;
129                 var n = inArray.size.max(2); 
130                 var n1 = n - 1;
132                 if (levelComp) { level = level * n.reciprocal.sqrt };
134                 "SplayZ is deprecated, because its geometry is wrong.
135                 Please convert to SplayAz.".inform;
137                 ^PanAz.ar(
138                         numChans,
139                         inArray,
140                         ((0 .. n1) * (2 / n1) - 1) * spread + center,
141                         1,
142                         width,
143                         orientation
144                 ).sum * level;
145         }
147         *arFill { arg numChans = 4, n, function, spread = 1, level = 1, width = 2, center = 0.0,
148                 orientation = 0.5, levelComp = true;
149                 ^this.ar(numChans, function ! n, spread, level, width, center,
150                 orientation, levelComp)
151         }