├── euclidean_circular_view
├── sketch.properties
├── euclid_8_3_1.tif
├── euclid_8_5_7.tif
├── euclid_group.jpg
├── euclid_group.psd
├── euclid_16_5_7.tif
├── euclid_16_7_3.tif
└── euclidean_circular_view.pde
├── euclidean-visualization
├── 3over8_final.jpg
├── euclid3over8.gif
├── euclid3over8rot1.jpg
├── README.md
└── euclidean_visualization
│ └── euclidean_visualization.pde
├── README.md
└── max-example
├── euclidSimple.js
└── simpleEuclideanRhythm.maxpat
/euclidean_circular_view/sketch.properties:
--------------------------------------------------------------------------------
1 | mode.id=processing.mode.java.JavaMode
2 | mode=Java
3 |
--------------------------------------------------------------------------------
/euclidean-visualization/3over8_final.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/computermusicdesign/euclidean-rhythm/HEAD/euclidean-visualization/3over8_final.jpg
--------------------------------------------------------------------------------
/euclidean-visualization/euclid3over8.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/computermusicdesign/euclidean-rhythm/HEAD/euclidean-visualization/euclid3over8.gif
--------------------------------------------------------------------------------
/euclidean_circular_view/euclid_8_3_1.tif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/computermusicdesign/euclidean-rhythm/HEAD/euclidean_circular_view/euclid_8_3_1.tif
--------------------------------------------------------------------------------
/euclidean_circular_view/euclid_8_5_7.tif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/computermusicdesign/euclidean-rhythm/HEAD/euclidean_circular_view/euclid_8_5_7.tif
--------------------------------------------------------------------------------
/euclidean_circular_view/euclid_group.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/computermusicdesign/euclidean-rhythm/HEAD/euclidean_circular_view/euclid_group.jpg
--------------------------------------------------------------------------------
/euclidean_circular_view/euclid_group.psd:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/computermusicdesign/euclidean-rhythm/HEAD/euclidean_circular_view/euclid_group.psd
--------------------------------------------------------------------------------
/euclidean_circular_view/euclid_16_5_7.tif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/computermusicdesign/euclidean-rhythm/HEAD/euclidean_circular_view/euclid_16_5_7.tif
--------------------------------------------------------------------------------
/euclidean_circular_view/euclid_16_7_3.tif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/computermusicdesign/euclidean-rhythm/HEAD/euclidean_circular_view/euclid_16_7_3.tif
--------------------------------------------------------------------------------
/euclidean-visualization/euclid3over8rot1.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/computermusicdesign/euclidean-rhythm/HEAD/euclidean-visualization/euclid3over8rot1.jpg
--------------------------------------------------------------------------------
/euclidean-visualization/README.md:
--------------------------------------------------------------------------------
1 |
Simplest euclidean rhythm algorithm visualizer
2 |
3 | Euclidean Rhythm Generator / Demonstration
4 | Ian Hattwick, October 23, 2017
5 |
6 | Processing sketch to create a visualization of the simplest euclidean rhythm algorithm
7 | as explained in the blog post:
8 | http://www.computermusicdesign.com/simplest-euclidean-rhythm-algorithm-explained
9 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | Simplest euclidean rhythm algorithm
2 |
3 | This is example code for the euclidean rhythm algorithm described in the blog post:
4 |
5 | http://www.computermusicdesign.com/simplest-euclidean-rhythm-algorithm-explained
6 |
7 | Files in this repository
8 |
9 | euclidSimple.js -- a simple implementation of our euclidean rhythm algorithm. Includes an implementation of our algorithm in javascript.
10 |
11 | simpleEuclideanRhythm.maxpat -- a basic max patch to demonstrate the functionality of euclidSimple.js.
12 |
13 | euclidean_circular_view.pde -- A processing sketch to create circular visualizations of euclidean rhythms. Includes an implementation of our algorithm in C.
14 |
15 | euclidean-visualization.pde -- A processing sketch to create visualizations for the blogpost.
--------------------------------------------------------------------------------
/max-example/euclidSimple.js:
--------------------------------------------------------------------------------
1 | /*
2 | Ian Hattwick
3 | October 21, 2017
4 | Euclidean rhythm generator
5 |
6 | Generates and stores a euclidean rhythm in the array "storedRhythm"
7 |
8 | After Godfried Toussaint's paper:
9 | http://cgm.cs.mcgill.ca/~godfried/publications/banff.pdf
10 | using a variation of 11olsen's implementation:
11 | https://cycling74.com/forums/using-euclideanbjorklund-algorithm-for-rhythm-generation-purely-in-max/
12 |
13 | functions:
14 | euclid (steps in sequence, pulses in sequence, number of steps to rotate)
15 | - generate a euclidean rhythm and stores in array "storedRhythm"
16 | rotateSeq(array to rotate, length in steps, number of steps to rotate)
17 | - returns the input array rotated by the specified number of steps
18 | int() - integer value of current beat,
19 | outputs state of current step out left outlet (pulse or no pulse)
20 |
21 | output:
22 | 0: indicates 1 for pulse at current beat, or 0 for no pulse
23 | 1: connect to a matrixcontrol to visualize
24 | */
25 | autowatch = 1;
26 | inlets = 1;
27 | outlets = 3;
28 |
29 | //create an array to store the rhythm
30 | var storedRhythm = new Array(0,0,0,0);
31 |
32 | //calculate a euclidean rhythm
33 | function euclid( steps, pulses, rotate){
34 | rotate += 1;
35 | rotate % steps;
36 | storedRhythm = []; //empty current track
37 | var bucket = 0;
38 |
39 | //fill track with rhythm
40 | for(var i=0;i< steps;i++){
41 | bucket += pulses;
42 | if(bucket >= steps) {
43 | bucket -= steps;
44 | storedRhythm.push(1);
45 | } else {
46 | storedRhythm.push(0);
47 | }
48 | }
49 |
50 | //rotate
51 | if(rotate > 0) storedRhythm = rotateSeq(storedRhythm, steps, rotate);
52 |
53 | //send output visualization
54 | sendOutput(storedRhythm);
55 | }
56 |
57 | //rotate a sequence
58 | function rotateSeq(seq2, steps, rotate){
59 | var output = new Array(steps);
60 | var val = steps - rotate;
61 | for(var i=0;i 0) outlet(2, "frgb", 0,0,0);
86 | else outlet(2, "frgb", 255,255,255);
87 | outlet(2, "paintrect",i*40,0,i*40+40,40);
88 | }
89 | outlet(2, "frgb", 150,150,150);
90 | outlet(2, "paintoval",step*40+5,5,step*40+35,35);
91 | }
92 |
93 |
--------------------------------------------------------------------------------
/euclidean_circular_view/euclidean_circular_view.pde:
--------------------------------------------------------------------------------
1 | /**
2 | * Euclidean Rhythm Circular Visualizer
3 | * Ian Hattwick, December 4, 2017
4 | *
5 | * Processing v2 sketch to create a circular visualization of euclidean rhythms.
6 | * Utilizes the simplest euclidean rhythm algorithm as explained in the blog post:
7 | * http://www.computermusicdesign.com/simplest-euclidean-rhythm-algorithm-explained
8 | */
9 |
10 | int size = 500;
11 | float scale = 0.9;
12 | int steps = 8;
13 | int pulses = 3;
14 | int rotate = 1;
15 | int tSize = 40;
16 |
17 | //this determines whether the program saves jpgs of image
18 | int PRINT_OUTPUT = 1;
19 |
20 | //create an array to store the rhythm
21 | int[] storedRhythm = new int[0];
22 |
23 | void setup(){
24 | size(size,size);
25 | noStroke();
26 | background(255);
27 | fill(0);
28 |
29 | //generate a euclidean rhythm and store in storedRhythm
30 | euclid(steps,pulses,rotate);
31 | for(int i=0;i= steps) {
95 | bucket -= steps;
96 | storedRhythm = append( storedRhythm, 1);
97 | } else {
98 | storedRhythm = append( storedRhythm, 0);
99 | }
100 | }
101 |
102 | //rotate
103 | if(rotate > 0) rotateSeq( steps, rotate);
104 | }
105 |
106 | //rotate a sequence
107 | void rotateSeq( int steps, int rotate){
108 | int[] output = new int[steps];
109 | int val = steps - rotate;
110 | for(int i=0;i 0) {
118 | storedRhythm = shorten(storedRhythm);
119 | }
120 | }
121 |
122 | /*
123 | Print a text label for each arc segment
124 | */
125 | void drawLabel( int num){
126 | int curNum = num - 1;
127 | if(curNum < 0) curNum=steps-1;
128 | String t = str(curNum);
129 | float x,y;
130 | float curAngle = ((float)-(num+0)/steps * TWO_PI) + PI + (TWO_PI/steps/2);
131 | float textScale = 0.89;
132 | x = sin(curAngle) * width/2 * textScale * scale + width/2 ;
133 | y = cos(curAngle) * width/2 * textScale * scale + width/2 + tSize*0.6/2;
134 |
135 | textSize(tSize*0.6);
136 | textAlign(CENTER);
137 | text(t, x, y);
138 | }// drawLabel()
139 |
140 | //write text indicating current settings
141 | void drawText(String t, int num, int x, int y){
142 |
143 | x += tSize/0.5;
144 | textSize(tSize);
145 | fill(0);
146 | textAlign(RIGHT);
147 | text(t, x, y);
148 | textAlign(LEFT);
149 | //x -= tSize/0.5;
150 | text(str(num), x, y);
151 |
152 | }
153 |
--------------------------------------------------------------------------------
/euclidean-visualization/euclidean_visualization/euclidean_visualization.pde:
--------------------------------------------------------------------------------
1 | /**
2 | * Euclidean Rhythm Generator / Demonstration
3 | * Ian Hattwick, October 23, 2017
4 | *
5 | * Processing sketch to create a visualization of the simplest euclidean rhythm algorithm
6 | * as explained in the blog post:
7 | * http://www.computermusicdesign.com/simplest-euclidean-rhythm-algorithm-explained
8 | */
9 |
10 | //Primary euclidean rhythm parameters.
11 | int STEPS = 8;
12 | int PULSES =3;
13 | int ROTATION = 1; // a rotation of 1 places the first pulse on step 1
14 |
15 | //this determines whether the program saves jpgs of each
16 | //step, for assembling into a GIF
17 | int PRINT_OUTPUT = 0;
18 |
19 | // parameters to change the way the visualization looks
20 | int tSize = 16; //size of text
21 | int diameter; //diameter of pulses circles
22 |
23 | //General global variables
24 | int x, y;
25 | int gridX, gridY; // the spacing between pulse circles and steps
26 | int curStep = 1;
27 | int pulseCounter = PULSES;
28 | int pulseOffset = 0; //used to determine the location of the first beat of pulses
29 |
30 | //timing variables for drawing the beats
31 | long timer = 0;
32 | int firstInterval = 200; //the period between running the program and the first beat
33 | int secondInterval = 1000; //the interval between each subsequent beat
34 | int interval = firstInterval;
35 |
36 | void setup() {
37 | size(1000, 320); //canvas size
38 | background(255);
39 |
40 | diameter = height/((STEPS+1) * 2); //diameter of the circles
41 | //basic grid for where the circles are located
42 | gridX = width/(STEPS + 4 );
43 | gridY = (diameter * (STEPS) * 2) + 4;
44 |
45 | //draw steps
46 | stroke(0);
47 | pulseOffset = STEPS*2;
48 | drawPulses(gridX, gridY, STEPS, 255);
49 | drawLabel( "steps", gridX );
50 |
51 | //draw pulses
52 | stroke(230);
53 | pulseOffset = 0;
54 | drawPulses(gridX * 2, gridY, PULSES, 200);
55 | drawLabel("pulses", gridX * 2);
56 |
57 | //draw boundary line
58 | stroke(0);
59 | x = gridX * 10 / 4;
60 | y = gridY - diameter;
61 | line(x, y, x, STEPS * 2);
62 |
63 | //draw labels for each step
64 | for(int i=0;i interval) {
76 | timer = millis();
77 | interval = secondInterval;
78 |
79 | //If we want to 'brute force' a pulse on step 1, we can take the approach used by 11olsen.
80 | //To implement this, uncomment the following block and set ROTATION to 0.
81 | //Otherwise, keep the following block comment and set ROTATION to 1 to put the first pulse
82 | //on step 1 using regular rotation.
83 | /*
84 | //draw step 1
85 | if (curStep == 100) {
86 | drawPulses(gridX*3, gridY, STEPS, 100, "1");
87 | if (PRINT_OUTPUT==1) save("euclid1.jpg");
88 | }
89 |
90 | //draw subsequent steps
91 | else */ //end block comment
92 | if (curStep <= STEPS) { //for each step
93 | //determine rotation of rhythm, and then draw all of the circles for the current step
94 | drawPulses(calcXrotate(gridX,curStep,ROTATION), gridY, pulseCounter, 200);
95 | //if number of counted pulses exceeds steps, substract steps and display
96 | if (pulseCounter >= STEPS) {
97 | pulseCounter -= STEPS;
98 | pulseOffset = pulseCounter;
99 | }
100 | pulseCounter += PULSES;
101 |
102 | //save a jpg of the progress so far
103 | if (PRINT_OUTPUT==1){
104 | String jpgName = "euclid";
105 | String outName = jpgName.concat(str(curStep));
106 | outName = outName.concat(".jpg");
107 | save(outName);
108 | } //print
109 | } //steps
110 | curStep++;
111 | }//end of millis loop
112 | }//void draw
113 |
114 | /*
115 | Draw the pulses in the bucket on a single step
116 | */
117 | void drawPulses(int x, int y, int num, int cFill) {
118 | int tempY = y;
119 |
120 | //we are going to make the first beat of a pulse a darker color,
121 | //so that we can identify multiple pulses in the bucket
122 | //and then draw each pulses
123 | fill(cFill);
124 | for (int i=0; i= STEPS){
135 | stroke(0);
136 | fill(255,255,255,0);
137 | for (int i=0; i STEPS) curRotate -= STEPS;
162 | int val = gridX*(curStep+curRotate+2);
163 | return val;
164 | } //calcXrotate()
165 |
--------------------------------------------------------------------------------
/max-example/simpleEuclideanRhythm.maxpat:
--------------------------------------------------------------------------------
1 | {
2 | "patcher" : {
3 | "fileversion" : 1,
4 | "appversion" : {
5 | "major" : 7,
6 | "minor" : 2,
7 | "revision" : 2,
8 | "architecture" : "x86",
9 | "modernui" : 1
10 | }
11 | ,
12 | "rect" : [ 34.0, 79.0, 466.0, 586.0 ],
13 | "bglocked" : 0,
14 | "openinpresentation" : 0,
15 | "default_fontsize" : 12.0,
16 | "default_fontface" : 0,
17 | "default_fontname" : "Arial",
18 | "gridonopen" : 1,
19 | "gridsize" : [ 15.0, 15.0 ],
20 | "gridsnaponopen" : 1,
21 | "objectsnaponopen" : 1,
22 | "statusbarvisible" : 2,
23 | "toolbarvisible" : 1,
24 | "lefttoolbarpinned" : 0,
25 | "toptoolbarpinned" : 0,
26 | "righttoolbarpinned" : 0,
27 | "bottomtoolbarpinned" : 0,
28 | "toolbars_unpinned_last_save" : 0,
29 | "tallnewobj" : 0,
30 | "boxanimatetime" : 200,
31 | "enablehscroll" : 1,
32 | "enablevscroll" : 1,
33 | "devicewidth" : 0.0,
34 | "description" : "",
35 | "digest" : "",
36 | "tags" : "",
37 | "style" : "",
38 | "subpatcher_template" : "",
39 | "boxes" : [ {
40 | "box" : {
41 | "id" : "obj-69",
42 | "maxclass" : "comment",
43 | "numinlets" : 1,
44 | "numoutlets" : 0,
45 | "patching_rect" : [ 258.0, 396.200012, 82.0, 20.0 ],
46 | "style" : "",
47 | "text" : "synth presets"
48 | }
49 |
50 | }
51 | , {
52 | "box" : {
53 | "fontsize" : 10.0,
54 | "id" : "obj-67",
55 | "linecount" : 3,
56 | "maxclass" : "message",
57 | "numinlets" : 2,
58 | "numoutlets" : 1,
59 | "outlettype" : [ "" ],
60 | "patching_rect" : [ 268.5, 122.199997, 180.600006, 42.0 ],
61 | "style" : "",
62 | "text" : "http://www.computermusicdesign.com/simplest-euclidean-rhythm-algorithm -explained"
63 | }
64 |
65 | }
66 | , {
67 | "box" : {
68 | "id" : "obj-56",
69 | "maxclass" : "comment",
70 | "numinlets" : 1,
71 | "numoutlets" : 0,
72 | "patching_rect" : [ 5.399995, 44.200001, 150.0, 20.0 ],
73 | "style" : "",
74 | "text" : "October 21, 2017 "
75 | }
76 |
77 | }
78 | , {
79 | "box" : {
80 | "id" : "obj-54",
81 | "maxclass" : "comment",
82 | "numinlets" : 1,
83 | "numoutlets" : 0,
84 | "patching_rect" : [ 5.399995, 77.400002, 202.100006, 20.0 ],
85 | "style" : "",
86 | "text" : "enable metro and dac below to start"
87 | }
88 |
89 | }
90 | , {
91 | "box" : {
92 | "id" : "obj-50",
93 | "maxclass" : "comment",
94 | "numinlets" : 1,
95 | "numoutlets" : 0,
96 | "patching_rect" : [ 5.399995, 59.400002, 434.0, 20.0 ],
97 | "style" : "",
98 | "text" : "example of a simple javascript algorithm for generating euclidean rhythms\n"
99 | }
100 |
101 | }
102 | , {
103 | "box" : {
104 | "id" : "obj-40",
105 | "maxclass" : "comment",
106 | "numinlets" : 1,
107 | "numoutlets" : 0,
108 | "patching_rect" : [ 381.5, 436.200012, 43.0, 20.0 ],
109 | "style" : "",
110 | "text" : "decay"
111 | }
112 |
113 | }
114 | , {
115 | "box" : {
116 | "hidden" : 1,
117 | "id" : "obj-34",
118 | "maxclass" : "newobj",
119 | "numinlets" : 1,
120 | "numoutlets" : 1,
121 | "outlettype" : [ "" ],
122 | "patching_rect" : [ 163.166672, 412.200012, 82.0, 22.0 ],
123 | "style" : "",
124 | "text" : "loadmess 0.1"
125 | }
126 |
127 | }
128 | , {
129 | "box" : {
130 | "fontsize" : 9.0,
131 | "hidden" : 1,
132 | "id" : "obj-32",
133 | "maxclass" : "message",
134 | "numinlets" : 2,
135 | "numoutlets" : 1,
136 | "outlettype" : [ "" ],
137 | "patching_rect" : [ 37.0, 143.199997, 28.0, 19.0 ],
138 | "style" : "",
139 | "text" : "0"
140 | }
141 |
142 | }
143 | , {
144 | "box" : {
145 | "fontsize" : 7.0,
146 | "hidden" : 1,
147 | "id" : "obj-21",
148 | "maxclass" : "message",
149 | "numinlets" : 2,
150 | "numoutlets" : 1,
151 | "outlettype" : [ "" ],
152 | "patching_rect" : [ 225.5, 103.53331, 30.0, 16.0 ],
153 | "style" : "",
154 | "text" : "set $1"
155 | }
156 |
157 | }
158 | , {
159 | "box" : {
160 | "fontsize" : 7.0,
161 | "hidden" : 1,
162 | "id" : "obj-19",
163 | "maxclass" : "message",
164 | "numinlets" : 2,
165 | "numoutlets" : 1,
166 | "outlettype" : [ "" ],
167 | "patching_rect" : [ 268.5, 193.200012, 31.0, 16.0 ],
168 | "style" : "",
169 | "text" : "set $1"
170 | }
171 |
172 | }
173 | , {
174 | "box" : {
175 | "fontsize" : 7.0,
176 | "hidden" : 1,
177 | "id" : "obj-18",
178 | "maxclass" : "message",
179 | "numinlets" : 2,
180 | "numoutlets" : 1,
181 | "outlettype" : [ "" ],
182 | "patching_rect" : [ 128.5, 100.199997, 30.0, 16.0 ],
183 | "style" : "",
184 | "text" : "set $1"
185 | }
186 |
187 | }
188 | , {
189 | "box" : {
190 | "fontsize" : 9.0,
191 | "hidden" : 1,
192 | "id" : "obj-15",
193 | "maxclass" : "newobj",
194 | "numinlets" : 1,
195 | "numoutlets" : 1,
196 | "outlettype" : [ "" ],
197 | "patching_rect" : [ 254.25, 375.200012, 57.0, 19.0 ],
198 | "style" : "",
199 | "text" : "loadmess 1"
200 | }
201 |
202 | }
203 | , {
204 | "box" : {
205 | "fontsize" : 9.0,
206 | "id" : "obj-14",
207 | "maxclass" : "number",
208 | "numinlets" : 1,
209 | "numoutlets" : 2,
210 | "outlettype" : [ "", "bang" ],
211 | "parameter_enable" : 0,
212 | "patching_rect" : [ 11.0, 205.199997, 71.0, 19.0 ],
213 | "style" : ""
214 | }
215 |
216 | }
217 | , {
218 | "box" : {
219 | "fontsize" : 9.0,
220 | "hidden" : 1,
221 | "id" : "obj-5",
222 | "maxclass" : "newobj",
223 | "numinlets" : 1,
224 | "numoutlets" : 0,
225 | "patcher" : {
226 | "fileversion" : 1,
227 | "appversion" : {
228 | "major" : 7,
229 | "minor" : 2,
230 | "revision" : 2,
231 | "architecture" : "x86",
232 | "modernui" : 1
233 | }
234 | ,
235 | "rect" : [ 84.0, 129.0, 206.0, 176.0 ],
236 | "bglocked" : 0,
237 | "openinpresentation" : 0,
238 | "default_fontsize" : 12.0,
239 | "default_fontface" : 0,
240 | "default_fontname" : "Arial",
241 | "gridonopen" : 1,
242 | "gridsize" : [ 15.0, 15.0 ],
243 | "gridsnaponopen" : 1,
244 | "objectsnaponopen" : 1,
245 | "statusbarvisible" : 2,
246 | "toolbarvisible" : 1,
247 | "lefttoolbarpinned" : 0,
248 | "toptoolbarpinned" : 0,
249 | "righttoolbarpinned" : 0,
250 | "bottomtoolbarpinned" : 0,
251 | "toolbars_unpinned_last_save" : 0,
252 | "tallnewobj" : 0,
253 | "boxanimatetime" : 200,
254 | "enablehscroll" : 1,
255 | "enablevscroll" : 1,
256 | "devicewidth" : 0.0,
257 | "description" : "",
258 | "digest" : "",
259 | "tags" : "",
260 | "style" : "",
261 | "subpatcher_template" : "",
262 | "boxes" : [ {
263 | "box" : {
264 | "comment" : "",
265 | "id" : "obj-1",
266 | "maxclass" : "inlet",
267 | "numinlets" : 0,
268 | "numoutlets" : 1,
269 | "outlettype" : [ "" ],
270 | "patching_rect" : [ 50.0, 63.0, 30.0, 30.0 ],
271 | "style" : ""
272 | }
273 |
274 | }
275 | , {
276 | "box" : {
277 | "fontname" : "Arial",
278 | "fontsize" : 9.0,
279 | "id" : "obj-5",
280 | "linecount" : 5,
281 | "maxclass" : "message",
282 | "numinlets" : 2,
283 | "numoutlets" : 1,
284 | "outlettype" : [ "" ],
285 | "patching_rect" : [ 50.0, 100.0, 151.0, 59.0 ],
286 | "style" : "",
287 | "text" : ";\rmax launch_browser http://www.computermusicdesign.com/simplest-euclidean-rhythm-algorithm-explained"
288 | }
289 |
290 | }
291 | ],
292 | "lines" : [ {
293 | "patchline" : {
294 | "destination" : [ "obj-5", 0 ],
295 | "disabled" : 0,
296 | "hidden" : 0,
297 | "source" : [ "obj-1", 0 ]
298 | }
299 |
300 | }
301 | ]
302 | }
303 | ,
304 | "patching_rect" : [ 268.5, 167.5, 32.0, 19.0 ],
305 | "saved_object_attributes" : {
306 | "description" : "",
307 | "digest" : "",
308 | "globalpatchername" : "",
309 | "style" : "",
310 | "tags" : ""
311 | }
312 | ,
313 | "style" : "",
314 | "text" : "p link"
315 | }
316 |
317 | }
318 | , {
319 | "box" : {
320 | "id" : "obj-12",
321 | "maxclass" : "comment",
322 | "numinlets" : 1,
323 | "numoutlets" : 0,
324 | "patching_rect" : [ 5.399995, 29.4, 150.0, 20.0 ],
325 | "style" : "",
326 | "text" : "Ian Hattwick"
327 | }
328 |
329 | }
330 | , {
331 | "box" : {
332 | "fontsize" : 24.0,
333 | "id" : "obj-10",
334 | "maxclass" : "comment",
335 | "numinlets" : 1,
336 | "numoutlets" : 0,
337 | "patching_rect" : [ 5.399995, 4.0, 434.0, 33.0 ],
338 | "style" : "",
339 | "text" : "Simplest euclidean rhythm algorithm "
340 | }
341 |
342 | }
343 | , {
344 | "box" : {
345 | "hidden" : 1,
346 | "id" : "obj-45",
347 | "maxclass" : "newobj",
348 | "numinlets" : 1,
349 | "numoutlets" : 1,
350 | "outlettype" : [ "" ],
351 | "patching_rect" : [ 6.5, 92.866684, 72.0, 22.0 ],
352 | "style" : "",
353 | "text" : "loadmess 1"
354 | }
355 |
356 | }
357 | , {
358 | "box" : {
359 | "id" : "obj-42",
360 | "linecount" : 3,
361 | "maxclass" : "comment",
362 | "numinlets" : 1,
363 | "numoutlets" : 0,
364 | "patching_rect" : [ 2.0, 235.100006, 117.0, 47.0 ],
365 | "style" : "",
366 | "text" : "here we increment the number of the current beat. ",
367 | "textcolor" : [ 1.0, 1.0, 1.0, 1.0 ]
368 | }
369 |
370 | }
371 | , {
372 | "box" : {
373 | "id" : "obj-38",
374 | "linecount" : 2,
375 | "maxclass" : "comment",
376 | "numinlets" : 1,
377 | "numoutlets" : 0,
378 | "patching_rect" : [ 166.166672, 338.400024, 216.0, 33.0 ],
379 | "style" : "",
380 | "text" : "<- each beat returns a '1' if there is a pulse on the beat, or a '0' if there is not"
381 | }
382 |
383 | }
384 | , {
385 | "box" : {
386 | "id" : "obj-36",
387 | "maxclass" : "newobj",
388 | "numinlets" : 5,
389 | "numoutlets" : 1,
390 | "outlettype" : [ "signal" ],
391 | "patcher" : {
392 | "fileversion" : 1,
393 | "appversion" : {
394 | "major" : 7,
395 | "minor" : 2,
396 | "revision" : 2,
397 | "architecture" : "x86",
398 | "modernui" : 1
399 | }
400 | ,
401 | "rect" : [ 59.0, 104.0, 640.0, 480.0 ],
402 | "bglocked" : 0,
403 | "openinpresentation" : 0,
404 | "default_fontsize" : 12.0,
405 | "default_fontface" : 0,
406 | "default_fontname" : "Arial",
407 | "gridonopen" : 1,
408 | "gridsize" : [ 15.0, 15.0 ],
409 | "gridsnaponopen" : 1,
410 | "objectsnaponopen" : 1,
411 | "statusbarvisible" : 2,
412 | "toolbarvisible" : 1,
413 | "lefttoolbarpinned" : 0,
414 | "toptoolbarpinned" : 0,
415 | "righttoolbarpinned" : 0,
416 | "bottomtoolbarpinned" : 0,
417 | "toolbars_unpinned_last_save" : 0,
418 | "tallnewobj" : 0,
419 | "boxanimatetime" : 200,
420 | "enablehscroll" : 1,
421 | "enablevscroll" : 1,
422 | "devicewidth" : 0.0,
423 | "description" : "",
424 | "digest" : "",
425 | "tags" : "",
426 | "style" : "",
427 | "subpatcher_template" : "",
428 | "boxes" : [ {
429 | "box" : {
430 | "id" : "obj-54",
431 | "maxclass" : "newobj",
432 | "numinlets" : 4,
433 | "numoutlets" : 1,
434 | "outlettype" : [ "" ],
435 | "patching_rect" : [ 194.5, 100.0, 103.0, 22.0 ],
436 | "style" : "",
437 | "text" : "pak 1. 100 0. 100"
438 | }
439 |
440 | }
441 | , {
442 | "box" : {
443 | "id" : "obj-19",
444 | "maxclass" : "newobj",
445 | "numinlets" : 2,
446 | "numoutlets" : 1,
447 | "outlettype" : [ "signal" ],
448 | "patching_rect" : [ 50.0, 257.0, 91.0, 22.0 ],
449 | "style" : "",
450 | "text" : "*~ 0.1"
451 | }
452 |
453 | }
454 | , {
455 | "box" : {
456 | "id" : "obj-18",
457 | "maxclass" : "message",
458 | "numinlets" : 2,
459 | "numoutlets" : 1,
460 | "outlettype" : [ "" ],
461 | "patching_rect" : [ 50.0, 133.0, 163.5, 22.0 ],
462 | "style" : "",
463 | "text" : "1. 1 0. 125"
464 | }
465 |
466 | }
467 | , {
468 | "box" : {
469 | "id" : "obj-16",
470 | "maxclass" : "newobj",
471 | "numinlets" : 2,
472 | "numoutlets" : 1,
473 | "outlettype" : [ "signal" ],
474 | "patching_rect" : [ 50.0, 191.0, 61.0, 22.0 ],
475 | "style" : "",
476 | "text" : "*~"
477 | }
478 |
479 | }
480 | , {
481 | "box" : {
482 | "id" : "obj-21",
483 | "maxclass" : "newobj",
484 | "numinlets" : 2,
485 | "numoutlets" : 2,
486 | "outlettype" : [ "signal", "bang" ],
487 | "patching_rect" : [ 50.0, 161.0, 36.0, 22.0 ],
488 | "style" : "",
489 | "text" : "line~"
490 | }
491 |
492 | }
493 | , {
494 | "box" : {
495 | "id" : "obj-24",
496 | "maxclass" : "newobj",
497 | "numinlets" : 2,
498 | "numoutlets" : 1,
499 | "outlettype" : [ "signal" ],
500 | "patching_rect" : [ 92.0, 161.0, 68.0, 22.0 ],
501 | "style" : "",
502 | "text" : "cycle~ 550"
503 | }
504 |
505 | }
506 | , {
507 | "box" : {
508 | "comment" : "",
509 | "id" : "obj-26",
510 | "maxclass" : "inlet",
511 | "numinlets" : 0,
512 | "numoutlets" : 1,
513 | "outlettype" : [ "bang" ],
514 | "patching_rect" : [ 50.0, 40.0, 30.0, 30.0 ],
515 | "style" : ""
516 | }
517 |
518 | }
519 | , {
520 | "box" : {
521 | "comment" : "",
522 | "id" : "obj-27",
523 | "maxclass" : "inlet",
524 | "numinlets" : 0,
525 | "numoutlets" : 1,
526 | "outlettype" : [ "" ],
527 | "patching_rect" : [ 122.0, 215.0, 30.0, 30.0 ],
528 | "style" : ""
529 | }
530 |
531 | }
532 | , {
533 | "box" : {
534 | "comment" : "",
535 | "id" : "obj-28",
536 | "maxclass" : "inlet",
537 | "numinlets" : 0,
538 | "numoutlets" : 1,
539 | "outlettype" : [ "" ],
540 | "patching_rect" : [ 183.0, 40.0, 30.0, 30.0 ],
541 | "style" : ""
542 | }
543 |
544 | }
545 | , {
546 | "box" : {
547 | "comment" : "",
548 | "id" : "obj-30",
549 | "maxclass" : "inlet",
550 | "numinlets" : 0,
551 | "numoutlets" : 1,
552 | "outlettype" : [ "" ],
553 | "patching_rect" : [ 222.5, 40.0, 30.0, 30.0 ],
554 | "style" : ""
555 | }
556 |
557 | }
558 | , {
559 | "box" : {
560 | "comment" : "",
561 | "id" : "obj-32",
562 | "maxclass" : "inlet",
563 | "numinlets" : 0,
564 | "numoutlets" : 1,
565 | "outlettype" : [ "" ],
566 | "patching_rect" : [ 278.5, 40.0, 30.0, 30.0 ],
567 | "style" : ""
568 | }
569 |
570 | }
571 | , {
572 | "box" : {
573 | "comment" : "",
574 | "id" : "obj-34",
575 | "maxclass" : "outlet",
576 | "numinlets" : 1,
577 | "numoutlets" : 0,
578 | "patching_rect" : [ 50.0, 339.0, 30.0, 30.0 ],
579 | "style" : ""
580 | }
581 |
582 | }
583 | ],
584 | "lines" : [ {
585 | "patchline" : {
586 | "destination" : [ "obj-19", 0 ],
587 | "disabled" : 0,
588 | "hidden" : 0,
589 | "source" : [ "obj-16", 0 ]
590 | }
591 |
592 | }
593 | , {
594 | "patchline" : {
595 | "destination" : [ "obj-21", 0 ],
596 | "disabled" : 0,
597 | "hidden" : 0,
598 | "source" : [ "obj-18", 0 ]
599 | }
600 |
601 | }
602 | , {
603 | "patchline" : {
604 | "destination" : [ "obj-34", 0 ],
605 | "disabled" : 0,
606 | "hidden" : 0,
607 | "source" : [ "obj-19", 0 ]
608 | }
609 |
610 | }
611 | , {
612 | "patchline" : {
613 | "destination" : [ "obj-16", 0 ],
614 | "disabled" : 0,
615 | "hidden" : 0,
616 | "source" : [ "obj-21", 0 ]
617 | }
618 |
619 | }
620 | , {
621 | "patchline" : {
622 | "destination" : [ "obj-16", 1 ],
623 | "disabled" : 0,
624 | "hidden" : 0,
625 | "source" : [ "obj-24", 0 ]
626 | }
627 |
628 | }
629 | , {
630 | "patchline" : {
631 | "destination" : [ "obj-18", 0 ],
632 | "disabled" : 0,
633 | "hidden" : 0,
634 | "source" : [ "obj-26", 0 ]
635 | }
636 |
637 | }
638 | , {
639 | "patchline" : {
640 | "destination" : [ "obj-19", 1 ],
641 | "disabled" : 0,
642 | "hidden" : 0,
643 | "source" : [ "obj-27", 0 ]
644 | }
645 |
646 | }
647 | , {
648 | "patchline" : {
649 | "destination" : [ "obj-24", 0 ],
650 | "disabled" : 0,
651 | "hidden" : 0,
652 | "source" : [ "obj-28", 0 ]
653 | }
654 |
655 | }
656 | , {
657 | "patchline" : {
658 | "destination" : [ "obj-54", 1 ],
659 | "disabled" : 0,
660 | "hidden" : 0,
661 | "source" : [ "obj-30", 0 ]
662 | }
663 |
664 | }
665 | , {
666 | "patchline" : {
667 | "destination" : [ "obj-54", 3 ],
668 | "disabled" : 0,
669 | "hidden" : 0,
670 | "source" : [ "obj-32", 0 ]
671 | }
672 |
673 | }
674 | , {
675 | "patchline" : {
676 | "destination" : [ "obj-18", 1 ],
677 | "disabled" : 0,
678 | "hidden" : 1,
679 | "source" : [ "obj-54", 0 ]
680 | }
681 |
682 | }
683 | ]
684 | }
685 | ,
686 | "patching_rect" : [ 127.0, 482.200012, 273.5, 22.0 ],
687 | "saved_object_attributes" : {
688 | "description" : "",
689 | "digest" : "",
690 | "globalpatchername" : "",
691 | "style" : "",
692 | "tags" : ""
693 | }
694 | ,
695 | "style" : "",
696 | "text" : "p synth"
697 | }
698 |
699 | }
700 | , {
701 | "box" : {
702 | "id" : "obj-9",
703 | "maxclass" : "comment",
704 | "numinlets" : 1,
705 | "numoutlets" : 0,
706 | "patching_rect" : [ 189.0, 280.200012, 190.0, 20.0 ],
707 | "style" : "",
708 | "text" : "visualization of the current rhythm"
709 | }
710 |
711 | }
712 | , {
713 | "box" : {
714 | "id" : "obj-53",
715 | "maxclass" : "button",
716 | "numinlets" : 1,
717 | "numoutlets" : 1,
718 | "outlettype" : [ "bang" ],
719 | "patching_rect" : [ 144.0, 300.200012, 24.0, 24.0 ],
720 | "style" : ""
721 | }
722 |
723 | }
724 | , {
725 | "box" : {
726 | "fontsize" : 6.0,
727 | "id" : "obj-41",
728 | "maxclass" : "newobj",
729 | "numinlets" : 2,
730 | "numoutlets" : 2,
731 | "outlettype" : [ "bang", "" ],
732 | "patching_rect" : [ 144.0, 280.200012, 24.0, 15.0 ],
733 | "style" : "",
734 | "text" : "sel 1"
735 | }
736 |
737 | }
738 | , {
739 | "box" : {
740 | "id" : "obj-83",
741 | "maxclass" : "comment",
742 | "numinlets" : 1,
743 | "numoutlets" : 0,
744 | "patching_rect" : [ 317.875, 436.200012, 43.0, 20.0 ],
745 | "style" : "",
746 | "text" : "attack"
747 | }
748 |
749 | }
750 | , {
751 | "box" : {
752 | "id" : "obj-81",
753 | "maxclass" : "comment",
754 | "numinlets" : 1,
755 | "numoutlets" : 0,
756 | "patching_rect" : [ 252.0, 436.200012, 63.0, 20.0 ],
757 | "style" : "",
758 | "text" : "frequency"
759 | }
760 |
761 | }
762 | , {
763 | "box" : {
764 | "id" : "obj-79",
765 | "maxclass" : "comment",
766 | "numinlets" : 1,
767 | "numoutlets" : 0,
768 | "patching_rect" : [ 165.166672, 436.200012, 89.0, 20.0 ],
769 | "style" : "",
770 | "text" : "master volume"
771 | }
772 |
773 | }
774 | , {
775 | "box" : {
776 | "id" : "obj-64",
777 | "maxclass" : "newobj",
778 | "numinlets" : 4,
779 | "numoutlets" : 1,
780 | "outlettype" : [ "" ],
781 | "patching_rect" : [ 129.0, 216.866653, 101.0, 22.0 ],
782 | "style" : "",
783 | "text" : "pak euclid 16 4 0"
784 | }
785 |
786 | }
787 | , {
788 | "box" : {
789 | "fontsize" : 7.0,
790 | "hidden" : 1,
791 | "id" : "obj-60",
792 | "maxclass" : "newobj",
793 | "numinlets" : 2,
794 | "numoutlets" : 1,
795 | "outlettype" : [ "int" ],
796 | "patching_rect" : [ 180.5, 76.200005, 21.0, 16.0 ],
797 | "style" : "",
798 | "text" : "+ 1"
799 | }
800 |
801 | }
802 | , {
803 | "box" : {
804 | "id" : "obj-59",
805 | "maxclass" : "number",
806 | "numinlets" : 1,
807 | "numoutlets" : 2,
808 | "outlettype" : [ "", "bang" ],
809 | "parameter_enable" : 0,
810 | "patching_rect" : [ 381.5, 454.200012, 50.0, 22.0 ],
811 | "style" : ""
812 | }
813 |
814 | }
815 | , {
816 | "box" : {
817 | "id" : "obj-57",
818 | "maxclass" : "number",
819 | "numinlets" : 1,
820 | "numoutlets" : 2,
821 | "outlettype" : [ "", "bang" ],
822 | "parameter_enable" : 0,
823 | "patching_rect" : [ 317.875, 454.200012, 50.0, 22.0 ],
824 | "style" : ""
825 | }
826 |
827 | }
828 | , {
829 | "box" : {
830 | "id" : "obj-49",
831 | "maxclass" : "preset",
832 | "numinlets" : 1,
833 | "numoutlets" : 4,
834 | "outlettype" : [ "preset", "int", "preset", "int" ],
835 | "patching_rect" : [ 254.25, 418.200012, 100.0, 16.0 ],
836 | "preset_data" : [ {
837 | "number" : 1,
838 | "data" : [ 5, "obj-59", "number", "int", 125, 5, "obj-57", "number", "int", 1, 5, "obj-17", "flonum", "float", 400.0 ]
839 | }
840 | , {
841 | "number" : 2,
842 | "data" : [ 5, "obj-59", "number", "int", 500, 5, "obj-57", "number", "int", 2, 5, "obj-17", "flonum", "float", 150.0 ]
843 | }
844 | , {
845 | "number" : 3,
846 | "data" : [ 5, "obj-59", "number", "int", 25, 5, "obj-57", "number", "int", 1, 5, "obj-17", "flonum", "float", 1000.0 ]
847 | }
848 | ],
849 | "style" : ""
850 | }
851 |
852 | }
853 | , {
854 | "box" : {
855 | "format" : 6,
856 | "id" : "obj-17",
857 | "maxclass" : "flonum",
858 | "maximum" : 10000.0,
859 | "minimum" : 100.0,
860 | "numinlets" : 1,
861 | "numoutlets" : 2,
862 | "outlettype" : [ "", "bang" ],
863 | "parameter_enable" : 0,
864 | "patching_rect" : [ 254.25, 454.200012, 50.0, 22.0 ],
865 | "style" : ""
866 | }
867 |
868 | }
869 | , {
870 | "box" : {
871 | "id" : "obj-48",
872 | "maxclass" : "number",
873 | "minimum" : 10,
874 | "numinlets" : 1,
875 | "numoutlets" : 2,
876 | "outlettype" : [ "", "bang" ],
877 | "parameter_enable" : 0,
878 | "patching_rect" : [ 63.0, 143.199997, 50.0, 22.0 ],
879 | "style" : ""
880 | }
881 |
882 | }
883 | , {
884 | "box" : {
885 | "id" : "obj-46",
886 | "maxclass" : "toggle",
887 | "numinlets" : 1,
888 | "numoutlets" : 1,
889 | "outlettype" : [ "int" ],
890 | "parameter_enable" : 0,
891 | "patching_rect" : [ 11.0, 141.199997, 24.0, 24.0 ],
892 | "style" : ""
893 | }
894 |
895 | }
896 | , {
897 | "box" : {
898 | "id" : "obj-44",
899 | "maxclass" : "newobj",
900 | "numinlets" : 2,
901 | "numoutlets" : 1,
902 | "outlettype" : [ "bang" ],
903 | "patching_rect" : [ 11.0, 174.199997, 71.0, 22.0 ],
904 | "style" : "",
905 | "text" : "metro 1000"
906 | }
907 |
908 | }
909 | , {
910 | "box" : {
911 | "id" : "obj-43",
912 | "maxclass" : "newobj",
913 | "numinlets" : 5,
914 | "numoutlets" : 4,
915 | "outlettype" : [ "int", "", "", "int" ],
916 | "patching_rect" : [ 11.0, 180.866653, 61.0, 22.0 ],
917 | "style" : "",
918 | "text" : "counter"
919 | }
920 |
921 | }
922 | , {
923 | "box" : {
924 | "format" : 6,
925 | "id" : "obj-25",
926 | "maxclass" : "flonum",
927 | "numinlets" : 1,
928 | "numoutlets" : 2,
929 | "outlettype" : [ "", "bang" ],
930 | "parameter_enable" : 0,
931 | "patching_rect" : [ 163.166672, 454.200012, 50.0, 22.0 ],
932 | "style" : ""
933 | }
934 |
935 | }
936 | , {
937 | "box" : {
938 | "id" : "obj-20",
939 | "maxclass" : "ezdac~",
940 | "numinlets" : 2,
941 | "numoutlets" : 0,
942 | "patching_rect" : [ 126.0, 531.200012, 45.0, 45.0 ],
943 | "style" : ""
944 | }
945 |
946 | }
947 | , {
948 | "box" : {
949 | "id" : "obj-3",
950 | "maxclass" : "preset",
951 | "numinlets" : 1,
952 | "numoutlets" : 4,
953 | "outlettype" : [ "preset", "int", "preset", "int" ],
954 | "patching_rect" : [ 6.5, 119.866684, 101.0, 18.0 ],
955 | "preset_data" : [ {
956 | "number" : 1,
957 | "data" : [ 5, "obj-22", "number", "int", 0, 5, "obj-6", "number", "int", 3, 5, "obj-4", "number", "int", 8, 5, "obj-48", "number", "int", 150 ]
958 | }
959 | , {
960 | "number" : 2,
961 | "data" : [ 5, "obj-22", "number", "int", 0, 5, "obj-6", "number", "int", 7, 5, "obj-4", "number", "int", 16, 5, "obj-48", "number", "int", 150 ]
962 | }
963 | , {
964 | "number" : 3,
965 | "data" : [ 5, "obj-22", "number", "int", 0, 5, "obj-6", "number", "int", 5, 5, "obj-4", "number", "int", 12, 5, "obj-48", "number", "int", 150 ]
966 | }
967 | , {
968 | "number" : 4,
969 | "data" : [ 5, "obj-22", "number", "int", 0, 5, "obj-6", "number", "int", 7, 5, "obj-4", "number", "int", 16, 5, "obj-48", "number", "int", 125 ]
970 | }
971 | , {
972 | "number" : 5,
973 | "data" : [ 5, "obj-22", "number", "int", 1, 5, "obj-6", "number", "int", 7, 5, "obj-4", "number", "int", 16, 5, "obj-48", "number", "int", 125 ]
974 | }
975 | , {
976 | "number" : 6,
977 | "data" : [ 5, "obj-22", "number", "int", 2, 5, "obj-6", "number", "int", 7, 5, "obj-4", "number", "int", 16, 5, "obj-48", "number", "int", 125 ]
978 | }
979 | , {
980 | "number" : 7,
981 | "data" : [ 5, "obj-22", "number", "int", 0, 5, "obj-6", "number", "int", 11, 5, "obj-4", "number", "int", 16, 5, "obj-48", "number", "int", 125 ]
982 | }
983 | , {
984 | "number" : 8,
985 | "data" : [ 5, "obj-22", "number", "int", 0, 5, "obj-6", "number", "int", 8, 5, "obj-4", "number", "int", 11, 5, "obj-48", "number", "int", 125 ]
986 | }
987 | ],
988 | "style" : ""
989 | }
990 |
991 | }
992 | , {
993 | "box" : {
994 | "id" : "obj-35",
995 | "maxclass" : "comment",
996 | "numinlets" : 1,
997 | "numoutlets" : 0,
998 | "patching_rect" : [ 221.0, 120.199997, 41.0, 20.0 ],
999 | "style" : "",
1000 | "text" : "rotate"
1001 | }
1002 |
1003 | }
1004 | , {
1005 | "box" : {
1006 | "id" : "obj-33",
1007 | "maxclass" : "comment",
1008 | "numinlets" : 1,
1009 | "numoutlets" : 0,
1010 | "patching_rect" : [ 171.5, 120.199997, 45.0, 20.0 ],
1011 | "style" : "",
1012 | "text" : "pulses"
1013 | }
1014 |
1015 | }
1016 | , {
1017 | "box" : {
1018 | "id" : "obj-31",
1019 | "maxclass" : "comment",
1020 | "numinlets" : 1,
1021 | "numoutlets" : 0,
1022 | "patching_rect" : [ 128.0, 120.199997, 39.0, 20.0 ],
1023 | "style" : "",
1024 | "text" : "steps"
1025 | }
1026 |
1027 | }
1028 | , {
1029 | "box" : {
1030 | "fontsize" : 7.0,
1031 | "hidden" : 1,
1032 | "id" : "obj-29",
1033 | "maxclass" : "message",
1034 | "numinlets" : 2,
1035 | "numoutlets" : 1,
1036 | "outlettype" : [ "" ],
1037 | "patching_rect" : [ 174.5, 100.199997, 33.0, 16.0 ],
1038 | "style" : "",
1039 | "text" : "size $1"
1040 | }
1041 |
1042 | }
1043 | , {
1044 | "box" : {
1045 | "id" : "obj-22",
1046 | "maxclass" : "number",
1047 | "numinlets" : 1,
1048 | "numoutlets" : 2,
1049 | "outlettype" : [ "", "bang" ],
1050 | "parameter_enable" : 0,
1051 | "patching_rect" : [ 221.0, 184.199997, 40.0, 22.0 ],
1052 | "style" : ""
1053 | }
1054 |
1055 | }
1056 | , {
1057 | "box" : {
1058 | "degrees" : 360,
1059 | "id" : "obj-23",
1060 | "maxclass" : "dial",
1061 | "mode" : 2,
1062 | "needlecolor" : [ 0.92549, 0.364706, 0.341176, 1.0 ],
1063 | "numinlets" : 1,
1064 | "numoutlets" : 1,
1065 | "outlettype" : [ "float" ],
1066 | "parameter_enable" : 0,
1067 | "patching_rect" : [ 221.0, 142.199997, 40.0, 40.0 ],
1068 | "size" : 9.0,
1069 | "style" : "",
1070 | "thickness" : 100.0
1071 | }
1072 |
1073 | }
1074 | , {
1075 | "box" : {
1076 | "id" : "obj-8",
1077 | "maxclass" : "newobj",
1078 | "numinlets" : 1,
1079 | "numoutlets" : 2,
1080 | "outlettype" : [ "", "" ],
1081 | "patching_rect" : [ 129.0, 247.600006, 66.0, 22.0 ],
1082 | "saved_object_attributes" : {
1083 | "filename" : "euclid.js",
1084 | "parameter_enable" : 0
1085 | }
1086 | ,
1087 | "style" : "",
1088 | "text" : "js euclid.js"
1089 | }
1090 |
1091 | }
1092 | , {
1093 | "box" : {
1094 | "autosize" : 1,
1095 | "id" : "obj-7",
1096 | "maxclass" : "matrixctrl",
1097 | "numinlets" : 1,
1098 | "numoutlets" : 2,
1099 | "outlettype" : [ "list", "list" ],
1100 | "parameter_enable" : 0,
1101 | "patching_rect" : [ 174.5, 304.200012, 130.0, 18.0 ],
1102 | "presentation_rect" : [ 0.0, 0.0, 130.0, 18.0 ],
1103 | "range" : 20,
1104 | "rows" : 1,
1105 | "style" : ""
1106 | }
1107 |
1108 | }
1109 | , {
1110 | "box" : {
1111 | "id" : "obj-6",
1112 | "maxclass" : "number",
1113 | "numinlets" : 1,
1114 | "numoutlets" : 2,
1115 | "outlettype" : [ "", "bang" ],
1116 | "parameter_enable" : 0,
1117 | "patching_rect" : [ 174.5, 184.199997, 40.0, 22.0 ],
1118 | "style" : ""
1119 | }
1120 |
1121 | }
1122 | , {
1123 | "box" : {
1124 | "id" : "obj-4",
1125 | "maxclass" : "number",
1126 | "numinlets" : 1,
1127 | "numoutlets" : 2,
1128 | "outlettype" : [ "", "bang" ],
1129 | "parameter_enable" : 0,
1130 | "patching_rect" : [ 128.0, 184.199997, 40.0, 22.0 ],
1131 | "style" : ""
1132 | }
1133 |
1134 | }
1135 | , {
1136 | "box" : {
1137 | "degrees" : 360,
1138 | "id" : "obj-2",
1139 | "maxclass" : "dial",
1140 | "mode" : 2,
1141 | "needlecolor" : [ 0.92549, 0.364706, 0.341176, 1.0 ],
1142 | "numinlets" : 1,
1143 | "numoutlets" : 1,
1144 | "outlettype" : [ "float" ],
1145 | "parameter_enable" : 0,
1146 | "patching_rect" : [ 174.5, 142.199997, 40.0, 40.0 ],
1147 | "size" : 9.0,
1148 | "style" : "",
1149 | "thickness" : 100.0
1150 | }
1151 |
1152 | }
1153 | , {
1154 | "box" : {
1155 | "degrees" : 360,
1156 | "id" : "obj-1",
1157 | "maxclass" : "dial",
1158 | "min" : 2.0,
1159 | "mode" : 2,
1160 | "needlecolor" : [ 0.92549, 0.364706, 0.341176, 1.0 ],
1161 | "numinlets" : 1,
1162 | "numoutlets" : 1,
1163 | "outlettype" : [ "float" ],
1164 | "parameter_enable" : 0,
1165 | "patching_rect" : [ 128.0, 142.199997, 40.0, 40.0 ],
1166 | "size" : 32.0,
1167 | "style" : "",
1168 | "thickness" : 100.0
1169 | }
1170 |
1171 | }
1172 | , {
1173 | "box" : {
1174 | "angle" : 0.0,
1175 | "bgcolor" : [ 0.094118, 0.113725, 0.137255, 0.0 ],
1176 | "border" : 1,
1177 | "bordercolor" : [ 0.415686, 0.454902, 0.52549, 1.0 ],
1178 | "id" : "obj-51",
1179 | "maxclass" : "panel",
1180 | "mode" : 0,
1181 | "numinlets" : 1,
1182 | "numoutlets" : 0,
1183 | "patching_rect" : [ 124.0, 118.199997, 141.0, 96.666656 ],
1184 | "proportion" : 0.39,
1185 | "rounded" : 16,
1186 | "style" : ""
1187 | }
1188 |
1189 | }
1190 | , {
1191 | "box" : {
1192 | "hidden" : 1,
1193 | "id" : "obj-52",
1194 | "maxclass" : "panel",
1195 | "numinlets" : 1,
1196 | "numoutlets" : 0,
1197 | "patching_rect" : [ 127.0, 85.199997, 141.0, 158.0 ],
1198 | "style" : ""
1199 | }
1200 |
1201 | }
1202 | , {
1203 | "box" : {
1204 | "id" : "obj-13",
1205 | "maxclass" : "newobj",
1206 | "numinlets" : 2,
1207 | "numoutlets" : 2,
1208 | "outlettype" : [ "bang", "" ],
1209 | "patching_rect" : [ 127.0, 338.400024, 36.0, 22.0 ],
1210 | "style" : "",
1211 | "text" : "sel 1"
1212 | }
1213 |
1214 | }
1215 | , {
1216 | "box" : {
1217 | "id" : "obj-39",
1218 | "maxclass" : "panel",
1219 | "numinlets" : 1,
1220 | "numoutlets" : 0,
1221 | "patching_rect" : [ 2.0, 141.199997, 110.0, 158.0 ],
1222 | "style" : ""
1223 | }
1224 |
1225 | }
1226 | ],
1227 | "lines" : [ {
1228 | "patchline" : {
1229 | "destination" : [ "obj-4", 0 ],
1230 | "disabled" : 0,
1231 | "hidden" : 1,
1232 | "source" : [ "obj-1", 0 ]
1233 | }
1234 |
1235 | }
1236 | , {
1237 | "patchline" : {
1238 | "destination" : [ "obj-36", 0 ],
1239 | "disabled" : 0,
1240 | "hidden" : 0,
1241 | "source" : [ "obj-13", 0 ]
1242 | }
1243 |
1244 | }
1245 | , {
1246 | "patchline" : {
1247 | "destination" : [ "obj-8", 0 ],
1248 | "disabled" : 0,
1249 | "hidden" : 1,
1250 | "source" : [ "obj-14", 0 ]
1251 | }
1252 |
1253 | }
1254 | , {
1255 | "patchline" : {
1256 | "destination" : [ "obj-49", 0 ],
1257 | "disabled" : 0,
1258 | "hidden" : 1,
1259 | "source" : [ "obj-15", 0 ]
1260 | }
1261 |
1262 | }
1263 | , {
1264 | "patchline" : {
1265 | "destination" : [ "obj-36", 2 ],
1266 | "disabled" : 0,
1267 | "hidden" : 0,
1268 | "source" : [ "obj-17", 0 ]
1269 | }
1270 |
1271 | }
1272 | , {
1273 | "patchline" : {
1274 | "destination" : [ "obj-1", 0 ],
1275 | "disabled" : 0,
1276 | "hidden" : 1,
1277 | "source" : [ "obj-18", 0 ]
1278 | }
1279 |
1280 | }
1281 | , {
1282 | "patchline" : {
1283 | "destination" : [ "obj-2", 0 ],
1284 | "disabled" : 0,
1285 | "hidden" : 1,
1286 | "midpoints" : [ 278.0, 219.200012, 231.0, 219.200012, 231.0, 131.199997, 184.0, 131.199997 ],
1287 | "source" : [ "obj-19", 0 ]
1288 | }
1289 |
1290 | }
1291 | , {
1292 | "patchline" : {
1293 | "destination" : [ "obj-6", 0 ],
1294 | "disabled" : 0,
1295 | "hidden" : 1,
1296 | "source" : [ "obj-2", 0 ]
1297 | }
1298 |
1299 | }
1300 | , {
1301 | "patchline" : {
1302 | "destination" : [ "obj-23", 0 ],
1303 | "disabled" : 0,
1304 | "hidden" : 1,
1305 | "source" : [ "obj-21", 0 ]
1306 | }
1307 |
1308 | }
1309 | , {
1310 | "patchline" : {
1311 | "destination" : [ "obj-21", 0 ],
1312 | "disabled" : 0,
1313 | "hidden" : 1,
1314 | "midpoints" : [ 230.5, 216.199997, 232.75, 216.199997, 232.75, 92.53331, 235.0, 92.53331 ],
1315 | "source" : [ "obj-22", 0 ]
1316 | }
1317 |
1318 | }
1319 | , {
1320 | "patchline" : {
1321 | "destination" : [ "obj-64", 3 ],
1322 | "disabled" : 0,
1323 | "hidden" : 0,
1324 | "source" : [ "obj-22", 0 ]
1325 | }
1326 |
1327 | }
1328 | , {
1329 | "patchline" : {
1330 | "destination" : [ "obj-22", 0 ],
1331 | "disabled" : 0,
1332 | "hidden" : 1,
1333 | "source" : [ "obj-23", 0 ]
1334 | }
1335 |
1336 | }
1337 | , {
1338 | "patchline" : {
1339 | "destination" : [ "obj-36", 1 ],
1340 | "disabled" : 0,
1341 | "hidden" : 0,
1342 | "source" : [ "obj-25", 0 ]
1343 | }
1344 |
1345 | }
1346 | , {
1347 | "patchline" : {
1348 | "destination" : [ "obj-2", 0 ],
1349 | "disabled" : 0,
1350 | "hidden" : 1,
1351 | "source" : [ "obj-29", 0 ]
1352 | }
1353 |
1354 | }
1355 | , {
1356 | "patchline" : {
1357 | "destination" : [ "obj-23", 0 ],
1358 | "disabled" : 0,
1359 | "hidden" : 1,
1360 | "source" : [ "obj-29", 0 ]
1361 | }
1362 |
1363 | }
1364 | , {
1365 | "patchline" : {
1366 | "destination" : [ "obj-22", 0 ],
1367 | "disabled" : 0,
1368 | "hidden" : 1,
1369 | "source" : [ "obj-3", 0 ]
1370 | }
1371 |
1372 | }
1373 | , {
1374 | "patchline" : {
1375 | "destination" : [ "obj-4", 0 ],
1376 | "disabled" : 0,
1377 | "hidden" : 1,
1378 | "source" : [ "obj-3", 0 ]
1379 | }
1380 |
1381 | }
1382 | , {
1383 | "patchline" : {
1384 | "destination" : [ "obj-48", 0 ],
1385 | "disabled" : 0,
1386 | "hidden" : 1,
1387 | "source" : [ "obj-3", 0 ]
1388 | }
1389 |
1390 | }
1391 | , {
1392 | "patchline" : {
1393 | "destination" : [ "obj-6", 0 ],
1394 | "disabled" : 0,
1395 | "hidden" : 1,
1396 | "source" : [ "obj-3", 0 ]
1397 | }
1398 |
1399 | }
1400 | , {
1401 | "patchline" : {
1402 | "destination" : [ "obj-43", 2 ],
1403 | "disabled" : 0,
1404 | "hidden" : 1,
1405 | "source" : [ "obj-32", 0 ]
1406 | }
1407 |
1408 | }
1409 | , {
1410 | "patchline" : {
1411 | "destination" : [ "obj-25", 0 ],
1412 | "disabled" : 0,
1413 | "hidden" : 1,
1414 | "source" : [ "obj-34", 0 ]
1415 | }
1416 |
1417 | }
1418 | , {
1419 | "patchline" : {
1420 | "destination" : [ "obj-20", 1 ],
1421 | "disabled" : 0,
1422 | "hidden" : 0,
1423 | "source" : [ "obj-36", 0 ]
1424 | }
1425 |
1426 | }
1427 | , {
1428 | "patchline" : {
1429 | "destination" : [ "obj-20", 0 ],
1430 | "disabled" : 0,
1431 | "hidden" : 0,
1432 | "source" : [ "obj-36", 0 ]
1433 | }
1434 |
1435 | }
1436 | , {
1437 | "patchline" : {
1438 | "destination" : [ "obj-18", 0 ],
1439 | "disabled" : 0,
1440 | "hidden" : 1,
1441 | "midpoints" : [ 137.5, 216.199997, 137.75, 216.199997, 137.75, 89.199997, 138.0, 89.199997 ],
1442 | "source" : [ "obj-4", 0 ]
1443 | }
1444 |
1445 | }
1446 | , {
1447 | "patchline" : {
1448 | "destination" : [ "obj-60", 0 ],
1449 | "disabled" : 0,
1450 | "hidden" : 1,
1451 | "source" : [ "obj-4", 0 ]
1452 | }
1453 |
1454 | }
1455 | , {
1456 | "patchline" : {
1457 | "destination" : [ "obj-64", 1 ],
1458 | "disabled" : 0,
1459 | "hidden" : 0,
1460 | "source" : [ "obj-4", 0 ]
1461 | }
1462 |
1463 | }
1464 | , {
1465 | "patchline" : {
1466 | "destination" : [ "obj-53", 0 ],
1467 | "disabled" : 0,
1468 | "hidden" : 0,
1469 | "source" : [ "obj-41", 0 ]
1470 | }
1471 |
1472 | }
1473 | , {
1474 | "patchline" : {
1475 | "destination" : [ "obj-14", 0 ],
1476 | "disabled" : 0,
1477 | "hidden" : 0,
1478 | "source" : [ "obj-43", 0 ]
1479 | }
1480 |
1481 | }
1482 | , {
1483 | "patchline" : {
1484 | "destination" : [ "obj-43", 0 ],
1485 | "disabled" : 0,
1486 | "hidden" : 0,
1487 | "source" : [ "obj-44", 0 ]
1488 | }
1489 |
1490 | }
1491 | , {
1492 | "patchline" : {
1493 | "destination" : [ "obj-3", 0 ],
1494 | "disabled" : 0,
1495 | "hidden" : 1,
1496 | "source" : [ "obj-45", 0 ]
1497 | }
1498 |
1499 | }
1500 | , {
1501 | "patchline" : {
1502 | "destination" : [ "obj-32", 0 ],
1503 | "disabled" : 0,
1504 | "hidden" : 1,
1505 | "source" : [ "obj-46", 0 ]
1506 | }
1507 |
1508 | }
1509 | , {
1510 | "patchline" : {
1511 | "destination" : [ "obj-44", 0 ],
1512 | "disabled" : 0,
1513 | "hidden" : 0,
1514 | "source" : [ "obj-46", 0 ]
1515 | }
1516 |
1517 | }
1518 | , {
1519 | "patchline" : {
1520 | "destination" : [ "obj-44", 1 ],
1521 | "disabled" : 0,
1522 | "hidden" : 0,
1523 | "source" : [ "obj-48", 0 ]
1524 | }
1525 |
1526 | }
1527 | , {
1528 | "patchline" : {
1529 | "destination" : [ "obj-17", 0 ],
1530 | "disabled" : 0,
1531 | "hidden" : 1,
1532 | "source" : [ "obj-49", 0 ]
1533 | }
1534 |
1535 | }
1536 | , {
1537 | "patchline" : {
1538 | "destination" : [ "obj-57", 0 ],
1539 | "disabled" : 0,
1540 | "hidden" : 1,
1541 | "source" : [ "obj-49", 0 ]
1542 | }
1543 |
1544 | }
1545 | , {
1546 | "patchline" : {
1547 | "destination" : [ "obj-59", 0 ],
1548 | "disabled" : 0,
1549 | "hidden" : 1,
1550 | "source" : [ "obj-49", 0 ]
1551 | }
1552 |
1553 | }
1554 | , {
1555 | "patchline" : {
1556 | "destination" : [ "obj-36", 3 ],
1557 | "disabled" : 0,
1558 | "hidden" : 0,
1559 | "source" : [ "obj-57", 0 ]
1560 | }
1561 |
1562 | }
1563 | , {
1564 | "patchline" : {
1565 | "destination" : [ "obj-36", 4 ],
1566 | "disabled" : 0,
1567 | "hidden" : 0,
1568 | "source" : [ "obj-59", 0 ]
1569 | }
1570 |
1571 | }
1572 | , {
1573 | "patchline" : {
1574 | "destination" : [ "obj-19", 0 ],
1575 | "disabled" : 0,
1576 | "hidden" : 1,
1577 | "midpoints" : [ 184.0, 216.199997, 231.0, 216.199997, 231.0, 182.200012, 278.0, 182.200012 ],
1578 | "source" : [ "obj-6", 0 ]
1579 | }
1580 |
1581 | }
1582 | , {
1583 | "patchline" : {
1584 | "destination" : [ "obj-64", 2 ],
1585 | "disabled" : 0,
1586 | "hidden" : 0,
1587 | "source" : [ "obj-6", 0 ]
1588 | }
1589 |
1590 | }
1591 | , {
1592 | "patchline" : {
1593 | "destination" : [ "obj-29", 0 ],
1594 | "disabled" : 0,
1595 | "hidden" : 1,
1596 | "source" : [ "obj-60", 0 ]
1597 | }
1598 |
1599 | }
1600 | , {
1601 | "patchline" : {
1602 | "destination" : [ "obj-8", 0 ],
1603 | "disabled" : 0,
1604 | "hidden" : 0,
1605 | "source" : [ "obj-64", 0 ]
1606 | }
1607 |
1608 | }
1609 | , {
1610 | "patchline" : {
1611 | "destination" : [ "obj-5", 0 ],
1612 | "disabled" : 0,
1613 | "hidden" : 1,
1614 | "source" : [ "obj-67", 0 ]
1615 | }
1616 |
1617 | }
1618 | , {
1619 | "patchline" : {
1620 | "destination" : [ "obj-13", 0 ],
1621 | "disabled" : 0,
1622 | "hidden" : 0,
1623 | "source" : [ "obj-8", 0 ]
1624 | }
1625 |
1626 | }
1627 | , {
1628 | "patchline" : {
1629 | "destination" : [ "obj-41", 0 ],
1630 | "disabled" : 0,
1631 | "hidden" : 0,
1632 | "source" : [ "obj-8", 0 ]
1633 | }
1634 |
1635 | }
1636 | , {
1637 | "patchline" : {
1638 | "destination" : [ "obj-7", 0 ],
1639 | "disabled" : 0,
1640 | "hidden" : 1,
1641 | "midpoints" : [ 185.5, 276.200012, 184.0, 276.200012 ],
1642 | "source" : [ "obj-8", 1 ]
1643 | }
1644 |
1645 | }
1646 | ],
1647 | "dependency_cache" : [ {
1648 | "name" : "euclid.js",
1649 | "bootpath" : "~/Dropbox/_documents/MaxIH/ current/tests/euclid",
1650 | "type" : "TEXT",
1651 | "implicit" : 1
1652 | }
1653 | ],
1654 | "autosave" : 0
1655 | }
1656 |
1657 | }
1658 |
--------------------------------------------------------------------------------