├── 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 | --------------------------------------------------------------------------------