File: KmeansToBPSet1.html

package info (click to toggle)
supercollider-sc3-plugins 3.7.1~repack-2
  • links: PTS, VCS
  • area: main
  • in suites: stretch
  • size: 14,332 kB
  • ctags: 11,704
  • sloc: cpp: 140,180; lisp: 14,746; ansic: 2,133; xml: 86; makefile: 82; haskell: 21; sh: 8
file content (141 lines) | stat: -rw-r--r-- 11,177 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  <meta http-equiv="Content-Style-Type" content="text/css">
  <title></title>
  <meta name="Generator" content="Cocoa HTML Writer">
  <meta name="CocoaVersion" content="824.41">
  <style type="text/css">
    p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 9.0px Monaco; color: #bf0000}
    p.p2 {margin: 0.0px 0.0px 0.0px 0.0px; font: 18.0px Helvetica; min-height: 22.0px}
    p.p3 {margin: 0.0px 0.0px 0.0px 0.0px; font: 18.0px Helvetica}
    p.p4 {margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica}
    p.p5 {margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica; min-height: 14.0px}
    p.p6 {margin: 0.0px 0.0px 0.0px 0.0px; font: 9.0px Monaco; min-height: 12.0px}
    p.p7 {margin: 0.0px 0.0px 0.0px 0.0px; font: 9.0px Monaco}
    span.s1 {color: #0000bf}
    span.s2 {color: #007300}
    span.s3 {color: #bf0000}
    span.s4 {color: #000000}
    span.Apple-tab-span {white-space:pre}
  </style>
</head>
<body>
<p class="p1">//SLUGens released under the GNU GPL as extensions for SuperCollider 3, by Nick Collins, http://composerprogrammer.com/index.html</p>
<p class="p2"><b></b><br></p>
<p class="p3"><b>KmeansToBPSet1<span class="Apple-tab-span">	</span><span class="Apple-tab-span">	</span><span class="Apple-tab-span">	</span>K-means Oscillator</b></p>
<p class="p2"><b></b><br></p>
<p class="p4"><b>KmeansToBPSet1.ar(freq, numdatapoints, maxnummeans, nummeans, tnewdata, tnewmeans, soft, bufnum, mul, add)</b></p>
<p class="p5"><br></p>
<p class="p4">Uses succesive iterations of a k-means clustering algorithm on random data with random initial means to form break points in a 2-D space. These are then converted to wavetables in output synthesis based on the oscillator frequency.<span class="Apple-converted-space"> </span></p>
<p class="p5"><br></p>
<p class="p4"><b>freq</b>- frequency of oscillator<span class="Apple-converted-space"> </span></p>
<p class="p4"><b>numdatapoints</b>- Initial number of data points</p>
<p class="p4"><b>maxnummeans</b>- Maximum number of means allowed</p>
<p class="p4"><b>nummeans-</b> current num means</p>
<p class="p4"><b>tnewdata</b>- If a trigger is received, reset source data (k-rate)</p>
<p class="p4"><b>tnewmeans</b>- If a trigger is received, reset means (k-rate)</p>
<p class="p4"><b>soft</b>- Proportion to soften means update. If 1.0, immediate update, 0.0 no update, proportion inbetween amount to move from the old mean position to the new mean of the allocated cluster (ie soft k-means).</p>
<p class="p4"><b>bufnum</b>- Number of a Buffer which contains positions for means and data points; see examples below <span class="Apple-converted-space"> </span></p>
<p class="p6"><br></p>
<p class="p6"><br></p>
<p class="p1">//defaults</p>
<p class="p7">{<span class="s1">Out</span>.ar(0,<span class="s1">Pan2</span>.ar(0.1*<span class="s1">KmeansToBPSet1</span>.ar,0.0))}.play</p>
<p class="p6"><br></p>
<p class="p6"><br></p>
<p class="p7">{<span class="s1">Out</span>.ar(0,<span class="s1">Pan2</span>.ar(0.1*<span class="s1">KmeansToBPSet1</span>.ar(440,20,8,8,<span class="s1">Impulse</span>.kr(5),0),0.0))}.play</p>
<p class="p6"><br></p>
<p class="p1">//softened</p>
<p class="p7">{<span class="s1">Out</span>.ar(0,<span class="s1">Pan2</span>.ar(0.1*<span class="s1">KmeansToBPSet1</span>.ar(440,20,4,4,0,<span class="s1">Impulse</span>.kr(5),<span class="s1">MouseX</span>.kr(0.0,1.0)),0.0))}.play</p>
<p class="p6"><br></p>
<p class="p6"><br></p>
<p class="p7">{<span class="s1">Out</span>.ar(0,<span class="s1">Pan2</span>.ar(0.1*<span class="s1">KmeansToBPSet1</span>.ar(440,20,4,4,0,<span class="s1">Impulse</span>.kr(5)),0.0))}.play</p>
<p class="p6"><br></p>
<p class="p6"><br></p>
<p class="p7">{<span class="s1">Out</span>.ar(0,<span class="s1">Pan2</span>.ar(0.1*<span class="s1">KmeansToBPSet1</span>.ar(440,20,4,4,<span class="s1">Impulse</span>.kr(5,0.5),<span class="s1">Impulse</span>.kr(5)),0.0))}.play</p>
<p class="p6"><br></p>
<p class="p6"><br></p>
<p class="p7">{<span class="s1">Out</span>.ar(0,<span class="s1">Pan2</span>.ar(0.1*<span class="s1">KmeansToBPSet1</span>.ar(<span class="s1">MouseX</span>.kr(200,880),20,4,4,<span class="s1">Impulse</span>.kr(<span class="s1">MouseY</span>.kr(1,100,<span class="s2">'exponential'</span>),0.5),<span class="s1">Impulse</span>.kr(<span class="s1">LFNoise1</span>.kr(0.2,5,6))),0.0))}.play</p>
<p class="p6"><br></p>
<p class="p6"><br></p>
<p class="p7">{<span class="s1">Out</span>.ar(0,<span class="s1">Pan2</span>.ar(0.1*<span class="s1">KmeansToBPSet1</span>.ar(440,30,10,<span class="s1">MouseY</span>.kr(1,10,<span class="s2">'linear'</span>),<span class="s1">Impulse</span>.kr(2,0.5),<span class="s1">Impulse</span>.kr(<span class="s1">LFNoise1</span>.kr(0.2,5,6))),0.0))}.play</p>
<p class="p6"><br></p>
<p class="p6"><br></p>
<p class="p1">//pushing up amount of data and num means (also increases CPU cost)</p>
<p class="p7">{<span class="s1">Out</span>.ar(0,<span class="s1">Pan2</span>.ar(0.1*<span class="s1">KmeansToBPSet1</span>.ar(440,100,20,<span class="s1">MouseY</span>.kr(1,20,<span class="s2">'linear'</span>),<span class="s1">Impulse</span>.kr(0.2,0.5),<span class="s1">Impulse</span>.kr(<span class="s1">LFNoise1</span>.kr(0.23))),0.0))}.play</p>
<p class="p6"><br></p>
<p class="p6"><br></p>
<p class="p1">//pushing up amount of data and num means (also increases CPU cost)</p>
<p class="p7">{<span class="s1">Out</span>.ar(0,<span class="s1">Pan2</span>.ar(0.1*<span class="s1">KmeansToBPSet1</span>.ar(<span class="s1">MouseX</span>.kr(20,500,<span class="s2">'exponential'</span>),200,40,<span class="s1">MouseY</span>.kr(1,40,<span class="s2">'linear'</span>),<span class="s1">Impulse</span>.kr(0.57,0.5),<span class="s1">Impulse</span>.kr(<span class="s1">LFNoise1</span>.kr(0.53))),0.0))}.play</p>
<p class="p6"><br></p>
<p class="p6"><br></p>
<p class="p1">//softening</p>
<p class="p7">{<span class="s1">Out</span>.ar(0,<span class="s1">Pan2</span>.ar(0.1*<span class="s1">KmeansToBPSet1</span>.ar(<span class="s1">MouseX</span>.kr(20,500,<span class="s2">'exponential'</span>),200,20,20,<span class="s1">Impulse</span>.kr(0.57,0.5),<span class="s1">Impulse</span>.kr(<span class="s1">LFNoise1</span>.kr(0.53)),<span class="s1">MouseY</span>.kr(0.0,1.0)),0.0))}.play</p>
<p class="p6"><br></p>
<p class="p1">//softened</p>
<p class="p7">{<span class="s1">Out</span>.ar(0,<span class="s1">Pan2</span>.ar(0.1*<span class="s1">KmeansToBPSet1</span>.ar(44+<span class="s1">Dust</span>.kr(10,10),30,10,10,<span class="s1">Impulse</span>.kr(0.1),<span class="s1">Impulse</span>.kr(<span class="s1">LFNoise0</span>.kr(0.4,0.2,0.3)),<span class="s1">MouseX</span>.kr(0.01,1.0,<span class="s2">'exponential'</span>)-0.01),0.0))}.play</p>
<p class="p6"><br></p>
<p class="p6"><br></p>
<p class="p1">//modulate</p>
<p class="p7">{<span class="s1">Out</span>.ar(0,<span class="s1">Pan2</span>.ar(0.1*<span class="s1">KmeansToBPSet1</span>.ar(<span class="s1">A2K</span>.kr(44+<span class="s1">KmeansToBPSet1</span>.ar(<span class="s1">MouseY</span>.kr(0.1,1000,<span class="s2">'exponential'</span>),soft:0.1,mul:50,add:60)),30,10,10,<span class="s1">Impulse</span>.kr(0.1),<span class="s1">Impulse</span>.kr(<span class="s1">LFNoise0</span>.kr(0.4,0.2,0.3)),<span class="s1">MouseX</span>.kr(0.01,1.0,<span class="s2">'exponential'</span>)-0.01),0.0))}.play</p>
<p class="p6"><br></p>
<p class="p6"><br></p>
<p class="p1">//chordal sequence with character</p>
<p class="p7">{<span class="s1">Out</span>.ar(0,<span class="s1">Pan2</span>.ar(<span class="s1">Mix</span>(0.1*<span class="s1">KmeansToBPSet1</span>.ar(220*[1,5/4,3/2,11/7],20,4,4,<span class="s1">Impulse</span>.kr(0.2),<span class="s1">Impulse</span>.kr(10),<span class="s1">MouseX</span>.kr(0.01,0.5,<span class="s2">'exponential'</span>))),0.0))}.play</p>
<p class="p6"><br></p>
<p class="p6"><br></p>
<p class="p6"><br></p>
<p class="p1">//using a Buffer to select positions for data and reset positions for means</p>
<p class="p6"><br></p>
<p class="p1">//maxmeans will be 5, 20 data points</p>
<p class="p6"><br></p>
<p class="p7">b = <span class="s1">Buffer</span>.alloc(s, (5+20)*2, 1); <span class="s3">//buffer big enough</span></p>
<p class="p6"><br></p>
<p class="p1">//random positions- but they'll be the SAME random positions when resetting</p>
<p class="p1"><span class="s4">b.setn(0,</span><span class="s1">Array</span><span class="s4">.fill(50,{1.0.rand})); </span>//set x,y points (in [0,1] by [0,1] for this UGen)</p>
<p class="p6"><br></p>
<p class="p6"><br></p>
<p class="p7">{<span class="s1">Out</span>.ar(0,<span class="s1">Pan2</span>.ar(0.1*<span class="s1">KmeansToBPSet1</span>.ar(<span class="s1">MouseX</span>.kr(100,1000,<span class="s2">'exponential'</span>), 20, 5, 5, <span class="s1">Impulse</span>.kr(1), <span class="s1">Impulse</span>.kr(1), <span class="s1">MouseY</span>.kr(0.01,1.0),b.bufnum),0.0))}.play</p>
<p class="p6"><br></p>
<p class="p1">//change buffer when you like:</p>
<p class="p6"><br></p>
<p class="p1">//change data</p>
<p class="p1"><span class="s4">b.setn(0,</span><span class="s1">Array</span><span class="s4">.fill(40,{1.0.rand})); </span>//set x,y points (in [0,1] by [0,1] for this UGen)</p>
<p class="p6"><br></p>
<p class="p1">//change means</p>
<p class="p1"><span class="s4">b.setn(40,</span><span class="s1">Array</span><span class="s4">.fill(10,{1.0.rand})); </span>//set x,y points (in [0,1] by [0,1] for this UGen)</p>
<p class="p6"><br></p>
<p class="p6"><br></p>
<p class="p1">//buffer version</p>
<p class="p7">{<span class="s1">Out</span>.ar(0,<span class="s1">Pan2</span>.ar(<span class="s1">Mix</span>(0.1*<span class="s1">KmeansToBPSet1</span>.ar(220*[1,5/4,3/2,11/7],20,5,5,<span class="s1">Impulse</span>.kr(10),<span class="s1">Impulse</span>.kr(10),<span class="s1">MouseX</span>.kr(0.01,0.5,<span class="s2">'exponential'</span>), b.bufnum)),0.0))}.play</p>
<p class="p6"><br></p>
<p class="p6"><br></p>
<p class="p1">//routine playing with mean initial positions</p>
<p class="p7">(</p>
<p class="p7">c= {<span class="s1">inf</span>.do{</p>
<p class="p6"><br></p>
<p class="p7">b.setn(40,<span class="s1">Array</span>.fill(10,{1.0.rand}));<span class="Apple-converted-space"> </span></p>
<p class="p6"><br></p>
<p class="p7"><span class="Apple-converted-space"> </span>rrand(0.1,0.2).wait;}}.fork</p>
<p class="p6"><br></p>
<p class="p7">)</p>
<p class="p7">c.stop;</p>
<p class="p6"><br></p>
<p class="p6"><br></p>
<p class="p6"><br></p>
<p class="p1">//routine playing with data positions</p>
<p class="p6"><br></p>
<p class="p7">(</p>
<p class="p7">d= {<span class="s1">inf</span>.do{</p>
<p class="p6"><br></p>
<p class="p7">b.setn(0,<span class="s1">Array</span>.fill(40,{1.0.rand}));<span class="Apple-converted-space"> </span></p>
<p class="p6"><br></p>
<p class="p7"><span class="Apple-converted-space"> </span>rrand(0.1,0.2).wait;}}.fork</p>
<p class="p6"><br></p>
<p class="p7">)</p>
<p class="p6"><br></p>
<p class="p7">c.stop;</p>
<p class="p7">d.stop;</p>
</body>
</html>