├── illuciaConnect ├── data │ ├── illuciaIcon.png │ ├── illuciaConnected.png │ └── illuciaNotConnected.png └── illuciaConnect.pde ├── illucia_dtr_pcbs ├── usb_breakout_1.0.brd ├── usb_breakout_1.0.sch ├── illucia_dtr_teensy_v1.0.brd ├── illucia_dtr_teensy_v1.0.sch └── usb_breakout_1.0-text.brd ├── illucia_dtr_design(layout&parts) ├── pdf │ ├── illucia_dtr_layout.pdf │ └── illucia_dtr_drill_pilot_holes.pdf ├── digikey-bom.txt ├── illucia_dtr_parts_list.txt └── vector │ └── illucia_dtr_drill_pilot_holes.svg ├── README.md ├── misc&utilities ├── illuciaControl.pd └── illucia_dtr_max_objects │ ├── dtrLEDs.maxpat │ ├── dtrButtons.maxpat │ ├── dtrSwitches.maxpat │ ├── dtrKnobs.maxpat │ ├── dtrToOutputJacks.maxpat │ ├── dtrFromInputJacks.maxpat │ └── dtrJackIsPatched.maxpat └── illucia_dtr_microcontroller_code └── illucia_dtr_microcontroller_code.ino /illuciaConnect/data/illuciaIcon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chrisnovello/illucia_dtr/HEAD/illuciaConnect/data/illuciaIcon.png -------------------------------------------------------------------------------- /illucia_dtr_pcbs/usb_breakout_1.0.brd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chrisnovello/illucia_dtr/HEAD/illucia_dtr_pcbs/usb_breakout_1.0.brd -------------------------------------------------------------------------------- /illucia_dtr_pcbs/usb_breakout_1.0.sch: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chrisnovello/illucia_dtr/HEAD/illucia_dtr_pcbs/usb_breakout_1.0.sch -------------------------------------------------------------------------------- /illuciaConnect/data/illuciaConnected.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chrisnovello/illucia_dtr/HEAD/illuciaConnect/data/illuciaConnected.png -------------------------------------------------------------------------------- /illuciaConnect/data/illuciaNotConnected.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chrisnovello/illucia_dtr/HEAD/illuciaConnect/data/illuciaNotConnected.png -------------------------------------------------------------------------------- /illucia_dtr_pcbs/illucia_dtr_teensy_v1.0.brd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chrisnovello/illucia_dtr/HEAD/illucia_dtr_pcbs/illucia_dtr_teensy_v1.0.brd -------------------------------------------------------------------------------- /illucia_dtr_pcbs/illucia_dtr_teensy_v1.0.sch: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chrisnovello/illucia_dtr/HEAD/illucia_dtr_pcbs/illucia_dtr_teensy_v1.0.sch -------------------------------------------------------------------------------- /illucia_dtr_design(layout&parts)/pdf/illucia_dtr_layout.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chrisnovello/illucia_dtr/HEAD/illucia_dtr_design(layout&parts)/pdf/illucia_dtr_layout.pdf -------------------------------------------------------------------------------- /illucia_dtr_design(layout&parts)/pdf/illucia_dtr_drill_pilot_holes.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chrisnovello/illucia_dtr/HEAD/illucia_dtr_design(layout&parts)/pdf/illucia_dtr_drill_pilot_holes.pdf -------------------------------------------------------------------------------- /illucia_dtr_design(layout&parts)/digikey-bom.txt: -------------------------------------------------------------------------------- 1 | Index,Quantity,Part Number,Description,Customer Reference,Available Quantity,Backorder Quantity,Unit Price USD,Extended Price USD, 2 | 1,5,360-1801-ND,SWITCH TOGGLE SPDT 6A 125V,,5,0,3.55000,17.75, 3 | 2,5,CKN4022-ND,SWITCH PUSH SPDT 0.4VA 20V,,5,0,5.21000,26.05, 4 | 3,5,CKN1399-ND,CAP PUSHBUTTON ROUND RED,,5,0,0.86000,4.30, 5 | 4,5,360-3215-ND,NUT CONICAL INCH FOR EB/MB20 SER,,5,0,1.04000,5.20, 6 | 5,5,CLB_300_RTP-ND,LENS MT CLIPLITE 5MM RED TRANSP,,5,0,0.63000,3.15, 7 | 6,7,450-1731-ND,SWITCH KNOB STRGHT 1.02" W/SKIRT,,7,0,2.92600,20.48, 8 | 7,2,A121571-ND,CONN USB RCPT VERT A TYPE WHITE,,2,0,1.09000,2.18, 9 | 8,1,MUSBB55104-ND,CONN RUGGED USB RCPT VERT MINI B,,1,0,13.92000,13.92, 10 | ,,,,,,Subtotal,93.03 11 | ,,,,,,Shipping,unknown 12 | ,,,,,,Estimated Sales Tax,7.91 13 | ,,,,,,Total,unknown 14 | -------------------------------------------------------------------------------- /illucia_dtr_design(layout&parts)/illucia_dtr_parts_list.txt: -------------------------------------------------------------------------------- 1 | illucia parts list: 2 | 3 | ======================================== 4 | 5 | Enclosure (1) [acrylic, nb] 6 | Hammond 1590DD 7 | http://www.alliedelec.com/hammond-manufacturing-1590dd/70165498/ 8 | 9 | Banana Jack (16) [nb] 10 | Emerson/Johnson 108-09xx-001 11 | 12 | Toggle Switch (4) [https://www.digikey.com/product-detail/en/nkk-switches/M2012SS1W01/360-1801-ND/1006880] 13 | NKK M2012SS1W01 (alt: M2012ES1W01 has bat switches) 14 | 15 | Momentary Pushbutton (4) [https://www.digikey.com/products/en?keywords=8125SHZBE] 16 | C&K 8125SHZBE 17 | 18 | Red Button Cap (4) [https://www.digikey.com/products/en?keywords=%20801803000] 19 | C&K 801803000 20 | 21 | Conical Dress Nut (4) [https://www.digikey.com/product-detail/en/nkk-switches/AT512H/360-3215-ND/1045995] 22 | NKK AT512H 23 | 24 | LED (4) [nb] 25 | Diffused Red 26 | 27 | LED Lens (4) [https://www.digikey.com/products/en?keywords=593-3000R] 28 | 593-3000R 29 | 30 | ESD Resistors (16) [nb] 31 | 100 ohms 32 | 33 | LED Resistors [nb] 34 | 1k 35 | 36 | Potentiometers (6) [https://www.mammothelectronics.com/collections/alpha-pcb-mount/products/alpha-16mm-single-gang-long-pin-right-angle-pc-mount-logarithmic-a?variant=25347964039] 37 | RV16AF-42-15R1-A10k Linear Alpha Single-Gang 16mm Right Angle PC Mount Long-Pin 38 | 39 | Knobs (6) [https://www.digikey.com/products/en?keywords=506-PKD70B1%2F4] 40 | 506-PKD70B1/4 41 | 42 | USB A Receptacle (1) [https://www.digikey.com/products/en?keywords=1734366-2] 43 | 1734366-2 44 | 45 | Amphenol Rugged Mini USB Receptacle (1) [https://www.digikey.com/products/en?keywords=MUSB-B551-04] 46 | MUSB-B551-04 47 | 48 | Screws (2) [nb] 49 | M2.5 (I think… whatever fits amphenol's threads) 50 | 51 | Teensy++ w/header pins (1) [https://www.pjrc.com/store/teensypp.html] 52 | 53 | Female Headers20 pin .1" spacing female headers (2) [nb] 54 | 55 | == Distributors == 56 | 57 | NKK Switches 58 | http://www.nkkswitches.com/ 59 | 60 | C&K Switches 61 | http://www.ckswitches.com/ 62 | 63 | Digikey Electronics 64 | https://www.digikey.com 65 | 66 | PJRC 67 | https://www.pjrc.com// 68 | 69 | == Digikey BOM == 70 | 71 | http://www.digikey.com/short/3dztqt 72 | 73 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | illucia dtr 2 | a patchbay controller 3 | by [Chris Novello](http://chrisnovello.com) ([@chrisnovello](http://www.twitter.com/chrisnovello)) 4 | 5 | It uses physical jacks and patch cables as an interface for making connections between computer programs. 6 | 7 | It is open source everything: hardware, software (microcontroller & computer side), and design. 8 | 9 | For more info, visit [illucia.com](http://www.illucia.com) and read the [FAQ](http://www.illucia.com/faq/) and [user guide](http://www.illucia.com/guide/). 10 | 11 | ## Microcontroller Installation 12 | 13 | Teensy++ 2.0 14 | Requires installation of [Teensy extension](https://www.pjrc.com/teensy/td_download.html) for Arduino IDE. Choose correct board model from Tools menu. Click verify, press button on board, upload code to board. 15 | 16 | * On my computer, the serial device shows up as `/dev/cu.usbmodem1421` 17 | * Baud setting is 9600. 18 | 19 | ## Pin mappings 20 | 21 | Pins are mapped into arrays. The index of this array is the numeric ID followed by the type of the controller. 22 | 23 | ## Firmware design 24 | 25 | What is a handshake? 26 | 27 | There's a boolean, true by default that instructs the program that it "needs a handshake". Why would it not need one? 28 | 29 | What is a Device State? 30 | 31 | There is a class called ControlElement that has two setters. Pin number and symbolic ID. This is the base class for all other element types. 32 | 33 | A DigitalElement inherits ControlElement with some attributes for byte value, and debouncing data. There defaults for attributes are to say debounce is false and set the byte value to something outside of the expected range. There are getters and setters for the byte data, in this case all expected byte values are boolean. The main class has a single function with no return value named updateState() with no arguments. It gets the current pin number from the parent class. 34 | 35 | It seems like the pull up resistors for all the LED and jack connections indicate that a state change will "flip the bit". For example, if the pin read is HIGH, send a 0. From here the function allocates a 4 byte array like 36 | 37 | ``` 38 | byte dataToSend[MESSAGE_SIZE] = { 39 | DIGITAL_TYPE, lowByte(_id), valueToSend, 255 40 | } 41 | ``` 42 | Note last byte is FF. This is padding. 43 | 44 | A ContinuousElement inherits ControlElement and adds a single attribute for the previous read. It has a single function named updateState() that returns an int. Why is this pattern different than the updateState() function for DigitalElement? 45 | 46 | There is some software filtering for noise then it packs the 4 byte array like so 47 | 48 | ``` 49 | byte bytesToSend[MESSAGE_SIZE] = { 50 | CONTINUOUS_TYPE, _id, highByte(reading), lowByte(reading) 51 | }; 52 | ``` 53 | 54 | Simple! 55 | 56 | The Jack class inherits from ControlElement but also creates instances of DigitalElement, which is strange. It looks like there is some iterative stuff going on here, which makes sense, but we really have a 4x4 matrix with each point having a streaming input or output. 57 | 58 | What is Debouncing? 59 | 60 | Debouncing appears to be a short delay window to not read a value but rather reread the value after this delay. Why this might be some kind of error correction to smooth out the electrical interference which could effect the corectness of the values coming from the controllers. 61 | 62 | What is "first byte pertaining to the state of the grid (for now, just beaming the whole state of the grid over when something changes)"? 63 | 64 | The serial protocol has the following structure, though there is logic within the array. Perhaps this logic could be better represented through data modeling? 65 | 66 | [ 67 | int controllerType, 68 | int controllerID, 69 | byte controllerValue, 70 | ] 71 | 72 | For example, the controllerType changes the meaning of the controllerID. If the type is a jack connection, the controllerID "beams the whole state of the grid over". I'm not sure what that means but it seems like it's larger than simply identifying the jack identifier which has changed. 73 | 74 | Also, the controllerType changes the meaning of the controllerValue. If the type is 0, the last two bytes are the value of the controller for this sample. If the type is 1, the controllerValue is a simple boolean (1bit). If the type is 2 the controllerValue is the controllerID of the other jack connection and a boolean to signify if the connection is open or closed. 75 | -------------------------------------------------------------------------------- /misc&utilities/illuciaControl.pd: -------------------------------------------------------------------------------- 1 | #N canvas 276 22 727 616 10; 2 | #X obj 254 48 unpackOSC; 3 | #X obj 254 7 udpreceive 12001; 4 | #X obj 254 85 routeOSC /dtr/Continuous; 5 | #X obj 254 136 routeOSC /1 /2 /3 /4 /5 /6; 6 | #X obj 91 86 routeOSC /dtr/Digital; 7 | #X obj 266 111 print pot; 8 | #X obj 103 114 print switch; 9 | #X obj 19 137 routeOSC /1 /2 /3 /4 /5 /6 /7 /8; 10 | #X obj 450 84 routeOSC /dtr/JackIsPatched; 11 | #X obj 477 113 print patch; 12 | #X obj 450 137 routeOSC /1 /2 /3 /4; 13 | #X obj 451 164 routeOSC /5 /6 /7 /8; 14 | #X obj 451 192 routeOSC /9 /10 /11 /12; 15 | #X obj 452 222 routeOSC /13 /14 /15 /16; 16 | #X obj 460 262 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 17 | 1; 18 | #X obj 534 263 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 19 | 1; 20 | #X obj 609 261 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 21 | 1; 22 | #X obj 676 263 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 23 | 1; 24 | #X obj 458 318 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 25 | 1; 26 | #X obj 532 319 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 27 | 1; 28 | #X obj 607 317 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 29 | 1; 30 | #X obj 674 319 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 31 | 1; 32 | #X obj 458 371 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 33 | 1; 34 | #X obj 532 372 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 35 | 1; 36 | #X obj 607 370 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 37 | 1; 38 | #X obj 674 372 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 39 | 1; 40 | #X obj 453 431 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 41 | 1; 42 | #X obj 527 432 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 43 | 1; 44 | #X obj 602 430 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 45 | 1; 46 | #X obj 669 432 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 47 | 1; 48 | #X obj 18 165 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 49 | 1; 50 | #X obj 45 168 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 51 | 1; 52 | #X obj 73 168 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 53 | 1; 54 | #X obj 100 167 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 55 | 1; 56 | #X obj 129 167 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 57 | 1; 58 | #X obj 158 169 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 1 59 | 1; 60 | #X obj 186 168 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 61 | 1; 62 | #X obj 214 168 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 1 63 | 1; 64 | #X floatatom 254 190 5 0 0 0 - - -, f 5; 65 | #X floatatom 283 168 5 0 0 0 - - -, f 5; 66 | #X floatatom 311 190 5 0 0 0 - - -, f 5; 67 | #X floatatom 341 166 5 0 0 0 - - -, f 5; 68 | #X floatatom 372 189 5 0 0 0 - - -, f 5; 69 | #X floatatom 401 167 5 0 0 0 - - -, f 5; 70 | #X obj 25 508 packOSC; 71 | #X obj 25 563 udpsend 12000; 72 | #X floatatom 45 368 5 0 1 0 - - -, f 5; 73 | #X msg 72 536 connect localhost 12000; 74 | #X obj 26 368 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 75 | 1; 76 | #X msg 252 300 send /dtr/OutputJack/1 \$1; 77 | #X obj 251 250 metro 200; 78 | #X obj 251 277 random 255; 79 | #X obj 250 219 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 1 80 | 1; 81 | #X msg 26 423 sendtyped /dtr/LED/1 f \$1; 82 | #X floatatom 108 369 5 0 1 0 - - -, f 5; 83 | #X obj 89 369 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 84 | 1; 85 | #X msg 138 476 sendtyped /dtr/LED/2 f \$1; 86 | #X floatatom 171 368 5 0 1 0 - - -, f 5; 87 | #X obj 152 368 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 88 | 1; 89 | #X msg 110 397 sendtyped /dtr/LED/3 f \$1; 90 | #X floatatom 233 366 5 0 1 0 - - -, f 5; 91 | #X obj 214 366 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 92 | 1; 93 | #X msg 224 449 sendtyped /dtr/LED/4 f \$1; 94 | #X obj 31 288 routeOSC /dtr/InputJack; 95 | #X obj 31 310 print input; 96 | #X text 457 282 rand out; 97 | #X connect 0 0 2 0; 98 | #X connect 0 0 4 0; 99 | #X connect 0 0 8 0; 100 | #X connect 0 0 63 0; 101 | #X connect 1 0 0 0; 102 | #X connect 2 0 3 0; 103 | #X connect 2 0 5 0; 104 | #X connect 3 0 38 0; 105 | #X connect 3 1 39 0; 106 | #X connect 3 2 40 0; 107 | #X connect 3 3 41 0; 108 | #X connect 3 4 42 0; 109 | #X connect 3 5 43 0; 110 | #X connect 4 0 6 0; 111 | #X connect 4 0 7 0; 112 | #X connect 7 0 30 0; 113 | #X connect 7 1 31 0; 114 | #X connect 7 2 32 0; 115 | #X connect 7 3 33 0; 116 | #X connect 7 4 34 0; 117 | #X connect 7 5 35 0; 118 | #X connect 7 6 36 0; 119 | #X connect 7 7 37 0; 120 | #X connect 8 0 9 0; 121 | #X connect 8 0 10 0; 122 | #X connect 10 0 14 0; 123 | #X connect 10 1 15 0; 124 | #X connect 10 2 16 0; 125 | #X connect 10 3 17 0; 126 | #X connect 10 4 11 0; 127 | #X connect 11 0 18 0; 128 | #X connect 11 1 19 0; 129 | #X connect 11 2 20 0; 130 | #X connect 11 3 21 0; 131 | #X connect 11 4 12 0; 132 | #X connect 12 0 22 0; 133 | #X connect 12 1 23 0; 134 | #X connect 12 2 24 0; 135 | #X connect 12 3 25 0; 136 | #X connect 12 4 13 0; 137 | #X connect 13 0 26 0; 138 | #X connect 13 1 27 0; 139 | #X connect 13 2 28 0; 140 | #X connect 13 3 29 0; 141 | #X connect 44 0 45 0; 142 | #X connect 46 0 53 0; 143 | #X connect 47 0 45 0; 144 | #X connect 48 0 46 0; 145 | #X connect 49 0 44 0; 146 | #X connect 50 0 51 0; 147 | #X connect 51 0 49 0; 148 | #X connect 52 0 50 0; 149 | #X connect 53 0 44 0; 150 | #X connect 54 0 56 0; 151 | #X connect 55 0 54 0; 152 | #X connect 56 0 44 0; 153 | #X connect 57 0 59 0; 154 | #X connect 58 0 57 0; 155 | #X connect 59 0 44 0; 156 | #X connect 60 0 62 0; 157 | #X connect 61 0 60 0; 158 | #X connect 62 0 44 0; 159 | #X connect 63 0 64 0; 160 | -------------------------------------------------------------------------------- /misc&utilities/illucia_dtr_max_objects/dtrLEDs.maxpat: -------------------------------------------------------------------------------- 1 | { 2 | "patcher" : { 3 | "fileversion" : 1, 4 | "rect" : [ 25.0, 69.0, 640.0, 480.0 ], 5 | "bglocked" : 0, 6 | "defrect" : [ 25.0, 69.0, 640.0, 480.0 ], 7 | "openrect" : [ 0.0, 0.0, 0.0, 0.0 ], 8 | "openinpresentation" : 0, 9 | "default_fontsize" : 12.0, 10 | "default_fontface" : 0, 11 | "default_fontname" : "Arial", 12 | "gridonopen" : 0, 13 | "gridsize" : [ 15.0, 15.0 ], 14 | "gridsnaponopen" : 0, 15 | "toolbarvisible" : 1, 16 | "boxanimatetime" : 200, 17 | "imprint" : 0, 18 | "enablehscroll" : 1, 19 | "enablevscroll" : 1, 20 | "devicewidth" : 0.0, 21 | "boxes" : [ { 22 | "box" : { 23 | "maxclass" : "comment", 24 | "text" : "Port Defaults to 12000\nOptional argument can change that", 25 | "linecount" : 3, 26 | "fontname" : "Arial", 27 | "patching_rect" : [ 391.0, 220.0, 154.0, 48.0 ], 28 | "numinlets" : 1, 29 | "id" : "obj-28", 30 | "numoutlets" : 0, 31 | "fontsize" : 12.0 32 | } 33 | 34 | } 35 | , { 36 | "box" : { 37 | "maxclass" : "newobj", 38 | "text" : "unpack 1", 39 | "fontname" : "Arial", 40 | "patching_rect" : [ 329.0, 219.0, 59.0, 20.0 ], 41 | "numinlets" : 1, 42 | "id" : "obj-1", 43 | "numoutlets" : 1, 44 | "fontsize" : 12.0, 45 | "outlettype" : [ "int" ] 46 | } 47 | 48 | } 49 | , { 50 | "box" : { 51 | "maxclass" : "newobj", 52 | "text" : "patcherargs 12000", 53 | "fontname" : "Arial", 54 | "patching_rect" : [ 329.0, 196.0, 111.0, 20.0 ], 55 | "numinlets" : 1, 56 | "id" : "obj-3", 57 | "numoutlets" : 2, 58 | "fontsize" : 12.0, 59 | "outlettype" : [ "", "" ] 60 | } 61 | 62 | } 63 | , { 64 | "box" : { 65 | "maxclass" : "message", 66 | "text" : "port $1", 67 | "fontname" : "Arial", 68 | "patching_rect" : [ 329.0, 242.0, 48.0, 18.0 ], 69 | "numinlets" : 2, 70 | "id" : "obj-5", 71 | "numoutlets" : 1, 72 | "fontsize" : 12.0, 73 | "outlettype" : [ "" ] 74 | } 75 | 76 | } 77 | , { 78 | "box" : { 79 | "maxclass" : "inlet", 80 | "patching_rect" : [ 134.0, 191.0, 25.0, 25.0 ], 81 | "numinlets" : 0, 82 | "id" : "obj-84", 83 | "numoutlets" : 1, 84 | "outlettype" : [ "" ], 85 | "comment" : "LED 4" 86 | } 87 | 88 | } 89 | , { 90 | "box" : { 91 | "maxclass" : "inlet", 92 | "patching_rect" : [ 101.0, 136.0, 25.0, 25.0 ], 93 | "numinlets" : 0, 94 | "id" : "obj-83", 95 | "numoutlets" : 1, 96 | "outlettype" : [ "float" ], 97 | "comment" : "LED 3" 98 | } 99 | 100 | } 101 | , { 102 | "box" : { 103 | "maxclass" : "inlet", 104 | "patching_rect" : [ 67.0, 81.0, 25.0, 25.0 ], 105 | "numinlets" : 0, 106 | "id" : "obj-82", 107 | "numoutlets" : 1, 108 | "outlettype" : [ "float" ], 109 | "comment" : "LED 2" 110 | } 111 | 112 | } 113 | , { 114 | "box" : { 115 | "maxclass" : "newobj", 116 | "text" : "udpsend localhost 12000", 117 | "fontname" : "Arial", 118 | "patching_rect" : [ 26.0, 313.0, 144.0, 20.0 ], 119 | "numinlets" : 1, 120 | "id" : "obj-81", 121 | "numoutlets" : 0, 122 | "fontsize" : 12.0 123 | } 124 | 125 | } 126 | , { 127 | "box" : { 128 | "maxclass" : "inlet", 129 | "patching_rect" : [ 29.0, 22.0, 25.0, 25.0 ], 130 | "numinlets" : 0, 131 | "id" : "obj-80", 132 | "numoutlets" : 1, 133 | "outlettype" : [ "float" ], 134 | "comment" : "LED 1" 135 | } 136 | 137 | } 138 | , { 139 | "box" : { 140 | "maxclass" : "newobj", 141 | "text" : "prepend /dtr/LED/4", 142 | "fontname" : "Arial", 143 | "patching_rect" : [ 134.0, 220.0, 112.0, 20.0 ], 144 | "numinlets" : 1, 145 | "id" : "obj-78", 146 | "numoutlets" : 1, 147 | "fontsize" : 12.0, 148 | "outlettype" : [ "" ] 149 | } 150 | 151 | } 152 | , { 153 | "box" : { 154 | "maxclass" : "newobj", 155 | "text" : "prepend /dtr/LED/3", 156 | "fontname" : "Arial", 157 | "patching_rect" : [ 101.0, 166.0, 112.0, 20.0 ], 158 | "numinlets" : 1, 159 | "id" : "obj-9", 160 | "numoutlets" : 1, 161 | "fontsize" : 12.0, 162 | "outlettype" : [ "" ] 163 | } 164 | 165 | } 166 | , { 167 | "box" : { 168 | "maxclass" : "newobj", 169 | "text" : "prepend /dtr/LED/2", 170 | "fontname" : "Arial", 171 | "patching_rect" : [ 67.0, 110.0, 112.0, 20.0 ], 172 | "numinlets" : 1, 173 | "id" : "obj-79", 174 | "numoutlets" : 1, 175 | "fontsize" : 12.0, 176 | "outlettype" : [ "" ] 177 | } 178 | 179 | } 180 | , { 181 | "box" : { 182 | "maxclass" : "newobj", 183 | "text" : "prepend /dtr/LED/1", 184 | "fontname" : "Arial", 185 | "patching_rect" : [ 29.0, 57.0, 112.0, 20.0 ], 186 | "numinlets" : 1, 187 | "id" : "obj-4", 188 | "numoutlets" : 1, 189 | "fontsize" : 12.0, 190 | "outlettype" : [ "" ] 191 | } 192 | 193 | } 194 | ], 195 | "lines" : [ { 196 | "patchline" : { 197 | "source" : [ "obj-5", 0 ], 198 | "destination" : [ "obj-81", 0 ], 199 | "hidden" : 0, 200 | "midpoints" : [ ] 201 | } 202 | 203 | } 204 | , { 205 | "patchline" : { 206 | "source" : [ "obj-3", 0 ], 207 | "destination" : [ "obj-1", 0 ], 208 | "hidden" : 0, 209 | "midpoints" : [ ] 210 | } 211 | 212 | } 213 | , { 214 | "patchline" : { 215 | "source" : [ "obj-1", 0 ], 216 | "destination" : [ "obj-5", 0 ], 217 | "hidden" : 0, 218 | "midpoints" : [ ] 219 | } 220 | 221 | } 222 | , { 223 | "patchline" : { 224 | "source" : [ "obj-84", 0 ], 225 | "destination" : [ "obj-78", 0 ], 226 | "hidden" : 0, 227 | "midpoints" : [ ] 228 | } 229 | 230 | } 231 | , { 232 | "patchline" : { 233 | "source" : [ "obj-78", 0 ], 234 | "destination" : [ "obj-81", 0 ], 235 | "hidden" : 0, 236 | "midpoints" : [ ] 237 | } 238 | 239 | } 240 | , { 241 | "patchline" : { 242 | "source" : [ "obj-83", 0 ], 243 | "destination" : [ "obj-9", 0 ], 244 | "hidden" : 0, 245 | "midpoints" : [ ] 246 | } 247 | 248 | } 249 | , { 250 | "patchline" : { 251 | "source" : [ "obj-9", 0 ], 252 | "destination" : [ "obj-81", 0 ], 253 | "hidden" : 0, 254 | "midpoints" : [ ] 255 | } 256 | 257 | } 258 | , { 259 | "patchline" : { 260 | "source" : [ "obj-82", 0 ], 261 | "destination" : [ "obj-79", 0 ], 262 | "hidden" : 0, 263 | "midpoints" : [ ] 264 | } 265 | 266 | } 267 | , { 268 | "patchline" : { 269 | "source" : [ "obj-79", 0 ], 270 | "destination" : [ "obj-81", 0 ], 271 | "hidden" : 0, 272 | "midpoints" : [ ] 273 | } 274 | 275 | } 276 | , { 277 | "patchline" : { 278 | "source" : [ "obj-4", 0 ], 279 | "destination" : [ "obj-81", 0 ], 280 | "hidden" : 0, 281 | "midpoints" : [ ] 282 | } 283 | 284 | } 285 | , { 286 | "patchline" : { 287 | "source" : [ "obj-80", 0 ], 288 | "destination" : [ "obj-4", 0 ], 289 | "hidden" : 0, 290 | "midpoints" : [ ] 291 | } 292 | 293 | } 294 | ] 295 | } 296 | 297 | } 298 | -------------------------------------------------------------------------------- /misc&utilities/illucia_dtr_max_objects/dtrButtons.maxpat: -------------------------------------------------------------------------------- 1 | { 2 | "patcher" : { 3 | "fileversion" : 1, 4 | "rect" : [ 20.0, 330.0, 775.0, 507.0 ], 5 | "bglocked" : 0, 6 | "defrect" : [ 20.0, 330.0, 775.0, 507.0 ], 7 | "openrect" : [ 0.0, 0.0, 0.0, 0.0 ], 8 | "openinpresentation" : 0, 9 | "default_fontsize" : 12.0, 10 | "default_fontface" : 0, 11 | "default_fontname" : "Arial", 12 | "gridonopen" : 0, 13 | "gridsize" : [ 15.0, 15.0 ], 14 | "gridsnaponopen" : 0, 15 | "toolbarvisible" : 1, 16 | "boxanimatetime" : 200, 17 | "imprint" : 0, 18 | "enablehscroll" : 1, 19 | "enablevscroll" : 1, 20 | "devicewidth" : 0.0, 21 | "boxes" : [ { 22 | "box" : { 23 | "maxclass" : "comment", 24 | "text" : "Port Defaults to 12001\nOptional argument can change that", 25 | "linecount" : 3, 26 | "fontname" : "Arial", 27 | "patching_rect" : [ 532.0, 54.0, 154.0, 48.0 ], 28 | "numinlets" : 1, 29 | "id" : "obj-2", 30 | "numoutlets" : 0, 31 | "fontsize" : 12.0 32 | } 33 | 34 | } 35 | , { 36 | "box" : { 37 | "maxclass" : "newobj", 38 | "text" : "unpack 1", 39 | "fontname" : "Arial", 40 | "patching_rect" : [ 421.0, 82.0, 59.0, 20.0 ], 41 | "numinlets" : 1, 42 | "id" : "obj-1", 43 | "numoutlets" : 1, 44 | "fontsize" : 12.0, 45 | "outlettype" : [ "int" ] 46 | } 47 | 48 | } 49 | , { 50 | "box" : { 51 | "maxclass" : "newobj", 52 | "text" : "patcherargs 12001", 53 | "fontname" : "Arial", 54 | "patching_rect" : [ 421.0, 51.0, 111.0, 20.0 ], 55 | "numinlets" : 1, 56 | "id" : "obj-3", 57 | "numoutlets" : 2, 58 | "fontsize" : 12.0, 59 | "outlettype" : [ "", "" ] 60 | } 61 | 62 | } 63 | , { 64 | "box" : { 65 | "maxclass" : "message", 66 | "text" : "port $1", 67 | "fontname" : "Arial", 68 | "patching_rect" : [ 421.0, 105.0, 48.0, 18.0 ], 69 | "numinlets" : 2, 70 | "id" : "obj-4", 71 | "numoutlets" : 1, 72 | "fontsize" : 12.0, 73 | "outlettype" : [ "" ] 74 | } 75 | 76 | } 77 | , { 78 | "box" : { 79 | "maxclass" : "newobj", 80 | "text" : "udpreceive 12001", 81 | "fontname" : "Arial", 82 | "patching_rect" : [ 421.0, 130.0, 106.0, 20.0 ], 83 | "numinlets" : 1, 84 | "id" : "obj-5", 85 | "numoutlets" : 1, 86 | "fontsize" : 12.0, 87 | "outlettype" : [ "" ] 88 | } 89 | 90 | } 91 | , { 92 | "box" : { 93 | "maxclass" : "outlet", 94 | "patching_rect" : [ 182.0, 426.0, 25.0, 25.0 ], 95 | "numinlets" : 1, 96 | "id" : "obj-62", 97 | "numoutlets" : 0, 98 | "comment" : "Button (Digital) 4" 99 | } 100 | 101 | } 102 | , { 103 | "box" : { 104 | "maxclass" : "flonum", 105 | "fontname" : "Arial", 106 | "patching_rect" : [ 221.0, 426.0, 50.0, 20.0 ], 107 | "numinlets" : 1, 108 | "id" : "obj-63", 109 | "numoutlets" : 2, 110 | "fontsize" : 12.0, 111 | "outlettype" : [ "float", "bang" ] 112 | } 113 | 114 | } 115 | , { 116 | "box" : { 117 | "maxclass" : "newobj", 118 | "text" : "route /dtr/Digital/4", 119 | "fontname" : "Arial", 120 | "patching_rect" : [ 182.0, 400.0, 105.0, 20.0 ], 121 | "numinlets" : 1, 122 | "id" : "obj-64", 123 | "numoutlets" : 2, 124 | "fontsize" : 12.0, 125 | "outlettype" : [ "", "" ] 126 | } 127 | 128 | } 129 | , { 130 | "box" : { 131 | "maxclass" : "outlet", 132 | "patching_rect" : [ 152.0, 357.0, 25.0, 25.0 ], 133 | "numinlets" : 1, 134 | "id" : "obj-51", 135 | "numoutlets" : 0, 136 | "comment" : "Button (Digital) 3" 137 | } 138 | 139 | } 140 | , { 141 | "box" : { 142 | "maxclass" : "flonum", 143 | "fontname" : "Arial", 144 | "patching_rect" : [ 191.0, 357.0, 50.0, 20.0 ], 145 | "numinlets" : 1, 146 | "id" : "obj-60", 147 | "numoutlets" : 2, 148 | "fontsize" : 12.0, 149 | "outlettype" : [ "float", "bang" ] 150 | } 151 | 152 | } 153 | , { 154 | "box" : { 155 | "maxclass" : "newobj", 156 | "text" : "route /dtr/Digital/3", 157 | "fontname" : "Arial", 158 | "patching_rect" : [ 152.0, 331.0, 105.0, 20.0 ], 159 | "numinlets" : 1, 160 | "id" : "obj-61", 161 | "numoutlets" : 2, 162 | "fontsize" : 12.0, 163 | "outlettype" : [ "", "" ] 164 | } 165 | 166 | } 167 | , { 168 | "box" : { 169 | "maxclass" : "outlet", 170 | "patching_rect" : [ 121.0, 288.0, 25.0, 25.0 ], 171 | "numinlets" : 1, 172 | "id" : "obj-35", 173 | "numoutlets" : 0, 174 | "comment" : "Button (Digital) 2" 175 | } 176 | 177 | } 178 | , { 179 | "box" : { 180 | "maxclass" : "flonum", 181 | "fontname" : "Arial", 182 | "patching_rect" : [ 160.0, 288.0, 50.0, 20.0 ], 183 | "numinlets" : 1, 184 | "id" : "obj-48", 185 | "numoutlets" : 2, 186 | "fontsize" : 12.0, 187 | "outlettype" : [ "float", "bang" ] 188 | } 189 | 190 | } 191 | , { 192 | "box" : { 193 | "maxclass" : "newobj", 194 | "text" : "route /dtr/Digital/2", 195 | "fontname" : "Arial", 196 | "patching_rect" : [ 121.0, 262.0, 105.0, 20.0 ], 197 | "numinlets" : 1, 198 | "id" : "obj-49", 199 | "numoutlets" : 2, 200 | "fontsize" : 12.0, 201 | "outlettype" : [ "", "" ] 202 | } 203 | 204 | } 205 | , { 206 | "box" : { 207 | "maxclass" : "outlet", 208 | "patching_rect" : [ 89.0, 226.0, 25.0, 25.0 ], 209 | "numinlets" : 1, 210 | "id" : "obj-33", 211 | "numoutlets" : 0, 212 | "comment" : "Button (Digital) 1" 213 | } 214 | 215 | } 216 | , { 217 | "box" : { 218 | "maxclass" : "flonum", 219 | "fontname" : "Arial", 220 | "patching_rect" : [ 128.0, 226.0, 50.0, 20.0 ], 221 | "numinlets" : 1, 222 | "id" : "obj-52", 223 | "numoutlets" : 2, 224 | "fontsize" : 12.0, 225 | "outlettype" : [ "float", "bang" ] 226 | } 227 | 228 | } 229 | , { 230 | "box" : { 231 | "maxclass" : "newobj", 232 | "text" : "route /dtr/Digital/1", 233 | "fontname" : "Arial", 234 | "patching_rect" : [ 89.0, 200.0, 105.0, 20.0 ], 235 | "numinlets" : 1, 236 | "id" : "obj-53", 237 | "numoutlets" : 2, 238 | "fontsize" : 12.0, 239 | "outlettype" : [ "", "" ] 240 | } 241 | 242 | } 243 | ], 244 | "lines" : [ { 245 | "patchline" : { 246 | "source" : [ "obj-3", 0 ], 247 | "destination" : [ "obj-1", 0 ], 248 | "hidden" : 0, 249 | "midpoints" : [ ] 250 | } 251 | 252 | } 253 | , { 254 | "patchline" : { 255 | "source" : [ "obj-5", 0 ], 256 | "destination" : [ "obj-64", 0 ], 257 | "hidden" : 0, 258 | "midpoints" : [ ] 259 | } 260 | 261 | } 262 | , { 263 | "patchline" : { 264 | "source" : [ "obj-5", 0 ], 265 | "destination" : [ "obj-61", 0 ], 266 | "hidden" : 0, 267 | "midpoints" : [ ] 268 | } 269 | 270 | } 271 | , { 272 | "patchline" : { 273 | "source" : [ "obj-5", 0 ], 274 | "destination" : [ "obj-49", 0 ], 275 | "hidden" : 0, 276 | "midpoints" : [ ] 277 | } 278 | 279 | } 280 | , { 281 | "patchline" : { 282 | "source" : [ "obj-5", 0 ], 283 | "destination" : [ "obj-53", 0 ], 284 | "hidden" : 0, 285 | "midpoints" : [ ] 286 | } 287 | 288 | } 289 | , { 290 | "patchline" : { 291 | "source" : [ "obj-4", 0 ], 292 | "destination" : [ "obj-5", 0 ], 293 | "hidden" : 0, 294 | "midpoints" : [ ] 295 | } 296 | 297 | } 298 | , { 299 | "patchline" : { 300 | "source" : [ "obj-1", 0 ], 301 | "destination" : [ "obj-4", 0 ], 302 | "hidden" : 0, 303 | "midpoints" : [ ] 304 | } 305 | 306 | } 307 | , { 308 | "patchline" : { 309 | "source" : [ "obj-64", 0 ], 310 | "destination" : [ "obj-62", 0 ], 311 | "hidden" : 0, 312 | "midpoints" : [ ] 313 | } 314 | 315 | } 316 | , { 317 | "patchline" : { 318 | "source" : [ "obj-64", 0 ], 319 | "destination" : [ "obj-63", 0 ], 320 | "hidden" : 0, 321 | "midpoints" : [ ] 322 | } 323 | 324 | } 325 | , { 326 | "patchline" : { 327 | "source" : [ "obj-61", 0 ], 328 | "destination" : [ "obj-60", 0 ], 329 | "hidden" : 0, 330 | "midpoints" : [ ] 331 | } 332 | 333 | } 334 | , { 335 | "patchline" : { 336 | "source" : [ "obj-61", 0 ], 337 | "destination" : [ "obj-51", 0 ], 338 | "hidden" : 0, 339 | "midpoints" : [ ] 340 | } 341 | 342 | } 343 | , { 344 | "patchline" : { 345 | "source" : [ "obj-49", 0 ], 346 | "destination" : [ "obj-35", 0 ], 347 | "hidden" : 0, 348 | "midpoints" : [ ] 349 | } 350 | 351 | } 352 | , { 353 | "patchline" : { 354 | "source" : [ "obj-49", 0 ], 355 | "destination" : [ "obj-48", 0 ], 356 | "hidden" : 0, 357 | "midpoints" : [ ] 358 | } 359 | 360 | } 361 | , { 362 | "patchline" : { 363 | "source" : [ "obj-53", 0 ], 364 | "destination" : [ "obj-33", 0 ], 365 | "hidden" : 0, 366 | "midpoints" : [ ] 367 | } 368 | 369 | } 370 | , { 371 | "patchline" : { 372 | "source" : [ "obj-53", 0 ], 373 | "destination" : [ "obj-52", 0 ], 374 | "hidden" : 0, 375 | "midpoints" : [ ] 376 | } 377 | 378 | } 379 | ] 380 | } 381 | 382 | } 383 | -------------------------------------------------------------------------------- /misc&utilities/illucia_dtr_max_objects/dtrSwitches.maxpat: -------------------------------------------------------------------------------- 1 | { 2 | "patcher" : { 3 | "fileversion" : 1, 4 | "rect" : [ 25.0, 69.0, 640.0, 480.0 ], 5 | "bglocked" : 0, 6 | "defrect" : [ 25.0, 69.0, 640.0, 480.0 ], 7 | "openrect" : [ 0.0, 0.0, 0.0, 0.0 ], 8 | "openinpresentation" : 0, 9 | "default_fontsize" : 12.0, 10 | "default_fontface" : 0, 11 | "default_fontname" : "Arial", 12 | "gridonopen" : 0, 13 | "gridsize" : [ 15.0, 15.0 ], 14 | "gridsnaponopen" : 0, 15 | "toolbarvisible" : 1, 16 | "boxanimatetime" : 200, 17 | "imprint" : 0, 18 | "enablehscroll" : 1, 19 | "enablevscroll" : 1, 20 | "devicewidth" : 0.0, 21 | "boxes" : [ { 22 | "box" : { 23 | "maxclass" : "comment", 24 | "text" : "Port Defaults to 12001\nOptional argument can change that", 25 | "linecount" : 3, 26 | "fontname" : "Arial", 27 | "patching_rect" : [ 431.0, 36.0, 154.0, 48.0 ], 28 | "numinlets" : 1, 29 | "id" : "obj-2", 30 | "numoutlets" : 0, 31 | "fontsize" : 12.0 32 | } 33 | 34 | } 35 | , { 36 | "box" : { 37 | "maxclass" : "newobj", 38 | "text" : "unpack 1", 39 | "fontname" : "Arial", 40 | "patching_rect" : [ 308.0, 64.0, 59.0, 20.0 ], 41 | "numinlets" : 1, 42 | "id" : "obj-1", 43 | "numoutlets" : 1, 44 | "fontsize" : 12.0, 45 | "outlettype" : [ "int" ] 46 | } 47 | 48 | } 49 | , { 50 | "box" : { 51 | "maxclass" : "newobj", 52 | "text" : "patcherargs 12001", 53 | "fontname" : "Arial", 54 | "patching_rect" : [ 308.0, 33.0, 111.0, 20.0 ], 55 | "numinlets" : 1, 56 | "id" : "obj-3", 57 | "numoutlets" : 2, 58 | "fontsize" : 12.0, 59 | "outlettype" : [ "", "" ] 60 | } 61 | 62 | } 63 | , { 64 | "box" : { 65 | "maxclass" : "message", 66 | "text" : "port $1", 67 | "fontname" : "Arial", 68 | "patching_rect" : [ 308.0, 87.0, 48.0, 18.0 ], 69 | "numinlets" : 2, 70 | "id" : "obj-4", 71 | "numoutlets" : 1, 72 | "fontsize" : 12.0, 73 | "outlettype" : [ "" ] 74 | } 75 | 76 | } 77 | , { 78 | "box" : { 79 | "maxclass" : "newobj", 80 | "text" : "udpreceive 12001", 81 | "fontname" : "Arial", 82 | "patching_rect" : [ 308.0, 112.0, 106.0, 20.0 ], 83 | "numinlets" : 1, 84 | "id" : "obj-5", 85 | "numoutlets" : 1, 86 | "fontsize" : 12.0, 87 | "outlettype" : [ "" ] 88 | } 89 | 90 | } 91 | , { 92 | "box" : { 93 | "maxclass" : "outlet", 94 | "patching_rect" : [ 165.0, 424.0, 25.0, 25.0 ], 95 | "numinlets" : 1, 96 | "id" : "obj-65", 97 | "numoutlets" : 0, 98 | "comment" : "Switch (Digital) 4" 99 | } 100 | 101 | } 102 | , { 103 | "box" : { 104 | "maxclass" : "flonum", 105 | "fontname" : "Arial", 106 | "patching_rect" : [ 204.0, 424.0, 50.0, 20.0 ], 107 | "numinlets" : 1, 108 | "id" : "obj-66", 109 | "numoutlets" : 2, 110 | "fontsize" : 12.0, 111 | "outlettype" : [ "float", "bang" ] 112 | } 113 | 114 | } 115 | , { 116 | "box" : { 117 | "maxclass" : "newobj", 118 | "text" : "route /dtr/Digital/8", 119 | "fontname" : "Arial", 120 | "patching_rect" : [ 165.0, 398.0, 105.0, 20.0 ], 121 | "numinlets" : 1, 122 | "id" : "obj-67", 123 | "numoutlets" : 2, 124 | "fontsize" : 12.0, 125 | "outlettype" : [ "", "" ] 126 | } 127 | 128 | } 129 | , { 130 | "box" : { 131 | "maxclass" : "outlet", 132 | "patching_rect" : [ 135.0, 355.0, 25.0, 25.0 ], 133 | "numinlets" : 1, 134 | "id" : "obj-68", 135 | "numoutlets" : 0, 136 | "comment" : "Switch (Digital) 3" 137 | } 138 | 139 | } 140 | , { 141 | "box" : { 142 | "maxclass" : "flonum", 143 | "fontname" : "Arial", 144 | "patching_rect" : [ 174.0, 355.0, 50.0, 20.0 ], 145 | "numinlets" : 1, 146 | "id" : "obj-69", 147 | "numoutlets" : 2, 148 | "fontsize" : 12.0, 149 | "outlettype" : [ "float", "bang" ] 150 | } 151 | 152 | } 153 | , { 154 | "box" : { 155 | "maxclass" : "newobj", 156 | "text" : "route /dtr/Digital/7", 157 | "fontname" : "Arial", 158 | "patching_rect" : [ 135.0, 329.0, 105.0, 20.0 ], 159 | "numinlets" : 1, 160 | "id" : "obj-70", 161 | "numoutlets" : 2, 162 | "fontsize" : 12.0, 163 | "outlettype" : [ "", "" ] 164 | } 165 | 166 | } 167 | , { 168 | "box" : { 169 | "maxclass" : "outlet", 170 | "patching_rect" : [ 104.0, 286.0, 25.0, 25.0 ], 171 | "numinlets" : 1, 172 | "id" : "obj-71", 173 | "numoutlets" : 0, 174 | "comment" : "Switch (Digital) 2" 175 | } 176 | 177 | } 178 | , { 179 | "box" : { 180 | "maxclass" : "flonum", 181 | "fontname" : "Arial", 182 | "patching_rect" : [ 143.0, 286.0, 50.0, 20.0 ], 183 | "numinlets" : 1, 184 | "id" : "obj-72", 185 | "numoutlets" : 2, 186 | "fontsize" : 12.0, 187 | "outlettype" : [ "float", "bang" ] 188 | } 189 | 190 | } 191 | , { 192 | "box" : { 193 | "maxclass" : "newobj", 194 | "text" : "route /dtr/Digital/6", 195 | "fontname" : "Arial", 196 | "patching_rect" : [ 104.0, 260.0, 105.0, 20.0 ], 197 | "numinlets" : 1, 198 | "id" : "obj-73", 199 | "numoutlets" : 2, 200 | "fontsize" : 12.0, 201 | "outlettype" : [ "", "" ] 202 | } 203 | 204 | } 205 | , { 206 | "box" : { 207 | "maxclass" : "outlet", 208 | "patching_rect" : [ 72.0, 224.0, 25.0, 25.0 ], 209 | "numinlets" : 1, 210 | "id" : "obj-74", 211 | "numoutlets" : 0, 212 | "comment" : "Switch (Digital) 1" 213 | } 214 | 215 | } 216 | , { 217 | "box" : { 218 | "maxclass" : "flonum", 219 | "fontname" : "Arial", 220 | "patching_rect" : [ 111.0, 224.0, 50.0, 20.0 ], 221 | "numinlets" : 1, 222 | "id" : "obj-76", 223 | "numoutlets" : 2, 224 | "fontsize" : 12.0, 225 | "outlettype" : [ "float", "bang" ] 226 | } 227 | 228 | } 229 | , { 230 | "box" : { 231 | "maxclass" : "newobj", 232 | "text" : "route /dtr/Digital/5", 233 | "fontname" : "Arial", 234 | "patching_rect" : [ 72.0, 198.0, 105.0, 20.0 ], 235 | "numinlets" : 1, 236 | "id" : "obj-77", 237 | "numoutlets" : 2, 238 | "fontsize" : 12.0, 239 | "outlettype" : [ "", "" ] 240 | } 241 | 242 | } 243 | ], 244 | "lines" : [ { 245 | "patchline" : { 246 | "source" : [ "obj-5", 0 ], 247 | "destination" : [ "obj-67", 0 ], 248 | "hidden" : 0, 249 | "midpoints" : [ ] 250 | } 251 | 252 | } 253 | , { 254 | "patchline" : { 255 | "source" : [ "obj-5", 0 ], 256 | "destination" : [ "obj-70", 0 ], 257 | "hidden" : 0, 258 | "midpoints" : [ ] 259 | } 260 | 261 | } 262 | , { 263 | "patchline" : { 264 | "source" : [ "obj-5", 0 ], 265 | "destination" : [ "obj-73", 0 ], 266 | "hidden" : 0, 267 | "midpoints" : [ ] 268 | } 269 | 270 | } 271 | , { 272 | "patchline" : { 273 | "source" : [ "obj-67", 0 ], 274 | "destination" : [ "obj-65", 0 ], 275 | "hidden" : 0, 276 | "midpoints" : [ ] 277 | } 278 | 279 | } 280 | , { 281 | "patchline" : { 282 | "source" : [ "obj-67", 0 ], 283 | "destination" : [ "obj-66", 0 ], 284 | "hidden" : 0, 285 | "midpoints" : [ ] 286 | } 287 | 288 | } 289 | , { 290 | "patchline" : { 291 | "source" : [ "obj-70", 0 ], 292 | "destination" : [ "obj-69", 0 ], 293 | "hidden" : 0, 294 | "midpoints" : [ ] 295 | } 296 | 297 | } 298 | , { 299 | "patchline" : { 300 | "source" : [ "obj-70", 0 ], 301 | "destination" : [ "obj-68", 0 ], 302 | "hidden" : 0, 303 | "midpoints" : [ ] 304 | } 305 | 306 | } 307 | , { 308 | "patchline" : { 309 | "source" : [ "obj-73", 0 ], 310 | "destination" : [ "obj-71", 0 ], 311 | "hidden" : 0, 312 | "midpoints" : [ ] 313 | } 314 | 315 | } 316 | , { 317 | "patchline" : { 318 | "source" : [ "obj-73", 0 ], 319 | "destination" : [ "obj-72", 0 ], 320 | "hidden" : 0, 321 | "midpoints" : [ ] 322 | } 323 | 324 | } 325 | , { 326 | "patchline" : { 327 | "source" : [ "obj-77", 0 ], 328 | "destination" : [ "obj-74", 0 ], 329 | "hidden" : 0, 330 | "midpoints" : [ ] 331 | } 332 | 333 | } 334 | , { 335 | "patchline" : { 336 | "source" : [ "obj-77", 0 ], 337 | "destination" : [ "obj-76", 0 ], 338 | "hidden" : 0, 339 | "midpoints" : [ ] 340 | } 341 | 342 | } 343 | , { 344 | "patchline" : { 345 | "source" : [ "obj-5", 0 ], 346 | "destination" : [ "obj-77", 0 ], 347 | "hidden" : 0, 348 | "midpoints" : [ ] 349 | } 350 | 351 | } 352 | , { 353 | "patchline" : { 354 | "source" : [ "obj-1", 0 ], 355 | "destination" : [ "obj-4", 0 ], 356 | "hidden" : 0, 357 | "midpoints" : [ ] 358 | } 359 | 360 | } 361 | , { 362 | "patchline" : { 363 | "source" : [ "obj-4", 0 ], 364 | "destination" : [ "obj-5", 0 ], 365 | "hidden" : 0, 366 | "midpoints" : [ ] 367 | } 368 | 369 | } 370 | , { 371 | "patchline" : { 372 | "source" : [ "obj-3", 0 ], 373 | "destination" : [ "obj-1", 0 ], 374 | "hidden" : 0, 375 | "midpoints" : [ ] 376 | } 377 | 378 | } 379 | ] 380 | } 381 | 382 | } 383 | -------------------------------------------------------------------------------- /misc&utilities/illucia_dtr_max_objects/dtrKnobs.maxpat: -------------------------------------------------------------------------------- 1 | { 2 | "patcher" : { 3 | "fileversion" : 1, 4 | "rect" : [ -152.0, -651.0, 1278.0, 601.0 ], 5 | "bglocked" : 0, 6 | "defrect" : [ -152.0, -651.0, 1278.0, 601.0 ], 7 | "openrect" : [ 0.0, 0.0, 0.0, 0.0 ], 8 | "openinpresentation" : 0, 9 | "default_fontsize" : 12.0, 10 | "default_fontface" : 0, 11 | "default_fontname" : "Arial", 12 | "gridonopen" : 0, 13 | "gridsize" : [ 15.0, 15.0 ], 14 | "gridsnaponopen" : 0, 15 | "toolbarvisible" : 1, 16 | "boxanimatetime" : 200, 17 | "imprint" : 0, 18 | "enablehscroll" : 1, 19 | "enablevscroll" : 1, 20 | "devicewidth" : 0.0, 21 | "boxes" : [ { 22 | "box" : { 23 | "maxclass" : "comment", 24 | "text" : "Port Defaults to 12001\nOptional argument can change that", 25 | "linecount" : 3, 26 | "fontname" : "Arial", 27 | "patching_rect" : [ 445.0, 14.0, 154.0, 48.0 ], 28 | "numinlets" : 1, 29 | "id" : "obj-13", 30 | "numoutlets" : 0, 31 | "fontsize" : 12.0 32 | } 33 | 34 | } 35 | , { 36 | "box" : { 37 | "maxclass" : "newobj", 38 | "text" : "unpack 1", 39 | "fontname" : "Arial", 40 | "patching_rect" : [ 322.0, 42.0, 59.0, 20.0 ], 41 | "numinlets" : 1, 42 | "id" : "obj-18", 43 | "numoutlets" : 1, 44 | "fontsize" : 12.0, 45 | "outlettype" : [ "int" ] 46 | } 47 | 48 | } 49 | , { 50 | "box" : { 51 | "maxclass" : "newobj", 52 | "text" : "patcherargs 12001", 53 | "fontname" : "Arial", 54 | "patching_rect" : [ 322.0, 11.0, 111.0, 20.0 ], 55 | "numinlets" : 1, 56 | "id" : "obj-22", 57 | "numoutlets" : 2, 58 | "fontsize" : 12.0, 59 | "outlettype" : [ "", "" ] 60 | } 61 | 62 | } 63 | , { 64 | "box" : { 65 | "maxclass" : "message", 66 | "text" : "port $1", 67 | "fontname" : "Arial", 68 | "patching_rect" : [ 322.0, 65.0, 48.0, 18.0 ], 69 | "numinlets" : 2, 70 | "id" : "obj-4", 71 | "numoutlets" : 1, 72 | "fontsize" : 12.0, 73 | "outlettype" : [ "" ] 74 | } 75 | 76 | } 77 | , { 78 | "box" : { 79 | "maxclass" : "newobj", 80 | "text" : "udpreceive 12001", 81 | "fontname" : "Arial", 82 | "patching_rect" : [ 322.0, 98.0, 106.0, 20.0 ], 83 | "numinlets" : 1, 84 | "id" : "obj-25", 85 | "numoutlets" : 1, 86 | "fontsize" : 12.0, 87 | "outlettype" : [ "" ] 88 | } 89 | 90 | } 91 | , { 92 | "box" : { 93 | "maxclass" : "outlet", 94 | "patching_rect" : [ 145.0, 450.0, 25.0, 25.0 ], 95 | "numinlets" : 1, 96 | "id" : "obj-21", 97 | "numoutlets" : 0, 98 | "comment" : "Knob (Continuous) 6" 99 | } 100 | 101 | } 102 | , { 103 | "box" : { 104 | "maxclass" : "flonum", 105 | "fontname" : "Arial", 106 | "patching_rect" : [ 184.0, 455.0, 50.0, 20.0 ], 107 | "numinlets" : 1, 108 | "id" : "obj-23", 109 | "numoutlets" : 2, 110 | "fontsize" : 12.0, 111 | "outlettype" : [ "float", "bang" ] 112 | } 113 | 114 | } 115 | , { 116 | "box" : { 117 | "maxclass" : "newobj", 118 | "text" : "route /dtr/Continuous/6", 119 | "fontname" : "Arial", 120 | "patching_rect" : [ 145.0, 425.0, 133.0, 20.0 ], 121 | "numinlets" : 1, 122 | "id" : "obj-24", 123 | "numoutlets" : 2, 124 | "fontsize" : 12.0, 125 | "outlettype" : [ "", "" ] 126 | } 127 | 128 | } 129 | , { 130 | "box" : { 131 | "maxclass" : "outlet", 132 | "patching_rect" : [ 134.0, 391.0, 25.0, 25.0 ], 133 | "numinlets" : 1, 134 | "id" : "obj-17", 135 | "numoutlets" : 0, 136 | "comment" : "Knob (Continuous) 5" 137 | } 138 | 139 | } 140 | , { 141 | "box" : { 142 | "maxclass" : "flonum", 143 | "fontname" : "Arial", 144 | "patching_rect" : [ 173.0, 396.0, 50.0, 20.0 ], 145 | "numinlets" : 1, 146 | "id" : "obj-19", 147 | "numoutlets" : 2, 148 | "fontsize" : 12.0, 149 | "outlettype" : [ "float", "bang" ] 150 | } 151 | 152 | } 153 | , { 154 | "box" : { 155 | "maxclass" : "newobj", 156 | "text" : "route /dtr/Continuous/5", 157 | "fontname" : "Arial", 158 | "patching_rect" : [ 134.0, 366.0, 133.0, 20.0 ], 159 | "numinlets" : 1, 160 | "id" : "obj-20", 161 | "numoutlets" : 2, 162 | "fontsize" : 12.0, 163 | "outlettype" : [ "", "" ] 164 | } 165 | 166 | } 167 | , { 168 | "box" : { 169 | "maxclass" : "outlet", 170 | "patching_rect" : [ 125.0, 332.0, 25.0, 25.0 ], 171 | "numinlets" : 1, 172 | "id" : "obj-12", 173 | "numoutlets" : 0, 174 | "comment" : "Knob (Continuous) 4" 175 | } 176 | 177 | } 178 | , { 179 | "box" : { 180 | "maxclass" : "flonum", 181 | "fontname" : "Arial", 182 | "patching_rect" : [ 164.0, 337.0, 50.0, 20.0 ], 183 | "numinlets" : 1, 184 | "id" : "obj-14", 185 | "numoutlets" : 2, 186 | "fontsize" : 12.0, 187 | "outlettype" : [ "float", "bang" ] 188 | } 189 | 190 | } 191 | , { 192 | "box" : { 193 | "maxclass" : "newobj", 194 | "text" : "route /dtr/Continuous/4", 195 | "fontname" : "Arial", 196 | "patching_rect" : [ 125.0, 307.0, 133.0, 20.0 ], 197 | "numinlets" : 1, 198 | "id" : "obj-15", 199 | "numoutlets" : 2, 200 | "fontsize" : 12.0, 201 | "outlettype" : [ "", "" ] 202 | } 203 | 204 | } 205 | , { 206 | "box" : { 207 | "maxclass" : "outlet", 208 | "patching_rect" : [ 114.0, 269.0, 25.0, 25.0 ], 209 | "numinlets" : 1, 210 | "id" : "obj-8", 211 | "numoutlets" : 0, 212 | "comment" : "Knob (Continuous) 3" 213 | } 214 | 215 | } 216 | , { 217 | "box" : { 218 | "maxclass" : "flonum", 219 | "fontname" : "Arial", 220 | "patching_rect" : [ 153.0, 274.0, 50.0, 20.0 ], 221 | "numinlets" : 1, 222 | "id" : "obj-10", 223 | "numoutlets" : 2, 224 | "fontsize" : 12.0, 225 | "outlettype" : [ "float", "bang" ] 226 | } 227 | 228 | } 229 | , { 230 | "box" : { 231 | "maxclass" : "newobj", 232 | "text" : "route /dtr/Continuous/3", 233 | "fontname" : "Arial", 234 | "patching_rect" : [ 114.0, 244.0, 133.0, 20.0 ], 235 | "numinlets" : 1, 236 | "id" : "obj-11", 237 | "numoutlets" : 2, 238 | "fontsize" : 12.0, 239 | "outlettype" : [ "", "" ] 240 | } 241 | 242 | } 243 | , { 244 | "box" : { 245 | "maxclass" : "outlet", 246 | "patching_rect" : [ 98.0, 212.0, 25.0, 25.0 ], 247 | "numinlets" : 1, 248 | "id" : "obj-2", 249 | "numoutlets" : 0, 250 | "comment" : "Knob (Continuous) 2" 251 | } 252 | 253 | } 254 | , { 255 | "box" : { 256 | "maxclass" : "flonum", 257 | "fontname" : "Arial", 258 | "patching_rect" : [ 137.0, 217.0, 50.0, 20.0 ], 259 | "numinlets" : 1, 260 | "id" : "obj-5", 261 | "numoutlets" : 2, 262 | "fontsize" : 12.0, 263 | "outlettype" : [ "float", "bang" ] 264 | } 265 | 266 | } 267 | , { 268 | "box" : { 269 | "maxclass" : "newobj", 270 | "text" : "route /dtr/Continuous/2", 271 | "fontname" : "Arial", 272 | "patching_rect" : [ 98.0, 187.0, 133.0, 20.0 ], 273 | "numinlets" : 1, 274 | "id" : "obj-7", 275 | "numoutlets" : 2, 276 | "fontsize" : 12.0, 277 | "outlettype" : [ "", "" ] 278 | } 279 | 280 | } 281 | , { 282 | "box" : { 283 | "maxclass" : "outlet", 284 | "patching_rect" : [ 87.0, 145.0, 25.0, 25.0 ], 285 | "numinlets" : 1, 286 | "id" : "obj-1", 287 | "numoutlets" : 0, 288 | "comment" : "Knob (Continuous) 1" 289 | } 290 | 291 | } 292 | , { 293 | "box" : { 294 | "maxclass" : "flonum", 295 | "fontname" : "Arial", 296 | "patching_rect" : [ 126.0, 150.0, 50.0, 20.0 ], 297 | "numinlets" : 1, 298 | "id" : "obj-6", 299 | "numoutlets" : 2, 300 | "fontsize" : 12.0, 301 | "outlettype" : [ "float", "bang" ] 302 | } 303 | 304 | } 305 | , { 306 | "box" : { 307 | "maxclass" : "newobj", 308 | "text" : "route /dtr/Continuous/1", 309 | "fontname" : "Arial", 310 | "patching_rect" : [ 87.0, 120.0, 133.0, 20.0 ], 311 | "numinlets" : 1, 312 | "id" : "obj-3", 313 | "numoutlets" : 2, 314 | "fontsize" : 12.0, 315 | "outlettype" : [ "", "" ] 316 | } 317 | 318 | } 319 | ], 320 | "lines" : [ { 321 | "patchline" : { 322 | "source" : [ "obj-25", 0 ], 323 | "destination" : [ "obj-24", 0 ], 324 | "hidden" : 0, 325 | "midpoints" : [ ] 326 | } 327 | 328 | } 329 | , { 330 | "patchline" : { 331 | "source" : [ "obj-25", 0 ], 332 | "destination" : [ "obj-20", 0 ], 333 | "hidden" : 0, 334 | "midpoints" : [ ] 335 | } 336 | 337 | } 338 | , { 339 | "patchline" : { 340 | "source" : [ "obj-25", 0 ], 341 | "destination" : [ "obj-15", 0 ], 342 | "hidden" : 0, 343 | "midpoints" : [ ] 344 | } 345 | 346 | } 347 | , { 348 | "patchline" : { 349 | "source" : [ "obj-25", 0 ], 350 | "destination" : [ "obj-11", 0 ], 351 | "hidden" : 0, 352 | "midpoints" : [ ] 353 | } 354 | 355 | } 356 | , { 357 | "patchline" : { 358 | "source" : [ "obj-25", 0 ], 359 | "destination" : [ "obj-7", 0 ], 360 | "hidden" : 0, 361 | "midpoints" : [ ] 362 | } 363 | 364 | } 365 | , { 366 | "patchline" : { 367 | "source" : [ "obj-25", 0 ], 368 | "destination" : [ "obj-3", 0 ], 369 | "hidden" : 0, 370 | "midpoints" : [ ] 371 | } 372 | 373 | } 374 | , { 375 | "patchline" : { 376 | "source" : [ "obj-22", 0 ], 377 | "destination" : [ "obj-18", 0 ], 378 | "hidden" : 0, 379 | "midpoints" : [ ] 380 | } 381 | 382 | } 383 | , { 384 | "patchline" : { 385 | "source" : [ "obj-4", 0 ], 386 | "destination" : [ "obj-25", 0 ], 387 | "hidden" : 0, 388 | "midpoints" : [ ] 389 | } 390 | 391 | } 392 | , { 393 | "patchline" : { 394 | "source" : [ "obj-18", 0 ], 395 | "destination" : [ "obj-4", 0 ], 396 | "hidden" : 0, 397 | "midpoints" : [ ] 398 | } 399 | 400 | } 401 | , { 402 | "patchline" : { 403 | "source" : [ "obj-24", 0 ], 404 | "destination" : [ "obj-23", 0 ], 405 | "hidden" : 0, 406 | "midpoints" : [ ] 407 | } 408 | 409 | } 410 | , { 411 | "patchline" : { 412 | "source" : [ "obj-24", 0 ], 413 | "destination" : [ "obj-21", 0 ], 414 | "hidden" : 0, 415 | "midpoints" : [ ] 416 | } 417 | 418 | } 419 | , { 420 | "patchline" : { 421 | "source" : [ "obj-20", 0 ], 422 | "destination" : [ "obj-19", 0 ], 423 | "hidden" : 0, 424 | "midpoints" : [ ] 425 | } 426 | 427 | } 428 | , { 429 | "patchline" : { 430 | "source" : [ "obj-20", 0 ], 431 | "destination" : [ "obj-17", 0 ], 432 | "hidden" : 0, 433 | "midpoints" : [ ] 434 | } 435 | 436 | } 437 | , { 438 | "patchline" : { 439 | "source" : [ "obj-15", 0 ], 440 | "destination" : [ "obj-12", 0 ], 441 | "hidden" : 0, 442 | "midpoints" : [ ] 443 | } 444 | 445 | } 446 | , { 447 | "patchline" : { 448 | "source" : [ "obj-15", 0 ], 449 | "destination" : [ "obj-14", 0 ], 450 | "hidden" : 0, 451 | "midpoints" : [ ] 452 | } 453 | 454 | } 455 | , { 456 | "patchline" : { 457 | "source" : [ "obj-3", 0 ], 458 | "destination" : [ "obj-1", 0 ], 459 | "hidden" : 0, 460 | "midpoints" : [ ] 461 | } 462 | 463 | } 464 | , { 465 | "patchline" : { 466 | "source" : [ "obj-3", 0 ], 467 | "destination" : [ "obj-6", 0 ], 468 | "hidden" : 0, 469 | "midpoints" : [ ] 470 | } 471 | 472 | } 473 | , { 474 | "patchline" : { 475 | "source" : [ "obj-7", 0 ], 476 | "destination" : [ "obj-5", 0 ], 477 | "hidden" : 0, 478 | "midpoints" : [ ] 479 | } 480 | 481 | } 482 | , { 483 | "patchline" : { 484 | "source" : [ "obj-7", 0 ], 485 | "destination" : [ "obj-2", 0 ], 486 | "hidden" : 0, 487 | "midpoints" : [ ] 488 | } 489 | 490 | } 491 | , { 492 | "patchline" : { 493 | "source" : [ "obj-11", 0 ], 494 | "destination" : [ "obj-10", 0 ], 495 | "hidden" : 0, 496 | "midpoints" : [ ] 497 | } 498 | 499 | } 500 | , { 501 | "patchline" : { 502 | "source" : [ "obj-11", 0 ], 503 | "destination" : [ "obj-8", 0 ], 504 | "hidden" : 0, 505 | "midpoints" : [ ] 506 | } 507 | 508 | } 509 | ] 510 | } 511 | 512 | } 513 | -------------------------------------------------------------------------------- /illucia_dtr_design(layout&parts)/vector/illucia_dtr_drill_pilot_holes.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 19 | 21 | 39 | 41 | 42 | 44 | image/svg+xml 45 | 47 | 48 | 49 | 50 | 51 | 55 | 232 | 233 | 234 | -------------------------------------------------------------------------------- /illuciaConnect/illuciaConnect.pde: -------------------------------------------------------------------------------- 1 | //Change these values if you'd like to change illuciaConnect's ports! 2 | final int OSC_INCOMING_PORT = 12000; 3 | final int OSC_OUTGOING_PORT = 12001; 4 | 5 | //Todo: 6 | 7 | //automatically get device info at boot. 8 | //make model of device OO, support multiple devices plugged in at once... 9 | //make it so one can connect illucia devices after launch 10 | //make it so user selects device from serial list..? and has connect/disconnect buttons in the utility? 11 | //create a keepalive signal on the illucia unit, then automatically close the serial port if a timepassedSinceLastPacket > keepalive 12 | 13 | import processing.serial.*; 14 | import oscP5.*; 15 | import netP5.*; 16 | 17 | Serial serialConnection; 18 | OscP5 oscP5; 19 | NetAddress myRemoteLocation; 20 | 21 | //Data ranges//////////////////////////////////////////////// 22 | //The microcontrollers I'm using have 10bit A->D converters... 23 | final float microcontrollerLow = 0; 24 | final float microcontrollerHigh = 1023; 25 | //...which get mapped to this standardized range for the sake of seamless/universal communication with other software 26 | final float OSCLow = 0.0; 27 | final float OSCHigh = 1.0; 28 | 29 | ////Serial protocol//////////////////////////////////////////////// 30 | //incoming 31 | //The hardware device will send a set of bytes upon state change (aka, a button pressed, jacks patched together, knob turned, etc) 32 | final int MESSAGE_SIZE = 4; //this is number of bytes in each serial message sent by the hardware 33 | //The first byte will denote the type of change being communicated. 34 | final byte CONTINUOUS_TYPE = 0; //Knobs 35 | final byte DIGITAL_TYPE = 1; //Buttons & Switches 36 | final byte JACK_TYPE = 2; //Jack connections & disconnections 37 | 38 | //outgoing 39 | final byte RESET_TYPE = 0; 40 | final byte LED_TYPE = 1; 41 | /// 42 | boolean serialConnected = false; // has illucaConnect initialized a serial connection 43 | boolean handShakeCompleted = false; //has the device successfully completed a handshake with this program? 44 | 45 | //TODO: automatically get this from device at boot. 46 | //Device details... 47 | String deviceName = "dtr"; 48 | final int NUMBER_OF_DIGITAL_ELEMENTS = 8; 49 | final int NUMBER_OF_CONTINUOUS_ELEMENTS = 6; 50 | final int NUMBER_OF_JACKS = 16; 51 | final int NUMBER_OF_LEDS = 4; 52 | //int versionNumber; 53 | 54 | //Create a place to store illucia device state 55 | float[] digitalElements; 56 | float[] continuousElements; 57 | Jack[] jacks; 58 | 59 | //Images to show connected/disconnected status 60 | PImage[] connectionStatusImages; 61 | 62 | void setup() { 63 | size(300, 300); 64 | background(255); 65 | 66 | connectionStatusImages = new PImage[2]; 67 | 68 | //try to load images 69 | //connectionStatusImages[0] = loadImage("illuciaNotConnected.png"); 70 | //connectionStatusImages[1] = loadImage("illuciaConnected.png"); 71 | //call the helper that renders text and images 72 | setConnectionStatus(false); 73 | 74 | noLoop(); //disable the draw() loop, as this program is event driven for now 75 | //low frame rates = less CPU usage. 76 | frameRate(1); //useless.. at the moment, drawing is disabled in this sketch. Might get readded later though 77 | 78 | //initialize OSC 79 | oscP5 = new OscP5(this, OSC_INCOMING_PORT); 80 | myRemoteLocation = new NetAddress("127.0.0.1", OSC_OUTGOING_PORT); 81 | 82 | //initialize serial 83 | connectOverSerial(); 84 | 85 | //Setup the model of the device 86 | //buttons&switches 87 | digitalElements = new float[NUMBER_OF_DIGITAL_ELEMENTS]; 88 | //knobs 89 | continuousElements = new float[NUMBER_OF_CONTINUOUS_ELEMENTS]; 90 | //jacks... 91 | jacks = new Jack[NUMBER_OF_JACKS]; 92 | for (int i = 0; i < jacks.length; i++) { 93 | jacks[i] = new Jack(i); 94 | } 95 | 96 | prepareExitHandler(); //sets up an event handled that is called upon program's closing. Tells device to reset to a new state and await a new handshake 97 | } 98 | 99 | 100 | void draw() { 101 | } 102 | 103 | //This gets called by the serial library when something on the device changes 104 | void serialEvent(Serial port) { 105 | 106 | byte[] incoming = new byte[MESSAGE_SIZE]; 107 | 108 | if (!handShakeCompleted && serialConnection.available () >= incoming.length && serialConnection.available() % incoming.length == 0) { //has this device connected before? if not, check for a initial handshake 109 | 110 | println("Starting handshake.."); 111 | 112 | /* if this is the first serialEvent, 113 | make sure the connection has enough time to get setup before reading 114 | */ 115 | delay(2000); 116 | 117 | serialConnection.readBytes(incoming); 118 | 119 | if (incoming[0] == 'd') { 120 | 121 | serialConnection.write('P'); 122 | println("Handshake Complete"); 123 | println("Bytes available after handshake and clear: "+serialConnection.available()); 124 | 125 | //after handshake, update the display 126 | setConnectionStatus(true); 127 | handShakeCompleted = true; 128 | 129 | serialConnection.clear(); 130 | } 131 | } 132 | 133 | else { //Initial handshake has already been established 134 | 135 | //println("Available: " + serialConnection.available()); 136 | 137 | while (serialConnection.available () >= incoming.length && serialConnection.available() % incoming.length == 0) { 138 | 139 | serialConnection.readBytes(incoming); 140 | 141 | //println("reading"); 142 | // for (int i = 0; i < incoming.length; i++) { 143 | // println(i+"'s value: "+incoming[i]); 144 | // } 145 | 146 | OscMessage messageToSend; 147 | 148 | //println("Ready to send OSC messages"); 149 | 150 | switch(incoming[0]) { //Switch the serial bytes based on the byte that specifies message type 151 | case CONTINUOUS_TYPE: 152 | 153 | //what number element(knob) is this? 154 | int continuousElementIndex = incoming[1]; 155 | 156 | float contValue = int(incoming[2] << 8) + int(incoming[3]); 157 | contValue = map(contValue, microcontrollerLow, microcontrollerHigh, OSCLow, OSCHigh); 158 | 159 | //update model of device 160 | continuousElements[continuousElementIndex] = contValue; 161 | 162 | //Now, broadcast the value change over OSC 163 | 164 | //control elements are indexed at 0 on the hardware, but 1 in software, so add 1 when sending this value out 165 | String msgC = "/"+deviceName+"/Continuous/"+(continuousElementIndex + 1); 166 | messageToSend = new OscMessage(msgC); 167 | messageToSend.add(contValue); 168 | //println(msgC + " " + contValue); 169 | oscP5.send(messageToSend, myRemoteLocation); 170 | 171 | //println("Pot ID: "+ incoming[1] + " value: " +contValue); 172 | break; 173 | 174 | 175 | case DIGITAL_TYPE: 176 | 177 | //what number element(button or switch) is this? 178 | int digitalElementIndex = incoming[1]; 179 | 180 | float value = 0.0; 181 | 182 | if (incoming[2] == 1) { //switch or button is activated 183 | value = 1.0; 184 | } 185 | else if (incoming[2] == 0) { //switch or button is off 186 | value = 0.0; 187 | } 188 | 189 | //update model of device 190 | digitalElements[digitalElementIndex] = value; 191 | 192 | //now, broadcast the value change over OSC 193 | 194 | //control element numbers are indexed at 0 on the hardware, but 1 in software, so add 1 195 | String msgD = "/"+deviceName+"/Digital/"+(digitalElementIndex+1); 196 | messageToSend = new OscMessage(msgD); 197 | messageToSend.add(value); 198 | //println(msgD + " " + value); 199 | oscP5.send(messageToSend, myRemoteLocation); 200 | 201 | //println("Button ID: "+ incoming[1] + " value: " +incoming[2]); 202 | break; 203 | 204 | 205 | case JACK_TYPE: 206 | //There was a jack connection or disconnection - 207 | //update this utility's model of the patchbay accordingly, so that it can forward messages based on the state of patch bay & cables. 208 | 209 | Jack jack1 = jacks[incoming[1]]; //main jack being checked for updates 210 | Jack jack2 = jacks[incoming[2]]; //the jack that jack1 is connected to. 211 | 212 | float isJackPatched = 1.0; //defaulting to 1.0, which assumes most events will involve connection 213 | 214 | if (incoming[3] == 1) { //there is a new connection 215 | jack1.connections.add(jack2); 216 | } 217 | else { //a connection was broken 218 | jack1.connections.remove(jack2); 219 | 220 | if (jack1.connections.isEmpty()) { // if this jack isn't connected to anything else.. 221 | isJackPatched = 0.0; 222 | } 223 | } 224 | 225 | //broadcast the connection or disconnection over OSC. (indicate jack index in the OSC message address) 226 | //the argument is 1.0 if the jack has connections, and 0.0 if it doesn't 227 | //todo: consider adding a second argument: an index list of all jacks connected? (if you do, dont forget to change it in the PollDeviceState too! refactor all this..) 228 | String msgJ = "/"+deviceName+"/JackIsPatched/"+(jack1.getID()+1); 229 | messageToSend = new OscMessage(msgJ); //the hardware indexes from 0, so add 1 because software indexes from 0 230 | messageToSend.add(isJackPatched); 231 | //println(msgJ + " " + isJackPatched); 232 | oscP5.send(messageToSend, myRemoteLocation); 233 | 234 | // println("JACK ID: "+ jack1.getID() + "Other JACK ID: "+ jack2.getID() +" connection: " +incoming[3]); 235 | // println("connections:"+jack1.connections.size() ); 236 | break; 237 | } 238 | } 239 | } 240 | } 241 | 242 | //handles patchbay forwarding, LED brightness, and 243 | void oscEvent(OscMessage messageReceived) { 244 | 245 | String[] msgSplit = messageReceived.addrPattern().split("/"); // splits OSC msg 246 | 247 | //If the OSC msg matches the name of the game 248 | if (msgSplit[1].equals(deviceName)) { 249 | 250 | if (msgSplit[2].equals("LED")) { //set an LED 251 | 252 | OscArgument fVal = messageReceived.get(0); //<>// 253 | int mappedLEDBrightness = int(constrain(map(fVal.floatValue(), OSCLow, OSCHigh, 0.0, 255), 0, 255)); //<>// 254 | int LEDNumber = Integer.parseInt(msgSplit[3]) - 1; 255 | 256 | setLED(LEDNumber, mappedLEDBrightness); 257 | } 258 | 259 | else if (msgSplit[2].equals("OutputJack")) { //receives messages to be sent out of a designated output jack 260 | 261 | //SHOULD ADD A CHECK HERE TO MAKE SURE THE JACK IS ACTUALLY WITHIN THE RANGE AVAILABLE ON THE INSTRUMENT? or go nuts and just mod everything, for good times.. 262 | int jackNumber = Integer.parseInt(msgSplit[3]) - 1; 263 | 264 | ArrayList connections = jacks[jackNumber].connections; 265 | 266 | for (int i = 0; i < connections.size(); i++) { 267 | int idToForwardTo = connections.get(i).getID() + 1; 268 | 269 | String msgI = "/"+deviceName+"/InputJack/"+ idToForwardTo; 270 | OscMessage messageBeingSent = new OscMessage(msgI); 271 | messageBeingSent.setArguments(messageReceived.arguments()); 272 | //println(messageBeingSent); 273 | oscP5.send(messageBeingSent, myRemoteLocation); 274 | } 275 | } 276 | 277 | //this device automatically sends messages when values on the hardware change, but it also allows the user to poll the device. 278 | //one might send a message to this address when opening a new patch, which will rebroadcast the state of switches, jack connections, etc 279 | else if (msgSplit[2].equals("PollDeviceState")) { 280 | 281 | OscMessage messageToSend; 282 | 283 | //buttons&switches 284 | for (int i = 0; i < digitalElements.length; i++) { 285 | messageToSend = new OscMessage("/"+deviceName+"/Digital/"+(i+1)); 286 | messageToSend.add(digitalElements[i]); 287 | oscP5.send(messageToSend, myRemoteLocation); 288 | } 289 | 290 | //knobs 291 | for (int i = 0; i < continuousElements.length; i++) { 292 | messageToSend = new OscMessage("/"+deviceName+"/Continuous/"+(i + 1)); 293 | messageToSend.add(continuousElements[i]); 294 | oscP5.send(messageToSend, myRemoteLocation); 295 | } 296 | 297 | //TODO: ADD list of jacks as an argument, if you decide to go that way! 298 | //for every jack, broadcast JackIsPatched state 299 | for (int i = 0; i < jacks.length; i++) { 300 | 301 | float isJackPatched = 1.0; 302 | if (jacks[i].connections.isEmpty()) { //no connections? broadcast 0. 303 | isJackPatched = 0.0; 304 | } 305 | messageToSend = new OscMessage("/"+deviceName+"/JackIsPatched/"+(jacks[i].getID()+1)); //the hardware indexes from 0, so add 1 because software indexes from 0 306 | messageToSend.add(isJackPatched); 307 | oscP5.send(messageToSend, myRemoteLocation); 308 | } 309 | } 310 | } 311 | } 312 | 313 | //Class used to keep track of connections 314 | class Jack { 315 | 316 | int _id; 317 | ArrayList connections; //stores the other jacks that this one is connected to 318 | 319 | Jack(int id) { 320 | connections = new ArrayList(); 321 | _id = id; 322 | } 323 | 324 | int getID() { 325 | return _id; 326 | } 327 | } 328 | 329 | //Helper - sends a brightness value to an LED. 330 | void setLED(int LEDNumber, int brightnessValue) { 331 | byte[] bytesToSend = new byte[3]; 332 | //println(LEDNumber + " " + brightnessValue); 333 | //first byte is the type (LED), second is the LED number, next is the value 334 | bytesToSend[0] = LED_TYPE; 335 | bytesToSend[1] = byte(LEDNumber); 336 | bytesToSend[2] = byte(brightnessValue); 337 | serialConnection.write(bytesToSend); //send the LED value over serial 338 | } 339 | 340 | //Helper method for drawing status updates, telling the user if an illucia unit connected 341 | 342 | void setConnectionStatus(boolean isConnected) { 343 | background(255); 344 | textAlign(CENTER, CENTER); 345 | fill(0); 346 | if (isConnected) { 347 | if (connectionStatusImages[1] != null) { //the image loaded successfully.. 348 | image(connectionStatusImages[1], width/2 - connectionStatusImages[0].width/2, height/2 - connectionStatusImages[0].height/2); 349 | } 350 | else { //the image didn't load, just use text 351 | text("Connected!", width/2, height/2); 352 | redraw(); 353 | } 354 | } 355 | else { //still waiting for connection 356 | //Processing doesn't throw errors on file not found, so make sure the image was loaded 357 | if (connectionStatusImages[0] != null) { 358 | image(connectionStatusImages[0], width/2 - connectionStatusImages[0].width/2, height/2 - connectionStatusImages[0].height/2); 359 | } 360 | else //the image didn't load, just use text 361 | text("Hello World", width/2, height/2); 362 | } 363 | redraw(); //need to tell the sketch to redraw() because of the noLoop() call made earlier 364 | } 365 | 366 | 367 | //Calls code upon program's closing. Tells device to await a new handshake 368 | private void prepareExitHandler() { 369 | 370 | Runtime.getRuntime().addShutdownHook(new Thread(new Runnable() { 371 | public void run () { 372 | println("Exiting."); 373 | 374 | //turn all the LEDs off 375 | for (int i = 0; i < NUMBER_OF_LEDS; i++) { 376 | setLED(i, 0); 377 | } 378 | 379 | serialConnection.write(RESET_TYPE); //send the LED value over serial 380 | 381 | try { 382 | stop(); 383 | } 384 | catch (Exception ex) { 385 | ex.printStackTrace(); // not much else to do at this point 386 | } 387 | } 388 | } 389 | )); 390 | } 391 | 392 | void connectOverSerial() { 393 | 394 | String[] availableSerialPorts = Serial.list(); 395 | 396 | 397 | for (int i = 0; i < availableSerialPorts.length; i++) { 398 | 399 | if (!serialConnected) { 400 | 401 | boolean connectionFailed = false; 402 | 403 | try { 404 | serialConnection = new Serial(this, availableSerialPorts[i], 9600); 405 | if (serialConnection.available() >= MESSAGE_SIZE) { 406 | serialConnected = true; 407 | serialConnection.buffer(MESSAGE_SIZE); //let the serial port know the number of bytes to check for with each mesage 408 | } 409 | } 410 | catch (RuntimeException e) { 411 | //println("Couldn't connect on " + availableSerialPorts[i] + " - Trying another port"); 412 | } 413 | } 414 | } 415 | } -------------------------------------------------------------------------------- /illucia_dtr_microcontroller_code/illucia_dtr_microcontroller_code.ino: -------------------------------------------------------------------------------- 1 | /* 2 | Todo: 3 | -After first correspondence handshake, broadcast information about device 4 | Computer will use this to dynamically create a model of the device 5 | */ 6 | 7 | /* 8 | illucia dtr 9 | "deterritorializer" 10 | microcontroller code version 0.9 11 | arduino style code (with Teensy++ as the intended target at the moment) 12 | 13 | When there is a change in state, send a message to the computer specifiying the change. 14 | The message is a 4 byte array with the makeup: 15 | 16 | //first byte: char representaiton of type of control element that this message pertains to 17 | 0 = continuous (potentiometer, sensor, etc) 18 | 1 = digital (button, switch, etc) 19 | 2 = jack event (some jack connection or disconnection) 20 | 3 = arbitrary data (currently unused) 21 | 22 | //second byte 23 | if continous or digital: ID number of control element (ie: which pot changed, or which button changed) 24 | if jack events: first byte pertaining to the state of the grid (for now, just beaming the whole state of the grid over when something changes) 25 | if arbitrary data: first byte of whatever data is being sent 26 | 27 | //remaining bytes: 28 | if continuous: send 2 bytes (the 10bit value from the analogRead) 29 | if digital: send 1 byte (only 1 bit used). send 1 for pressed, 0 for released 30 | if jack event: another jack is involved, so send its ID in the next byte, and another byte pertaining to the state (0 for a disconnection, 1 for a connection) 31 | */ 32 | 33 | //Constants: 34 | byte const CONTINUOUS_TYPE = 0; 35 | byte const DIGITAL_TYPE = 1; 36 | byte const JACK_TYPE = 2; 37 | 38 | int const MESSAGE_SIZE = 4; //4 bytes transmitted every serial message 39 | 40 | int const NUMBER_OF_DIGITAL_ELEMENTS = 8; // how many buttons & switches? 41 | int const NUMBER_OF_CONTINUOUS_ELEMENTS = 6; // how many continuous controls? 42 | int const NUMBER_OF_JACKS = 16; //how many jacks are on this device? 43 | 44 | //debouncing&smoothing 45 | int const DEBOUNCE_DELAY = 20;//how many MS should you wait for a debounced value? 46 | int const ANALOG_CHANGE_THRESHOLD = 6; //used for software smoothing of analogRead jitter 47 | 48 | //For incoming data to microcontroller: 49 | byte const RESET_TYPE = 0; //used to tell the device to go back to waiting for a handshake 50 | byte const LED_TYPE = 1; //used to specify an LED's brightness 51 | int const NUMBER_OF_LEDS = 4; //how many LEDs are on this device? 52 | 53 | 54 | //Pin Setup 55 | //these are lists of the microcontroller pins used. the order that they're listed will determine the control element's ID (as in, what number button or switch or potentiometer etc) 56 | int digitalElementPins[] = { //pins hooked up to "digital" elements like buttons / switches. 57 | 18, 19, 20, 21, 22, 23, 44 ,45 58 | }; 59 | int continuousElementPins[] = { //analog I/O (aka pots.... FRESH POTS!!!!) 60 | 0, 1, 2, 3, 4, 5 61 | }; 62 | int jackPins[] = { 63 | 0,1,2,3,4,5,7,8,9,10,11,12,13,14,15,16 64 | // 17, 16, 15, 13, 12, 11, 10, 9, 32, 33, 34, 35, 8, 7, 5, 4 65 | }; 66 | int ledPins[] = { 67 | 24, 25, 26, 27 68 | }; 69 | 70 | 71 | 72 | boolean needsHandshake = true; //used to determine if communication has been initiated with the device or not 73 | 74 | //Base class for keeping track of the device's state 75 | class ControlElement { 76 | public: 77 | 78 | int _pinNumber; //the microcontroller pin associated with this element 79 | int _id; //the number of this element (aka, is it jack1, jack2, knob1, knob2, etc) 80 | 81 | void setPinNumber(int pinNumber) { 82 | _pinNumber = pinNumber; 83 | } 84 | 85 | void setId(int id) { 86 | _id = id; 87 | } 88 | 89 | }; 90 | 91 | 92 | //Used to keep state of switches, buttons, jack connections.. anything that is on/off, needs debouncing, and is checked with a digital pin on the microcontroller 93 | class DigitalElement : public ControlElement { 94 | public: 95 | 96 | byte _value; 97 | 98 | boolean _debouncing; 99 | unsigned long _timeDebounceStarted; 100 | 101 | DigitalElement() { 102 | _debouncing = false; 103 | 104 | //initializing _value outside of the range of expected values (0 or 1) 105 | //such that it will register the first read as a change in value, and thus broadcast the initial state of the device 106 | _value = 3; 107 | } 108 | 109 | void setValue(byte value) { 110 | _value = value; 111 | } 112 | byte getValue() { 113 | return _value; 114 | } 115 | 116 | void setTimeDebounceStarted(unsigned long timeDebounceStarted) { 117 | _timeDebounceStarted = timeDebounceStarted; 118 | } 119 | unsigned long getTimeDebounceStarted() { 120 | return _timeDebounceStarted; 121 | } 122 | 123 | void setDebouncing (boolean debouncing) { 124 | _debouncing = debouncing; 125 | } 126 | boolean isDebouncing() { 127 | return _debouncing; 128 | } 129 | 130 | void updateState() { 131 | int currentReading = digitalRead(_pinNumber); 132 | 133 | if (_value != currentReading) { //there is a state change, or this is the very first time checking state 134 | 135 | if (_debouncing ) { 136 | 137 | if (_timeDebounceStarted + DEBOUNCE_DELAY <= millis()) { //if the debounce delay has passed 138 | 139 | _debouncing = false; //done debouncing 140 | _value = currentReading; //set the current value 141 | 142 | byte valueToSend; //send opposite of the read, given pull up resisitors 143 | if (_value == HIGH) { 144 | valueToSend = 0; 145 | } 146 | else { 147 | valueToSend = 1; 148 | } 149 | 150 | //pack a byte array with data about the state change 151 | byte dataToSend[MESSAGE_SIZE] = { 152 | DIGITAL_TYPE, lowByte(_id), valueToSend, 255 153 | }; //dummy byte at the end - easier to send everything as packets of the same size.. might change this down the road if there is some need to send arbitrary data. 154 | Serial.write(dataToSend, MESSAGE_SIZE); //send it over serial. 155 | 156 | } 157 | } 158 | else { //this is the first time we've read a state change, and thus should prepare a debounce, re-read after a delay 159 | _debouncing = true; 160 | _timeDebounceStarted = millis(); 161 | } 162 | } 163 | } 164 | }; 165 | 166 | 167 | //Used to keep state of knobs, sensors.. anything where a variable voltage range is read from an analog pin on the microcontroller 168 | class ContinuousElement : public ControlElement { 169 | public: 170 | 171 | int _previousRead; //used to keep track of readings in order to average / minimize noise on the analog readings 172 | 173 | int updateState() { 174 | 175 | int reading = analogRead(_pinNumber); 176 | 177 | //factor out noise 178 | int difference = _previousRead - reading; 179 | 180 | if (abs(difference) > ANALOG_CHANGE_THRESHOLD) { //simple software way of factoring out fluctations in reading due to noise/power 181 | 182 | //check for edge cases, so pot doesn't miss full CW or CCW positions given software filtering 183 | if (reading <= ANALOG_CHANGE_THRESHOLD) { 184 | reading = 0; 185 | } else if (reading >= 1023 - ANALOG_CHANGE_THRESHOLD) { 186 | reading = 1023; 187 | } 188 | 189 | 190 | //send update! 191 | byte bytesToSend[MESSAGE_SIZE] = { 192 | CONTINUOUS_TYPE, _id, highByte(reading), lowByte(reading) 193 | }; 194 | Serial.write(bytesToSend, MESSAGE_SIZE); 195 | 196 | //update internal state 197 | _previousRead = reading; 198 | } 199 | } 200 | }; 201 | 202 | 203 | //Used to keep state of the patchbay's jacks. Wrapper around a digital element array 204 | class Jack : public ControlElement { 205 | public: 206 | 207 | //Each jack keeps track of which other jacks it is connected to. 208 | //uses "DigitalElements" because a jack connection behaves like a switch 209 | DigitalElement _connectionState[NUMBER_OF_JACKS]; //could be NUMBER_OF_JACKS-1 but might complicate index versus jack#.. so will leave it for now.. 210 | 211 | Jack() { 212 | //When this jack is created, setup all of its possible connections 213 | for (int i = 0; i < NUMBER_OF_JACKS; i++) { 214 | 215 | _connectionState[i].setPinNumber(jackPins[i]); 216 | _connectionState[i].setId(i); 217 | // _connectionState[i].setValue(HIGH); //initialize to HIGH (aka no connection, given pull up resistors) 218 | } 219 | } 220 | 221 | void updateState() { 222 | //turn this jack low, then check all the others to see what has changed. 223 | 224 | //flip the jack you're checking to an output 225 | pinMode(_pinNumber, OUTPUT); 226 | digitalWrite(_pinNumber, LOW); // should bring all the other pins that it is connected to (inputs with pullups on) to LOW/Ground 227 | 228 | for (int i = 0; i < NUMBER_OF_JACKS; i++) { //look for changes 229 | 230 | int currentReading = digitalRead(_connectionState[i]._pinNumber); //find out if there is a connection with this jack or not. 231 | 232 | if (i != _id) { //this just means "don't check this pin for connections with itself" 233 | 234 | if (_connectionState[i].getValue() != currentReading) { //"is this reading different from what is already recorded as the state?" or, is it the first re 235 | 236 | if (_connectionState[i].isDebouncing()) {//"and did we already record that this state change occured, but we're still debouncing?" 237 | 238 | if (_connectionState[i].getTimeDebounceStarted() + DEBOUNCE_DELAY <= millis()) { //"and if so, has the debounce delay passed such that we can now send the update?" 239 | 240 | _connectionState[i].setDebouncing(false); //done debouncing, so reset the flag 241 | _connectionState[i].setValue(currentReading); //set the current value 242 | 243 | byte value; //send opposite of the read, given pull up resisitors 244 | if (_connectionState[i].getValue() == HIGH) { 245 | value = 0; 246 | } 247 | else { 248 | value = 1; 249 | } 250 | 251 | byte dataToSend[MESSAGE_SIZE] = { 252 | JACK_TYPE, lowByte(_id), lowByte(i), value 253 | }; //make a byte array to send over serial. indicate the type of message, the two jacks, and their connection status 254 | Serial.write(dataToSend, MESSAGE_SIZE); //send it over serial. 255 | } 256 | } 257 | else { //this is the first time we've read a state change, and thus should prepare a debounce, re-read after a delay 258 | _connectionState[i].setDebouncing(true); 259 | _connectionState[i].setTimeDebounceStarted(millis()); 260 | } 261 | } 262 | } 263 | } 264 | 265 | pinMode(_pinNumber, INPUT); 266 | digitalWrite(_pinNumber, HIGH); // pull-up gets turned on again so that other jacks can check their connection to this one. 267 | } 268 | }; 269 | 270 | //Arrays of elements - state needs to be maintained so that the device can send updates only upon changes (also, state is needed for debouncing, and analog signal smoothing) 271 | DigitalElement digitalState[NUMBER_OF_DIGITAL_ELEMENTS]; 272 | ContinuousElement continuousState[NUMBER_OF_CONTINUOUS_ELEMENTS * 2]; //need 2 byts for every continous controller 273 | Jack jacks[NUMBER_OF_JACKS]; //contains every jack. every jack then knows what other jacks it is patched into 274 | 275 | void updateDigitalElements() { 276 | 277 | for (int i = 0; i < NUMBER_OF_DIGITAL_ELEMENTS; i++) { 278 | digitalState[i].updateState(); 279 | } 280 | } 281 | 282 | void updateContinuousElements() { 283 | for (int i = 0; i < NUMBER_OF_CONTINUOUS_ELEMENTS; i++) { 284 | continuousState[i].updateState(); 285 | } 286 | } 287 | 288 | 289 | void updateJacks() { 290 | for (int i = 0; i < NUMBER_OF_JACKS; i++) { 291 | jacks[i].updateState(); 292 | } 293 | } 294 | 295 | void setup() { 296 | 297 | Serial.begin(9600); 298 | 299 | //setup pins, engage pull ups 300 | for (int i = 0; i < NUMBER_OF_DIGITAL_ELEMENTS; i++) { 301 | 302 | pinMode(digitalElementPins[i], INPUT); 303 | digitalWrite(digitalElementPins[i], HIGH); 304 | 305 | digitalState[i].setId(i); //keep track of the element number 306 | digitalState[i].setPinNumber(digitalElementPins[i]); 307 | } 308 | 309 | for (int i = 0; i < NUMBER_OF_CONTINUOUS_ELEMENTS; i++) { 310 | continuousState[i].setPinNumber(continuousElementPins[i]); 311 | continuousState[i].setId(i); 312 | } 313 | 314 | for (int i = 0; i < NUMBER_OF_JACKS; i++) { 315 | pinMode(jackPins[i], INPUT); 316 | digitalWrite(jackPins[i], HIGH); 317 | 318 | jacks[i].setId(i); 319 | jacks[i].setPinNumber(jackPins[i]); 320 | } 321 | 322 | for (int i = 0; i < NUMBER_OF_LEDS; i++) { 323 | pinMode(ledPins[i], OUTPUT); 324 | } 325 | 326 | for (int j = 0; j < 2; j++) { 327 | for (int i = 0; i < NUMBER_OF_LEDS; i++) { 328 | analogWrite(ledPins[i], random(20)); 329 | delay(45); //init sequence 330 | analogWrite(ledPins[i], 0); 331 | } 332 | 333 | for (int i = NUMBER_OF_LEDS - 1; i >= 0; i--) { 334 | analogWrite(ledPins[i], random(255)); 335 | delay(90); //init sequence 336 | analogWrite(ledPins[i], 0); 337 | } 338 | } 339 | 340 | } 341 | 342 | 343 | void loop() { 344 | 345 | digitalWrite(6, HIGH); 346 | if (needsHandshake) { 347 | 348 | //do serial handshake. 349 | byte initMessage[MESSAGE_SIZE] = { 350 | 'd', 'e', 't', 'r' 351 | }; 352 | while (Serial.available () <= 0) { 353 | Serial.write(initMessage, MESSAGE_SIZE); 354 | delay(1000); 355 | } 356 | Serial.flush(); 357 | 358 | needsHandshake = false; 359 | 360 | for (int j = 0; j < 2; j++) { 361 | for (int i = 0; i < NUMBER_OF_LEDS; i++) { 362 | analogWrite(ledPins[i], 255); 363 | delay(45); //init sequence 364 | analogWrite(ledPins[i], 0); 365 | } 366 | } 367 | 368 | } else { 369 | 370 | //update elements 371 | updateDigitalElements(); 372 | updateContinuousElements(); 373 | updateJacks(); 374 | 375 | 376 | delay(1); 377 | // 378 | while (Serial.available () > 0) { 379 | 380 | //illucia also recieves serial messages 381 | 382 | // if (Serial.available() % MESSAGE_SIZE == 0) { 383 | if (Serial.available() > 0) { 384 | 385 | byte type = Serial.read(); 386 | 387 | if (type == LED_TYPE) { 388 | 389 | while(Serial.available() < 2) { 390 | //make sure you have received the two bytes specifying the LED value 391 | } 392 | 393 | byte id = Serial.read(); 394 | byte value = Serial.read(); 395 | 396 | analogWrite(ledPins[id], value); 397 | 398 | } 399 | else if (type == RESET_TYPE) { 400 | needsHandshake = true; 401 | } 402 | } 403 | else { 404 | Serial.flush(); 405 | } 406 | } 407 | 408 | } 409 | } 410 | 411 | 412 | 413 | //Note to self: 1st prototype had this pinout: 414 | 415 | /* 416 | int digitalElementPins[] = { 417 | 18, 19, 20, 21, 28, 29, 30, 31 418 | }; //pins hooked up to "digital" elements like buttons / switches. 419 | int continuousElementPins[] = { 420 | 45, 44, 43, 42, 40, 39 421 | }; 422 | int jackPins[] = { 423 | 17, 16, 15, 13, 12, 11, 10, 9, 32, 33, 34, 35, 8, 7, 5, 4 424 | }; 425 | int ledPins[] = { 426 | 24, 25, 26, 27 427 | }; 428 | */ 429 | -------------------------------------------------------------------------------- /misc&utilities/illucia_dtr_max_objects/dtrToOutputJacks.maxpat: -------------------------------------------------------------------------------- 1 | { 2 | "patcher" : { 3 | "fileversion" : 1, 4 | "rect" : [ 79.0, 187.0, 1168.0, 607.0 ], 5 | "bglocked" : 0, 6 | "defrect" : [ 79.0, 187.0, 1168.0, 607.0 ], 7 | "openrect" : [ 0.0, 0.0, 0.0, 0.0 ], 8 | "openinpresentation" : 0, 9 | "default_fontsize" : 12.0, 10 | "default_fontface" : 0, 11 | "default_fontname" : "Arial", 12 | "gridonopen" : 0, 13 | "gridsize" : [ 15.0, 15.0 ], 14 | "gridsnaponopen" : 0, 15 | "toolbarvisible" : 1, 16 | "boxanimatetime" : 200, 17 | "imprint" : 0, 18 | "enablehscroll" : 1, 19 | "enablevscroll" : 1, 20 | "devicewidth" : 0.0, 21 | "boxes" : [ { 22 | "box" : { 23 | "maxclass" : "comment", 24 | "text" : "Port Defaults to 12000\nOptional argument can change that", 25 | "linecount" : 3, 26 | "fontname" : "Arial", 27 | "patching_rect" : [ 990.0, 490.0, 154.0, 48.0 ], 28 | "numinlets" : 1, 29 | "id" : "obj-28", 30 | "numoutlets" : 0, 31 | "fontsize" : 12.0 32 | } 33 | 34 | } 35 | , { 36 | "box" : { 37 | "maxclass" : "newobj", 38 | "text" : "unpack 1", 39 | "fontname" : "Arial", 40 | "patching_rect" : [ 928.0, 489.0, 59.0, 20.0 ], 41 | "numinlets" : 1, 42 | "id" : "obj-50", 43 | "numoutlets" : 1, 44 | "fontsize" : 12.0, 45 | "outlettype" : [ "int" ] 46 | } 47 | 48 | } 49 | , { 50 | "box" : { 51 | "maxclass" : "newobj", 52 | "text" : "patcherargs 12000", 53 | "fontname" : "Arial", 54 | "patching_rect" : [ 928.0, 466.0, 111.0, 20.0 ], 55 | "numinlets" : 1, 56 | "id" : "obj-49", 57 | "numoutlets" : 2, 58 | "fontsize" : 12.0, 59 | "outlettype" : [ "", "" ] 60 | } 61 | 62 | } 63 | , { 64 | "box" : { 65 | "maxclass" : "message", 66 | "text" : "port $1", 67 | "fontname" : "Arial", 68 | "patching_rect" : [ 928.0, 512.0, 48.0, 18.0 ], 69 | "numinlets" : 2, 70 | "id" : "obj-48", 71 | "numoutlets" : 1, 72 | "fontsize" : 12.0, 73 | "outlettype" : [ "" ] 74 | } 75 | 76 | } 77 | , { 78 | "box" : { 79 | "maxclass" : "inlet", 80 | "patching_rect" : [ 759.0, 404.0, 25.0, 25.0 ], 81 | "numinlets" : 0, 82 | "id" : "obj-11", 83 | "numoutlets" : 1, 84 | "outlettype" : [ "" ], 85 | "comment" : "data sent here is sent out of Output Jack 16" 86 | } 87 | 88 | } 89 | , { 90 | "box" : { 91 | "maxclass" : "inlet", 92 | "patching_rect" : [ 726.0, 349.0, 25.0, 25.0 ], 93 | "numinlets" : 0, 94 | "id" : "obj-12", 95 | "numoutlets" : 1, 96 | "outlettype" : [ "" ], 97 | "comment" : "data sent here is sent out of Output Jack 15" 98 | } 99 | 100 | } 101 | , { 102 | "box" : { 103 | "maxclass" : "inlet", 104 | "patching_rect" : [ 692.0, 294.0, 25.0, 25.0 ], 105 | "numinlets" : 0, 106 | "id" : "obj-13", 107 | "numoutlets" : 1, 108 | "outlettype" : [ "" ], 109 | "comment" : "data sent here is sent out of Output Jack 14" 110 | } 111 | 112 | } 113 | , { 114 | "box" : { 115 | "maxclass" : "inlet", 116 | "patching_rect" : [ 654.0, 235.0, 25.0, 25.0 ], 117 | "numinlets" : 0, 118 | "id" : "obj-14", 119 | "numoutlets" : 1, 120 | "outlettype" : [ "" ], 121 | "comment" : "data sent here is sent out of Output Jack 13" 122 | } 123 | 124 | } 125 | , { 126 | "box" : { 127 | "maxclass" : "newobj", 128 | "text" : "prepend /dtr/OutputJack/16", 129 | "fontname" : "Arial", 130 | "patching_rect" : [ 759.0, 433.0, 156.0, 20.0 ], 131 | "numinlets" : 1, 132 | "id" : "obj-15", 133 | "numoutlets" : 1, 134 | "fontsize" : 12.0, 135 | "outlettype" : [ "" ] 136 | } 137 | 138 | } 139 | , { 140 | "box" : { 141 | "maxclass" : "newobj", 142 | "text" : "prepend /dtr/OutputJack/15", 143 | "fontname" : "Arial", 144 | "patching_rect" : [ 726.0, 379.0, 156.0, 20.0 ], 145 | "numinlets" : 1, 146 | "id" : "obj-16", 147 | "numoutlets" : 1, 148 | "fontsize" : 12.0, 149 | "outlettype" : [ "" ] 150 | } 151 | 152 | } 153 | , { 154 | "box" : { 155 | "maxclass" : "newobj", 156 | "text" : "prepend /dtr/OutputJack/14", 157 | "fontname" : "Arial", 158 | "patching_rect" : [ 692.0, 323.0, 156.0, 20.0 ], 159 | "numinlets" : 1, 160 | "id" : "obj-17", 161 | "numoutlets" : 1, 162 | "fontsize" : 12.0, 163 | "outlettype" : [ "" ] 164 | } 165 | 166 | } 167 | , { 168 | "box" : { 169 | "maxclass" : "newobj", 170 | "text" : "prepend /dtr/OutputJack/13", 171 | "fontname" : "Arial", 172 | "patching_rect" : [ 654.0, 270.0, 156.0, 20.0 ], 173 | "numinlets" : 1, 174 | "id" : "obj-18", 175 | "numoutlets" : 1, 176 | "fontsize" : 12.0, 177 | "outlettype" : [ "" ] 178 | } 179 | 180 | } 181 | , { 182 | "box" : { 183 | "maxclass" : "inlet", 184 | "patching_rect" : [ 624.0, 183.0, 25.0, 25.0 ], 185 | "numinlets" : 0, 186 | "id" : "obj-19", 187 | "numoutlets" : 1, 188 | "outlettype" : [ "" ], 189 | "comment" : "data sent here is sent out of Output Jack 12" 190 | } 191 | 192 | } 193 | , { 194 | "box" : { 195 | "maxclass" : "inlet", 196 | "patching_rect" : [ 591.0, 128.0, 25.0, 25.0 ], 197 | "numinlets" : 0, 198 | "id" : "obj-20", 199 | "numoutlets" : 1, 200 | "outlettype" : [ "" ], 201 | "comment" : "data sent here is sent out of Output Jack 11" 202 | } 203 | 204 | } 205 | , { 206 | "box" : { 207 | "maxclass" : "inlet", 208 | "patching_rect" : [ 557.0, 73.0, 25.0, 25.0 ], 209 | "numinlets" : 0, 210 | "id" : "obj-21", 211 | "numoutlets" : 1, 212 | "outlettype" : [ "" ], 213 | "comment" : "data sent here is sent out of Output Jack 10" 214 | } 215 | 216 | } 217 | , { 218 | "box" : { 219 | "maxclass" : "newobj", 220 | "text" : "udpsend localhost 12000", 221 | "fontname" : "Arial", 222 | "patching_rect" : [ 528.0, 546.0, 144.0, 20.0 ], 223 | "numinlets" : 1, 224 | "id" : "obj-22", 225 | "numoutlets" : 0, 226 | "fontsize" : 12.0 227 | } 228 | 229 | } 230 | , { 231 | "box" : { 232 | "maxclass" : "inlet", 233 | "patching_rect" : [ 519.0, 14.0, 25.0, 25.0 ], 234 | "numinlets" : 0, 235 | "id" : "obj-23", 236 | "numoutlets" : 1, 237 | "outlettype" : [ "" ], 238 | "comment" : "data sent here is sent out of Output Jack 9" 239 | } 240 | 241 | } 242 | , { 243 | "box" : { 244 | "maxclass" : "newobj", 245 | "text" : "prepend /dtr/OutputJack/12", 246 | "fontname" : "Arial", 247 | "patching_rect" : [ 624.0, 212.0, 156.0, 20.0 ], 248 | "numinlets" : 1, 249 | "id" : "obj-24", 250 | "numoutlets" : 1, 251 | "fontsize" : 12.0, 252 | "outlettype" : [ "" ] 253 | } 254 | 255 | } 256 | , { 257 | "box" : { 258 | "maxclass" : "newobj", 259 | "text" : "prepend /dtr/OutputJack/11", 260 | "fontname" : "Arial", 261 | "patching_rect" : [ 591.0, 158.0, 155.0, 20.0 ], 262 | "numinlets" : 1, 263 | "id" : "obj-25", 264 | "numoutlets" : 1, 265 | "fontsize" : 12.0, 266 | "outlettype" : [ "" ] 267 | } 268 | 269 | } 270 | , { 271 | "box" : { 272 | "maxclass" : "newobj", 273 | "text" : "prepend /dtr/OutputJack/10", 274 | "fontname" : "Arial", 275 | "patching_rect" : [ 557.0, 102.0, 156.0, 20.0 ], 276 | "numinlets" : 1, 277 | "id" : "obj-26", 278 | "numoutlets" : 1, 279 | "fontsize" : 12.0, 280 | "outlettype" : [ "" ] 281 | } 282 | 283 | } 284 | , { 285 | "box" : { 286 | "maxclass" : "newobj", 287 | "text" : "prepend /dtr/OutputJack/9", 288 | "fontname" : "Arial", 289 | "patching_rect" : [ 519.0, 49.0, 149.0, 20.0 ], 290 | "numinlets" : 1, 291 | "id" : "obj-27", 292 | "numoutlets" : 1, 293 | "fontsize" : 12.0, 294 | "outlettype" : [ "" ] 295 | } 296 | 297 | } 298 | , { 299 | "box" : { 300 | "maxclass" : "inlet", 301 | "patching_rect" : [ 255.0, 405.0, 25.0, 25.0 ], 302 | "numinlets" : 0, 303 | "id" : "obj-1", 304 | "numoutlets" : 1, 305 | "outlettype" : [ "" ], 306 | "comment" : "data sent here is sent out of Output Jack 8" 307 | } 308 | 309 | } 310 | , { 311 | "box" : { 312 | "maxclass" : "inlet", 313 | "patching_rect" : [ 222.0, 350.0, 25.0, 25.0 ], 314 | "numinlets" : 0, 315 | "id" : "obj-2", 316 | "numoutlets" : 1, 317 | "outlettype" : [ "" ], 318 | "comment" : "data sent here is sent out of Output Jack 7" 319 | } 320 | 321 | } 322 | , { 323 | "box" : { 324 | "maxclass" : "inlet", 325 | "patching_rect" : [ 188.0, 295.0, 25.0, 25.0 ], 326 | "numinlets" : 0, 327 | "id" : "obj-3", 328 | "numoutlets" : 1, 329 | "outlettype" : [ "" ], 330 | "comment" : "data sent here is sent out of Output Jack 6" 331 | } 332 | 333 | } 334 | , { 335 | "box" : { 336 | "maxclass" : "inlet", 337 | "patching_rect" : [ 150.0, 236.0, 25.0, 25.0 ], 338 | "numinlets" : 0, 339 | "id" : "obj-5", 340 | "numoutlets" : 1, 341 | "outlettype" : [ "" ], 342 | "comment" : "data sent here is sent out of Output Jack 5" 343 | } 344 | 345 | } 346 | , { 347 | "box" : { 348 | "maxclass" : "newobj", 349 | "text" : "prepend /dtr/OutputJack/8", 350 | "fontname" : "Arial", 351 | "patching_rect" : [ 255.0, 434.0, 149.0, 20.0 ], 352 | "numinlets" : 1, 353 | "id" : "obj-6", 354 | "numoutlets" : 1, 355 | "fontsize" : 12.0, 356 | "outlettype" : [ "" ] 357 | } 358 | 359 | } 360 | , { 361 | "box" : { 362 | "maxclass" : "newobj", 363 | "text" : "prepend /dtr/OutputJack/7", 364 | "fontname" : "Arial", 365 | "patching_rect" : [ 222.0, 380.0, 149.0, 20.0 ], 366 | "numinlets" : 1, 367 | "id" : "obj-7", 368 | "numoutlets" : 1, 369 | "fontsize" : 12.0, 370 | "outlettype" : [ "" ] 371 | } 372 | 373 | } 374 | , { 375 | "box" : { 376 | "maxclass" : "newobj", 377 | "text" : "prepend /dtr/OutputJack/6", 378 | "fontname" : "Arial", 379 | "patching_rect" : [ 188.0, 324.0, 149.0, 20.0 ], 380 | "numinlets" : 1, 381 | "id" : "obj-8", 382 | "numoutlets" : 1, 383 | "fontsize" : 12.0, 384 | "outlettype" : [ "" ] 385 | } 386 | 387 | } 388 | , { 389 | "box" : { 390 | "maxclass" : "newobj", 391 | "text" : "prepend /dtr/OutputJack/5", 392 | "fontname" : "Arial", 393 | "patching_rect" : [ 150.0, 271.0, 149.0, 20.0 ], 394 | "numinlets" : 1, 395 | "id" : "obj-10", 396 | "numoutlets" : 1, 397 | "fontsize" : 12.0, 398 | "outlettype" : [ "" ] 399 | } 400 | 401 | } 402 | , { 403 | "box" : { 404 | "maxclass" : "inlet", 405 | "patching_rect" : [ 120.0, 184.0, 25.0, 25.0 ], 406 | "numinlets" : 0, 407 | "id" : "obj-84", 408 | "numoutlets" : 1, 409 | "outlettype" : [ "" ], 410 | "comment" : "data sent here is sent out of Output Jack 4" 411 | } 412 | 413 | } 414 | , { 415 | "box" : { 416 | "maxclass" : "inlet", 417 | "patching_rect" : [ 87.0, 129.0, 25.0, 25.0 ], 418 | "numinlets" : 0, 419 | "id" : "obj-83", 420 | "numoutlets" : 1, 421 | "outlettype" : [ "float" ], 422 | "ignoreclick" : 1, 423 | "comment" : "data sent here is sent out of Output Jack 3" 424 | } 425 | 426 | } 427 | , { 428 | "box" : { 429 | "maxclass" : "inlet", 430 | "patching_rect" : [ 53.0, 74.0, 25.0, 25.0 ], 431 | "numinlets" : 0, 432 | "id" : "obj-82", 433 | "numoutlets" : 1, 434 | "outlettype" : [ "" ], 435 | "comment" : "data sent here is sent out of Output Jack 2" 436 | } 437 | 438 | } 439 | , { 440 | "box" : { 441 | "maxclass" : "newobj", 442 | "text" : "udpsend localhost 12000", 443 | "fontname" : "Arial", 444 | "patching_rect" : [ 19.0, 550.0, 144.0, 20.0 ], 445 | "numinlets" : 1, 446 | "id" : "obj-81", 447 | "numoutlets" : 0, 448 | "fontsize" : 12.0 449 | } 450 | 451 | } 452 | , { 453 | "box" : { 454 | "maxclass" : "inlet", 455 | "patching_rect" : [ 15.0, 15.0, 25.0, 25.0 ], 456 | "numinlets" : 0, 457 | "id" : "obj-80", 458 | "numoutlets" : 1, 459 | "outlettype" : [ "float" ], 460 | "comment" : "data sent here is sent out of Output Jack 1" 461 | } 462 | 463 | } 464 | , { 465 | "box" : { 466 | "maxclass" : "newobj", 467 | "text" : "prepend /dtr/OutputJack/4", 468 | "fontname" : "Arial", 469 | "patching_rect" : [ 120.0, 213.0, 149.0, 20.0 ], 470 | "numinlets" : 1, 471 | "id" : "obj-78", 472 | "numoutlets" : 1, 473 | "fontsize" : 12.0, 474 | "outlettype" : [ "" ] 475 | } 476 | 477 | } 478 | , { 479 | "box" : { 480 | "maxclass" : "newobj", 481 | "text" : "prepend /dtr/OutputJack/3", 482 | "fontname" : "Arial", 483 | "patching_rect" : [ 87.0, 159.0, 149.0, 20.0 ], 484 | "numinlets" : 1, 485 | "id" : "obj-9", 486 | "numoutlets" : 1, 487 | "fontsize" : 12.0, 488 | "outlettype" : [ "" ] 489 | } 490 | 491 | } 492 | , { 493 | "box" : { 494 | "maxclass" : "newobj", 495 | "text" : "prepend /dtr/OutputJack/2", 496 | "fontname" : "Arial", 497 | "patching_rect" : [ 53.0, 102.0, 149.0, 20.0 ], 498 | "numinlets" : 1, 499 | "id" : "obj-79", 500 | "numoutlets" : 1, 501 | "fontsize" : 12.0, 502 | "outlettype" : [ "" ] 503 | } 504 | 505 | } 506 | , { 507 | "box" : { 508 | "maxclass" : "newobj", 509 | "text" : "prepend /dtr/OutputJack/1", 510 | "fontname" : "Arial", 511 | "patching_rect" : [ 15.0, 50.0, 149.0, 20.0 ], 512 | "numinlets" : 1, 513 | "id" : "obj-4", 514 | "numoutlets" : 1, 515 | "fontsize" : 12.0, 516 | "outlettype" : [ "" ] 517 | } 518 | 519 | } 520 | ], 521 | "lines" : [ { 522 | "patchline" : { 523 | "source" : [ "obj-48", 0 ], 524 | "destination" : [ "obj-81", 0 ], 525 | "hidden" : 0, 526 | "midpoints" : [ ] 527 | } 528 | 529 | } 530 | , { 531 | "patchline" : { 532 | "source" : [ "obj-48", 0 ], 533 | "destination" : [ "obj-22", 0 ], 534 | "hidden" : 0, 535 | "midpoints" : [ ] 536 | } 537 | 538 | } 539 | , { 540 | "patchline" : { 541 | "source" : [ "obj-49", 0 ], 542 | "destination" : [ "obj-50", 0 ], 543 | "hidden" : 0, 544 | "midpoints" : [ ] 545 | } 546 | 547 | } 548 | , { 549 | "patchline" : { 550 | "source" : [ "obj-50", 0 ], 551 | "destination" : [ "obj-48", 0 ], 552 | "hidden" : 0, 553 | "midpoints" : [ ] 554 | } 555 | 556 | } 557 | , { 558 | "patchline" : { 559 | "source" : [ "obj-11", 0 ], 560 | "destination" : [ "obj-15", 0 ], 561 | "hidden" : 0, 562 | "midpoints" : [ ] 563 | } 564 | 565 | } 566 | , { 567 | "patchline" : { 568 | "source" : [ "obj-15", 0 ], 569 | "destination" : [ "obj-22", 0 ], 570 | "hidden" : 0, 571 | "midpoints" : [ ] 572 | } 573 | 574 | } 575 | , { 576 | "patchline" : { 577 | "source" : [ "obj-12", 0 ], 578 | "destination" : [ "obj-16", 0 ], 579 | "hidden" : 0, 580 | "midpoints" : [ ] 581 | } 582 | 583 | } 584 | , { 585 | "patchline" : { 586 | "source" : [ "obj-16", 0 ], 587 | "destination" : [ "obj-22", 0 ], 588 | "hidden" : 0, 589 | "midpoints" : [ ] 590 | } 591 | 592 | } 593 | , { 594 | "patchline" : { 595 | "source" : [ "obj-13", 0 ], 596 | "destination" : [ "obj-17", 0 ], 597 | "hidden" : 0, 598 | "midpoints" : [ ] 599 | } 600 | 601 | } 602 | , { 603 | "patchline" : { 604 | "source" : [ "obj-17", 0 ], 605 | "destination" : [ "obj-22", 0 ], 606 | "hidden" : 0, 607 | "midpoints" : [ ] 608 | } 609 | 610 | } 611 | , { 612 | "patchline" : { 613 | "source" : [ "obj-14", 0 ], 614 | "destination" : [ "obj-18", 0 ], 615 | "hidden" : 0, 616 | "midpoints" : [ ] 617 | } 618 | 619 | } 620 | , { 621 | "patchline" : { 622 | "source" : [ "obj-18", 0 ], 623 | "destination" : [ "obj-22", 0 ], 624 | "hidden" : 0, 625 | "midpoints" : [ ] 626 | } 627 | 628 | } 629 | , { 630 | "patchline" : { 631 | "source" : [ "obj-24", 0 ], 632 | "destination" : [ "obj-22", 0 ], 633 | "hidden" : 0, 634 | "midpoints" : [ ] 635 | } 636 | 637 | } 638 | , { 639 | "patchline" : { 640 | "source" : [ "obj-19", 0 ], 641 | "destination" : [ "obj-24", 0 ], 642 | "hidden" : 0, 643 | "midpoints" : [ ] 644 | } 645 | 646 | } 647 | , { 648 | "patchline" : { 649 | "source" : [ "obj-25", 0 ], 650 | "destination" : [ "obj-22", 0 ], 651 | "hidden" : 0, 652 | "midpoints" : [ ] 653 | } 654 | 655 | } 656 | , { 657 | "patchline" : { 658 | "source" : [ "obj-20", 0 ], 659 | "destination" : [ "obj-25", 0 ], 660 | "hidden" : 0, 661 | "midpoints" : [ ] 662 | } 663 | 664 | } 665 | , { 666 | "patchline" : { 667 | "source" : [ "obj-26", 0 ], 668 | "destination" : [ "obj-22", 0 ], 669 | "hidden" : 0, 670 | "midpoints" : [ ] 671 | } 672 | 673 | } 674 | , { 675 | "patchline" : { 676 | "source" : [ "obj-21", 0 ], 677 | "destination" : [ "obj-26", 0 ], 678 | "hidden" : 0, 679 | "midpoints" : [ ] 680 | } 681 | 682 | } 683 | , { 684 | "patchline" : { 685 | "source" : [ "obj-23", 0 ], 686 | "destination" : [ "obj-27", 0 ], 687 | "hidden" : 0, 688 | "midpoints" : [ ] 689 | } 690 | 691 | } 692 | , { 693 | "patchline" : { 694 | "source" : [ "obj-27", 0 ], 695 | "destination" : [ "obj-22", 0 ], 696 | "hidden" : 0, 697 | "midpoints" : [ ] 698 | } 699 | 700 | } 701 | , { 702 | "patchline" : { 703 | "source" : [ "obj-1", 0 ], 704 | "destination" : [ "obj-6", 0 ], 705 | "hidden" : 0, 706 | "midpoints" : [ ] 707 | } 708 | 709 | } 710 | , { 711 | "patchline" : { 712 | "source" : [ "obj-6", 0 ], 713 | "destination" : [ "obj-81", 0 ], 714 | "hidden" : 0, 715 | "midpoints" : [ ] 716 | } 717 | 718 | } 719 | , { 720 | "patchline" : { 721 | "source" : [ "obj-2", 0 ], 722 | "destination" : [ "obj-7", 0 ], 723 | "hidden" : 0, 724 | "midpoints" : [ ] 725 | } 726 | 727 | } 728 | , { 729 | "patchline" : { 730 | "source" : [ "obj-7", 0 ], 731 | "destination" : [ "obj-81", 0 ], 732 | "hidden" : 0, 733 | "midpoints" : [ ] 734 | } 735 | 736 | } 737 | , { 738 | "patchline" : { 739 | "source" : [ "obj-3", 0 ], 740 | "destination" : [ "obj-8", 0 ], 741 | "hidden" : 0, 742 | "midpoints" : [ ] 743 | } 744 | 745 | } 746 | , { 747 | "patchline" : { 748 | "source" : [ "obj-8", 0 ], 749 | "destination" : [ "obj-81", 0 ], 750 | "hidden" : 0, 751 | "midpoints" : [ ] 752 | } 753 | 754 | } 755 | , { 756 | "patchline" : { 757 | "source" : [ "obj-5", 0 ], 758 | "destination" : [ "obj-10", 0 ], 759 | "hidden" : 0, 760 | "midpoints" : [ ] 761 | } 762 | 763 | } 764 | , { 765 | "patchline" : { 766 | "source" : [ "obj-10", 0 ], 767 | "destination" : [ "obj-81", 0 ], 768 | "hidden" : 0, 769 | "midpoints" : [ ] 770 | } 771 | 772 | } 773 | , { 774 | "patchline" : { 775 | "source" : [ "obj-78", 0 ], 776 | "destination" : [ "obj-81", 0 ], 777 | "hidden" : 0, 778 | "midpoints" : [ ] 779 | } 780 | 781 | } 782 | , { 783 | "patchline" : { 784 | "source" : [ "obj-84", 0 ], 785 | "destination" : [ "obj-78", 0 ], 786 | "hidden" : 0, 787 | "midpoints" : [ ] 788 | } 789 | 790 | } 791 | , { 792 | "patchline" : { 793 | "source" : [ "obj-9", 0 ], 794 | "destination" : [ "obj-81", 0 ], 795 | "hidden" : 0, 796 | "midpoints" : [ ] 797 | } 798 | 799 | } 800 | , { 801 | "patchline" : { 802 | "source" : [ "obj-83", 0 ], 803 | "destination" : [ "obj-9", 0 ], 804 | "hidden" : 0, 805 | "midpoints" : [ ] 806 | } 807 | 808 | } 809 | , { 810 | "patchline" : { 811 | "source" : [ "obj-79", 0 ], 812 | "destination" : [ "obj-81", 0 ], 813 | "hidden" : 0, 814 | "midpoints" : [ ] 815 | } 816 | 817 | } 818 | , { 819 | "patchline" : { 820 | "source" : [ "obj-82", 0 ], 821 | "destination" : [ "obj-79", 0 ], 822 | "hidden" : 0, 823 | "midpoints" : [ ] 824 | } 825 | 826 | } 827 | , { 828 | "patchline" : { 829 | "source" : [ "obj-80", 0 ], 830 | "destination" : [ "obj-4", 0 ], 831 | "hidden" : 0, 832 | "midpoints" : [ ] 833 | } 834 | 835 | } 836 | , { 837 | "patchline" : { 838 | "source" : [ "obj-4", 0 ], 839 | "destination" : [ "obj-81", 0 ], 840 | "hidden" : 0, 841 | "midpoints" : [ ] 842 | } 843 | 844 | } 845 | ] 846 | } 847 | 848 | } 849 | -------------------------------------------------------------------------------- /illucia_dtr_pcbs/usb_breakout_1.0-text.brd: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | Vcc 110 | D- 111 | D+ 112 | Gnd 113 | USBv1.0 114 | 115 | 116 | 117 | 118 | 119 | <b>Amphenol MUSB-B551-04</b><p> 120 | 121 | 122 | 123 | 124 | 125 | 126 | 127 | 128 | 129 | 130 | 131 | 132 | 133 | 134 | 135 | 136 | 137 | 138 | 139 | 140 | 141 | 142 | 143 | 144 | 145 | 146 | 147 | 148 | 149 | 150 | 151 | 152 | 153 | 154 | 155 | 156 | 157 | 158 | 159 | 160 | 161 | 162 | 163 | 164 | 165 | 166 | 167 | 168 | 169 | 170 | 171 | 172 | 173 | 174 | 175 | 176 | 177 | 178 | 179 | 180 | 181 | 182 | 183 | 184 | >NAME 185 | >VALUE 186 | 187 | 188 | <b>USB Series A Hole Mounted</b> 189 | 190 | 191 | 192 | 193 | 194 | 195 | >NAME 196 | 197 | 198 | 199 | 200 | 201 | 202 | 203 | 204 | 205 | 206 | 207 | 208 | 209 | <b>EAGLE Design Rules</b> 210 | <p> 211 | Die Standard-Design-Rules sind so gewählt, dass sie für 212 | die meisten Anwendungen passen. Sollte ihre Platine 213 | besondere Anforderungen haben, treffen Sie die erforderlichen 214 | Einstellungen hier und speichern die Design Rules unter 215 | einem neuen Namen ab. 216 | <b>EAGLE Design Rules</b> 217 | <p> 218 | The default Design Rules have been set to cover 219 | a wide range of applications. Your particular design 220 | may have different requirements, so please make the 221 | necessary adjustments and save your customized 222 | design rules under a new name. 223 | 224 | 225 | 226 | 227 | 228 | 229 | 230 | 231 | 232 | 233 | 234 | 235 | 236 | 237 | 238 | 239 | 240 | 241 | 242 | 243 | 244 | 245 | 246 | 247 | 248 | 249 | 250 | 251 | 252 | 253 | 254 | 255 | 256 | 257 | 258 | 259 | 260 | 261 | 262 | 263 | 264 | 265 | 266 | 267 | 268 | 269 | 270 | 271 | 272 | 273 | 274 | 275 | 276 | 277 | 278 | 279 | 280 | 281 | 282 | 283 | 284 | 285 | 286 | 287 | 288 | 289 | 290 | 291 | 292 | 293 | 294 | 295 | 296 | 297 | 298 | 299 | 300 | 301 | 302 | 303 | 304 | 305 | 306 | 307 | 308 | 309 | 310 | 311 | 312 | 313 | 314 | 315 | 316 | 317 | 318 | 319 | 320 | 321 | 322 | 323 | 324 | 325 | 326 | 327 | 328 | 329 | 330 | 331 | 332 | 333 | 334 | 335 | 336 | 337 | 338 | 339 | 340 | 341 | 342 | 343 | 344 | 345 | 346 | 347 | 348 | 349 | 350 | 351 | 352 | 353 | 354 | 355 | 356 | 357 | 358 | 359 | 360 | 361 | 362 | 363 | 364 | 365 | 366 | 367 | 368 | 369 | 370 | 371 | 372 | 373 | 374 | 375 | 376 | 377 | 378 | 379 | 380 | 381 | 382 | 383 | 384 | 385 | 386 | 387 | 388 | 389 | 390 | 391 | 392 | 393 | 394 | 395 | 396 | 397 | 398 | 399 | 400 | 401 | 402 | 403 | 404 | 405 | 406 | 407 | 408 | 409 | 410 | 411 | 412 | 413 | 414 | 415 | 416 | 417 | 418 | 419 | 420 | 421 | 422 | 423 | 424 | 425 | 426 | 427 | 428 | 429 | 430 | 431 | 432 | 433 | 434 | 435 | 436 | 437 | 438 | 439 | 440 | 441 | 442 | 443 | 444 | 445 | 446 | 447 | 448 | 449 | 450 | 451 | 452 | 453 | 454 | 455 | 456 | 457 | 458 | 459 | -------------------------------------------------------------------------------- /misc&utilities/illucia_dtr_max_objects/dtrFromInputJacks.maxpat: -------------------------------------------------------------------------------- 1 | { 2 | "patcher" : { 3 | "fileversion" : 1, 4 | "rect" : [ -94.0, -752.0, 1455.0, 536.0 ], 5 | "bglocked" : 0, 6 | "defrect" : [ -94.0, -752.0, 1455.0, 536.0 ], 7 | "openrect" : [ 0.0, 0.0, 0.0, 0.0 ], 8 | "openinpresentation" : 0, 9 | "default_fontsize" : 12.0, 10 | "default_fontface" : 0, 11 | "default_fontname" : "Arial", 12 | "gridonopen" : 0, 13 | "gridsize" : [ 15.0, 15.0 ], 14 | "gridsnaponopen" : 0, 15 | "toolbarvisible" : 1, 16 | "boxanimatetime" : 200, 17 | "imprint" : 0, 18 | "enablehscroll" : 1, 19 | "enablevscroll" : 1, 20 | "devicewidth" : 0.0, 21 | "boxes" : [ { 22 | "box" : { 23 | "maxclass" : "comment", 24 | "text" : "Port Defaults to 12001\nOptional argument can change that", 25 | "linecount" : 3, 26 | "fontname" : "Arial", 27 | "patching_rect" : [ 1285.0, 145.0, 154.0, 48.0 ], 28 | "numinlets" : 1, 29 | "id" : "obj-2", 30 | "numoutlets" : 0, 31 | "fontsize" : 12.0 32 | } 33 | 34 | } 35 | , { 36 | "box" : { 37 | "maxclass" : "newobj", 38 | "text" : "unpack 1", 39 | "fontname" : "Arial", 40 | "patching_rect" : [ 1262.0, 59.0, 59.0, 20.0 ], 41 | "numinlets" : 1, 42 | "id" : "obj-1", 43 | "numoutlets" : 1, 44 | "fontsize" : 12.0, 45 | "outlettype" : [ "int" ] 46 | } 47 | 48 | } 49 | , { 50 | "box" : { 51 | "maxclass" : "newobj", 52 | "text" : "patcherargs 12001", 53 | "fontname" : "Arial", 54 | "patching_rect" : [ 1262.0, 28.0, 111.0, 20.0 ], 55 | "numinlets" : 1, 56 | "id" : "obj-3", 57 | "numoutlets" : 2, 58 | "fontsize" : 12.0, 59 | "outlettype" : [ "", "" ] 60 | } 61 | 62 | } 63 | , { 64 | "box" : { 65 | "maxclass" : "message", 66 | "text" : "port $1", 67 | "fontname" : "Arial", 68 | "patching_rect" : [ 1262.0, 82.0, 48.0, 18.0 ], 69 | "numinlets" : 2, 70 | "id" : "obj-4", 71 | "numoutlets" : 1, 72 | "fontsize" : 12.0, 73 | "outlettype" : [ "" ] 74 | } 75 | 76 | } 77 | , { 78 | "box" : { 79 | "maxclass" : "newobj", 80 | "text" : "udpreceive 12001", 81 | "fontname" : "Arial", 82 | "patching_rect" : [ 1262.0, 107.0, 106.0, 20.0 ], 83 | "numinlets" : 1, 84 | "id" : "obj-5", 85 | "numoutlets" : 1, 86 | "fontsize" : 12.0, 87 | "outlettype" : [ "" ] 88 | } 89 | 90 | } 91 | , { 92 | "box" : { 93 | "maxclass" : "outlet", 94 | "patching_rect" : [ 1095.0, 430.0, 25.0, 25.0 ], 95 | "numinlets" : 1, 96 | "id" : "obj-51", 97 | "numoutlets" : 0, 98 | "comment" : "Data from Input Jack 16" 99 | } 100 | 101 | } 102 | , { 103 | "box" : { 104 | "maxclass" : "flonum", 105 | "fontname" : "Arial", 106 | "patching_rect" : [ 1134.0, 430.0, 50.0, 20.0 ], 107 | "numinlets" : 1, 108 | "id" : "obj-52", 109 | "numoutlets" : 2, 110 | "fontsize" : 12.0, 111 | "outlettype" : [ "float", "bang" ] 112 | } 113 | 114 | } 115 | , { 116 | "box" : { 117 | "maxclass" : "newobj", 118 | "text" : "route /dtr/InputJack/16", 119 | "fontname" : "Arial", 120 | "patching_rect" : [ 1095.0, 404.0, 130.0, 20.0 ], 121 | "numinlets" : 1, 122 | "id" : "obj-53", 123 | "numoutlets" : 2, 124 | "fontsize" : 12.0, 125 | "outlettype" : [ "", "" ] 126 | } 127 | 128 | } 129 | , { 130 | "box" : { 131 | "maxclass" : "outlet", 132 | "patching_rect" : [ 1065.0, 357.0, 25.0, 25.0 ], 133 | "numinlets" : 1, 134 | "id" : "obj-54", 135 | "numoutlets" : 0, 136 | "comment" : "Data from Input Jack 15" 137 | } 138 | 139 | } 140 | , { 141 | "box" : { 142 | "maxclass" : "flonum", 143 | "fontname" : "Arial", 144 | "patching_rect" : [ 1104.0, 357.0, 50.0, 20.0 ], 145 | "numinlets" : 1, 146 | "id" : "obj-55", 147 | "numoutlets" : 2, 148 | "fontsize" : 12.0, 149 | "outlettype" : [ "float", "bang" ] 150 | } 151 | 152 | } 153 | , { 154 | "box" : { 155 | "maxclass" : "newobj", 156 | "text" : "route /dtr/InputJack/15", 157 | "fontname" : "Arial", 158 | "patching_rect" : [ 1065.0, 331.0, 130.0, 20.0 ], 159 | "numinlets" : 1, 160 | "id" : "obj-56", 161 | "numoutlets" : 2, 162 | "fontsize" : 12.0, 163 | "outlettype" : [ "", "" ] 164 | } 165 | 166 | } 167 | , { 168 | "box" : { 169 | "maxclass" : "outlet", 170 | "patching_rect" : [ 1034.0, 288.0, 25.0, 25.0 ], 171 | "numinlets" : 1, 172 | "id" : "obj-57", 173 | "numoutlets" : 0, 174 | "comment" : "Data from Input Jack 14" 175 | } 176 | 177 | } 178 | , { 179 | "box" : { 180 | "maxclass" : "flonum", 181 | "fontname" : "Arial", 182 | "patching_rect" : [ 1073.0, 288.0, 50.0, 20.0 ], 183 | "numinlets" : 1, 184 | "id" : "obj-58", 185 | "numoutlets" : 2, 186 | "fontsize" : 12.0, 187 | "outlettype" : [ "float", "bang" ] 188 | } 189 | 190 | } 191 | , { 192 | "box" : { 193 | "maxclass" : "newobj", 194 | "text" : "route /dtr/InputJack/14", 195 | "fontname" : "Arial", 196 | "patching_rect" : [ 1034.0, 262.0, 130.0, 20.0 ], 197 | "numinlets" : 1, 198 | "id" : "obj-59", 199 | "numoutlets" : 2, 200 | "fontsize" : 12.0, 201 | "outlettype" : [ "", "" ] 202 | } 203 | 204 | } 205 | , { 206 | "box" : { 207 | "maxclass" : "outlet", 208 | "patching_rect" : [ 1002.0, 216.0, 25.0, 25.0 ], 209 | "numinlets" : 1, 210 | "id" : "obj-60", 211 | "numoutlets" : 0, 212 | "comment" : "Data from Input Jack 13" 213 | } 214 | 215 | } 216 | , { 217 | "box" : { 218 | "maxclass" : "flonum", 219 | "fontname" : "Arial", 220 | "patching_rect" : [ 1041.0, 216.0, 50.0, 20.0 ], 221 | "numinlets" : 1, 222 | "id" : "obj-62", 223 | "numoutlets" : 2, 224 | "fontsize" : 12.0, 225 | "outlettype" : [ "float", "bang" ] 226 | } 227 | 228 | } 229 | , { 230 | "box" : { 231 | "maxclass" : "newobj", 232 | "text" : "route /dtr/InputJack/13", 233 | "fontname" : "Arial", 234 | "patching_rect" : [ 1002.0, 190.0, 130.0, 20.0 ], 235 | "numinlets" : 1, 236 | "id" : "obj-63", 237 | "numoutlets" : 2, 238 | "fontsize" : 12.0, 239 | "outlettype" : [ "", "" ] 240 | } 241 | 242 | } 243 | , { 244 | "box" : { 245 | "maxclass" : "outlet", 246 | "patching_rect" : [ 774.0, 425.0, 25.0, 25.0 ], 247 | "numinlets" : 1, 248 | "id" : "obj-38", 249 | "numoutlets" : 0, 250 | "comment" : "Data from Input Jack 12" 251 | } 252 | 253 | } 254 | , { 255 | "box" : { 256 | "maxclass" : "flonum", 257 | "fontname" : "Arial", 258 | "patching_rect" : [ 813.0, 425.0, 50.0, 20.0 ], 259 | "numinlets" : 1, 260 | "id" : "obj-39", 261 | "numoutlets" : 2, 262 | "fontsize" : 12.0, 263 | "outlettype" : [ "float", "bang" ] 264 | } 265 | 266 | } 267 | , { 268 | "box" : { 269 | "maxclass" : "newobj", 270 | "text" : "route /dtr/InputJack/12", 271 | "fontname" : "Arial", 272 | "patching_rect" : [ 774.0, 399.0, 130.0, 20.0 ], 273 | "numinlets" : 1, 274 | "id" : "obj-40", 275 | "numoutlets" : 2, 276 | "fontsize" : 12.0, 277 | "outlettype" : [ "", "" ] 278 | } 279 | 280 | } 281 | , { 282 | "box" : { 283 | "maxclass" : "outlet", 284 | "patching_rect" : [ 744.0, 352.0, 25.0, 25.0 ], 285 | "numinlets" : 1, 286 | "id" : "obj-41", 287 | "numoutlets" : 0, 288 | "comment" : "Data from Input Jack 11" 289 | } 290 | 291 | } 292 | , { 293 | "box" : { 294 | "maxclass" : "flonum", 295 | "fontname" : "Arial", 296 | "patching_rect" : [ 783.0, 352.0, 50.0, 20.0 ], 297 | "numinlets" : 1, 298 | "id" : "obj-42", 299 | "numoutlets" : 2, 300 | "fontsize" : 12.0, 301 | "outlettype" : [ "float", "bang" ] 302 | } 303 | 304 | } 305 | , { 306 | "box" : { 307 | "maxclass" : "newobj", 308 | "text" : "route /dtr/InputJack/11", 309 | "fontname" : "Arial", 310 | "patching_rect" : [ 744.0, 326.0, 129.0, 20.0 ], 311 | "numinlets" : 1, 312 | "id" : "obj-43", 313 | "numoutlets" : 2, 314 | "fontsize" : 12.0, 315 | "outlettype" : [ "", "" ] 316 | } 317 | 318 | } 319 | , { 320 | "box" : { 321 | "maxclass" : "outlet", 322 | "patching_rect" : [ 713.0, 283.0, 25.0, 25.0 ], 323 | "numinlets" : 1, 324 | "id" : "obj-44", 325 | "numoutlets" : 0, 326 | "comment" : "Data from Input Jack 10" 327 | } 328 | 329 | } 330 | , { 331 | "box" : { 332 | "maxclass" : "flonum", 333 | "fontname" : "Arial", 334 | "patching_rect" : [ 752.0, 283.0, 50.0, 20.0 ], 335 | "numinlets" : 1, 336 | "id" : "obj-45", 337 | "numoutlets" : 2, 338 | "fontsize" : 12.0, 339 | "outlettype" : [ "float", "bang" ] 340 | } 341 | 342 | } 343 | , { 344 | "box" : { 345 | "maxclass" : "newobj", 346 | "text" : "route /dtr/InputJack/10", 347 | "fontname" : "Arial", 348 | "patching_rect" : [ 713.0, 257.0, 130.0, 20.0 ], 349 | "numinlets" : 1, 350 | "id" : "obj-46", 351 | "numoutlets" : 2, 352 | "fontsize" : 12.0, 353 | "outlettype" : [ "", "" ] 354 | } 355 | 356 | } 357 | , { 358 | "box" : { 359 | "maxclass" : "outlet", 360 | "patching_rect" : [ 681.0, 211.0, 25.0, 25.0 ], 361 | "numinlets" : 1, 362 | "id" : "obj-47", 363 | "numoutlets" : 0, 364 | "comment" : "Data from Input Jack 9" 365 | } 366 | 367 | } 368 | , { 369 | "box" : { 370 | "maxclass" : "flonum", 371 | "fontname" : "Arial", 372 | "patching_rect" : [ 720.0, 211.0, 50.0, 20.0 ], 373 | "numinlets" : 1, 374 | "id" : "obj-49", 375 | "numoutlets" : 2, 376 | "fontsize" : 12.0, 377 | "outlettype" : [ "float", "bang" ] 378 | } 379 | 380 | } 381 | , { 382 | "box" : { 383 | "maxclass" : "newobj", 384 | "text" : "route /dtr/InputJack/9", 385 | "fontname" : "Arial", 386 | "patching_rect" : [ 681.0, 185.0, 123.0, 20.0 ], 387 | "numinlets" : 1, 388 | "id" : "obj-50", 389 | "numoutlets" : 2, 390 | "fontsize" : 12.0, 391 | "outlettype" : [ "", "" ] 392 | } 393 | 394 | } 395 | , { 396 | "box" : { 397 | "maxclass" : "outlet", 398 | "patching_rect" : [ 460.0, 424.0, 25.0, 25.0 ], 399 | "numinlets" : 1, 400 | "id" : "obj-25", 401 | "numoutlets" : 0, 402 | "comment" : "Data from Input Jack 8" 403 | } 404 | 405 | } 406 | , { 407 | "box" : { 408 | "maxclass" : "flonum", 409 | "fontname" : "Arial", 410 | "patching_rect" : [ 499.0, 424.0, 50.0, 20.0 ], 411 | "numinlets" : 1, 412 | "id" : "obj-26", 413 | "numoutlets" : 2, 414 | "fontsize" : 12.0, 415 | "outlettype" : [ "float", "bang" ] 416 | } 417 | 418 | } 419 | , { 420 | "box" : { 421 | "maxclass" : "newobj", 422 | "text" : "route /dtr/InputJack/8", 423 | "fontname" : "Arial", 424 | "patching_rect" : [ 460.0, 398.0, 123.0, 20.0 ], 425 | "numinlets" : 1, 426 | "id" : "obj-27", 427 | "numoutlets" : 2, 428 | "fontsize" : 12.0, 429 | "outlettype" : [ "", "" ] 430 | } 431 | 432 | } 433 | , { 434 | "box" : { 435 | "maxclass" : "outlet", 436 | "patching_rect" : [ 430.0, 351.0, 25.0, 25.0 ], 437 | "numinlets" : 1, 438 | "id" : "obj-28", 439 | "numoutlets" : 0, 440 | "comment" : "Data from Input Jack 7" 441 | } 442 | 443 | } 444 | , { 445 | "box" : { 446 | "maxclass" : "flonum", 447 | "fontname" : "Arial", 448 | "patching_rect" : [ 469.0, 351.0, 50.0, 20.0 ], 449 | "numinlets" : 1, 450 | "id" : "obj-29", 451 | "numoutlets" : 2, 452 | "fontsize" : 12.0, 453 | "outlettype" : [ "float", "bang" ] 454 | } 455 | 456 | } 457 | , { 458 | "box" : { 459 | "maxclass" : "newobj", 460 | "text" : "route /dtr/InputJack/7", 461 | "fontname" : "Arial", 462 | "patching_rect" : [ 430.0, 325.0, 123.0, 20.0 ], 463 | "numinlets" : 1, 464 | "id" : "obj-30", 465 | "numoutlets" : 2, 466 | "fontsize" : 12.0, 467 | "outlettype" : [ "", "" ] 468 | } 469 | 470 | } 471 | , { 472 | "box" : { 473 | "maxclass" : "outlet", 474 | "patching_rect" : [ 399.0, 282.0, 25.0, 25.0 ], 475 | "numinlets" : 1, 476 | "id" : "obj-31", 477 | "numoutlets" : 0, 478 | "comment" : "Data from Input Jack 6" 479 | } 480 | 481 | } 482 | , { 483 | "box" : { 484 | "maxclass" : "flonum", 485 | "fontname" : "Arial", 486 | "patching_rect" : [ 438.0, 282.0, 50.0, 20.0 ], 487 | "numinlets" : 1, 488 | "id" : "obj-32", 489 | "numoutlets" : 2, 490 | "fontsize" : 12.0, 491 | "outlettype" : [ "float", "bang" ] 492 | } 493 | 494 | } 495 | , { 496 | "box" : { 497 | "maxclass" : "newobj", 498 | "text" : "route /dtr/InputJack/6", 499 | "fontname" : "Arial", 500 | "patching_rect" : [ 399.0, 256.0, 123.0, 20.0 ], 501 | "numinlets" : 1, 502 | "id" : "obj-33", 503 | "numoutlets" : 2, 504 | "fontsize" : 12.0, 505 | "outlettype" : [ "", "" ] 506 | } 507 | 508 | } 509 | , { 510 | "box" : { 511 | "maxclass" : "outlet", 512 | "patching_rect" : [ 367.0, 220.0, 25.0, 25.0 ], 513 | "numinlets" : 1, 514 | "id" : "obj-34", 515 | "numoutlets" : 0, 516 | "comment" : "Data from Input Jack 5" 517 | } 518 | 519 | } 520 | , { 521 | "box" : { 522 | "maxclass" : "flonum", 523 | "fontname" : "Arial", 524 | "patching_rect" : [ 406.0, 220.0, 50.0, 20.0 ], 525 | "numinlets" : 1, 526 | "id" : "obj-36", 527 | "numoutlets" : 2, 528 | "fontsize" : 12.0, 529 | "outlettype" : [ "float", "bang" ] 530 | } 531 | 532 | } 533 | , { 534 | "box" : { 535 | "maxclass" : "newobj", 536 | "text" : "route /dtr/InputJack/5", 537 | "fontname" : "Arial", 538 | "patching_rect" : [ 367.0, 194.0, 123.0, 20.0 ], 539 | "numinlets" : 1, 540 | "id" : "obj-37", 541 | "numoutlets" : 2, 542 | "fontsize" : 12.0, 543 | "outlettype" : [ "", "" ] 544 | } 545 | 546 | } 547 | , { 548 | "box" : { 549 | "maxclass" : "outlet", 550 | "patching_rect" : [ 147.0, 420.0, 25.0, 25.0 ], 551 | "numinlets" : 1, 552 | "id" : "obj-65", 553 | "numoutlets" : 0, 554 | "comment" : "Data from Input Jack 4" 555 | } 556 | 557 | } 558 | , { 559 | "box" : { 560 | "maxclass" : "flonum", 561 | "fontname" : "Arial", 562 | "patching_rect" : [ 186.0, 420.0, 50.0, 20.0 ], 563 | "numinlets" : 1, 564 | "id" : "obj-66", 565 | "numoutlets" : 2, 566 | "fontsize" : 12.0, 567 | "outlettype" : [ "float", "bang" ] 568 | } 569 | 570 | } 571 | , { 572 | "box" : { 573 | "maxclass" : "newobj", 574 | "text" : "route /dtr/InputJack/4", 575 | "fontname" : "Arial", 576 | "patching_rect" : [ 147.0, 394.0, 123.0, 20.0 ], 577 | "numinlets" : 1, 578 | "id" : "obj-67", 579 | "numoutlets" : 2, 580 | "fontsize" : 12.0, 581 | "outlettype" : [ "", "" ] 582 | } 583 | 584 | } 585 | , { 586 | "box" : { 587 | "maxclass" : "outlet", 588 | "patching_rect" : [ 117.0, 347.0, 25.0, 25.0 ], 589 | "numinlets" : 1, 590 | "id" : "obj-68", 591 | "numoutlets" : 0, 592 | "comment" : "Data from Input Jack 3" 593 | } 594 | 595 | } 596 | , { 597 | "box" : { 598 | "maxclass" : "flonum", 599 | "fontname" : "Arial", 600 | "patching_rect" : [ 156.0, 347.0, 50.0, 20.0 ], 601 | "numinlets" : 1, 602 | "id" : "obj-69", 603 | "numoutlets" : 2, 604 | "fontsize" : 12.0, 605 | "outlettype" : [ "float", "bang" ] 606 | } 607 | 608 | } 609 | , { 610 | "box" : { 611 | "maxclass" : "newobj", 612 | "text" : "route /dtr/InputJack/3", 613 | "fontname" : "Arial", 614 | "patching_rect" : [ 117.0, 321.0, 123.0, 20.0 ], 615 | "numinlets" : 1, 616 | "id" : "obj-70", 617 | "numoutlets" : 2, 618 | "fontsize" : 12.0, 619 | "outlettype" : [ "", "" ] 620 | } 621 | 622 | } 623 | , { 624 | "box" : { 625 | "maxclass" : "outlet", 626 | "patching_rect" : [ 86.0, 278.0, 25.0, 25.0 ], 627 | "numinlets" : 1, 628 | "id" : "obj-71", 629 | "numoutlets" : 0, 630 | "comment" : "Data from Input Jack 2" 631 | } 632 | 633 | } 634 | , { 635 | "box" : { 636 | "maxclass" : "flonum", 637 | "fontname" : "Arial", 638 | "patching_rect" : [ 125.0, 278.0, 50.0, 20.0 ], 639 | "numinlets" : 1, 640 | "id" : "obj-72", 641 | "numoutlets" : 2, 642 | "fontsize" : 12.0, 643 | "outlettype" : [ "float", "bang" ] 644 | } 645 | 646 | } 647 | , { 648 | "box" : { 649 | "maxclass" : "newobj", 650 | "text" : "route /dtr/InputJack/2", 651 | "fontname" : "Arial", 652 | "patching_rect" : [ 86.0, 252.0, 123.0, 20.0 ], 653 | "numinlets" : 1, 654 | "id" : "obj-73", 655 | "numoutlets" : 2, 656 | "fontsize" : 12.0, 657 | "outlettype" : [ "", "" ] 658 | } 659 | 660 | } 661 | , { 662 | "box" : { 663 | "maxclass" : "outlet", 664 | "patching_rect" : [ 54.0, 216.0, 25.0, 25.0 ], 665 | "numinlets" : 1, 666 | "id" : "obj-74", 667 | "numoutlets" : 0, 668 | "comment" : "Data from Input Jack 1" 669 | } 670 | 671 | } 672 | , { 673 | "box" : { 674 | "maxclass" : "flonum", 675 | "fontname" : "Arial", 676 | "patching_rect" : [ 93.0, 216.0, 50.0, 20.0 ], 677 | "numinlets" : 1, 678 | "id" : "obj-76", 679 | "numoutlets" : 2, 680 | "fontsize" : 12.0, 681 | "outlettype" : [ "float", "bang" ] 682 | } 683 | 684 | } 685 | , { 686 | "box" : { 687 | "maxclass" : "newobj", 688 | "text" : "route /dtr/InputJack/1", 689 | "fontname" : "Arial", 690 | "patching_rect" : [ 54.0, 190.0, 123.0, 20.0 ], 691 | "numinlets" : 1, 692 | "id" : "obj-77", 693 | "numoutlets" : 2, 694 | "fontsize" : 12.0, 695 | "outlettype" : [ "", "" ] 696 | } 697 | 698 | } 699 | ], 700 | "lines" : [ { 701 | "patchline" : { 702 | "source" : [ "obj-5", 0 ], 703 | "destination" : [ "obj-27", 0 ], 704 | "hidden" : 0, 705 | "midpoints" : [ 1271.5, 392.0, 469.5, 392.0 ] 706 | } 707 | 708 | } 709 | , { 710 | "patchline" : { 711 | "source" : [ "obj-5", 0 ], 712 | "destination" : [ "obj-30", 0 ], 713 | "hidden" : 0, 714 | "midpoints" : [ 1271.5, 319.5, 439.5, 319.5 ] 715 | } 716 | 717 | } 718 | , { 719 | "patchline" : { 720 | "source" : [ "obj-5", 0 ], 721 | "destination" : [ "obj-67", 0 ], 722 | "hidden" : 0, 723 | "midpoints" : [ 1271.5, 387.0, 156.5, 387.0 ] 724 | } 725 | 726 | } 727 | , { 728 | "patchline" : { 729 | "source" : [ "obj-5", 0 ], 730 | "destination" : [ "obj-70", 0 ], 731 | "hidden" : 0, 732 | "midpoints" : [ 1271.5, 315.5, 126.5, 315.5 ] 733 | } 734 | 735 | } 736 | , { 737 | "patchline" : { 738 | "source" : [ "obj-5", 0 ], 739 | "destination" : [ "obj-73", 0 ], 740 | "hidden" : 0, 741 | "midpoints" : [ 1271.5, 246.0, 95.5, 246.0 ] 742 | } 743 | 744 | } 745 | , { 746 | "patchline" : { 747 | "source" : [ "obj-5", 0 ], 748 | "destination" : [ "obj-33", 0 ], 749 | "hidden" : 0, 750 | "midpoints" : [ 1271.5, 251.0, 408.5, 251.0 ] 751 | } 752 | 753 | } 754 | , { 755 | "patchline" : { 756 | "source" : [ "obj-5", 0 ], 757 | "destination" : [ "obj-77", 0 ], 758 | "hidden" : 0, 759 | "midpoints" : [ 1271.5, 166.0, 63.5, 166.0 ] 760 | } 761 | 762 | } 763 | , { 764 | "patchline" : { 765 | "source" : [ "obj-5", 0 ], 766 | "destination" : [ "obj-37", 0 ], 767 | "hidden" : 0, 768 | "midpoints" : [ 1271.5, 174.0, 376.5, 174.0 ] 769 | } 770 | 771 | } 772 | , { 773 | "patchline" : { 774 | "source" : [ "obj-5", 0 ], 775 | "destination" : [ "obj-40", 0 ], 776 | "hidden" : 0, 777 | "midpoints" : [ 1271.5, 396.5, 783.5, 396.5 ] 778 | } 779 | 780 | } 781 | , { 782 | "patchline" : { 783 | "source" : [ "obj-5", 0 ], 784 | "destination" : [ "obj-43", 0 ], 785 | "hidden" : 0, 786 | "midpoints" : [ 1271.5, 323.0, 753.5, 323.0 ] 787 | } 788 | 789 | } 790 | , { 791 | "patchline" : { 792 | "source" : [ "obj-5", 0 ], 793 | "destination" : [ "obj-46", 0 ], 794 | "hidden" : 0, 795 | "midpoints" : [ 1271.5, 254.5, 722.5, 254.5 ] 796 | } 797 | 798 | } 799 | , { 800 | "patchline" : { 801 | "source" : [ "obj-5", 0 ], 802 | "destination" : [ "obj-50", 0 ], 803 | "hidden" : 0, 804 | "midpoints" : [ 1271.5, 180.5, 690.5, 180.5 ] 805 | } 806 | 807 | } 808 | , { 809 | "patchline" : { 810 | "source" : [ "obj-5", 0 ], 811 | "destination" : [ "obj-53", 0 ], 812 | "hidden" : 0, 813 | "midpoints" : [ 1271.5, 401.0, 1104.5, 401.0 ] 814 | } 815 | 816 | } 817 | , { 818 | "patchline" : { 819 | "source" : [ "obj-5", 0 ], 820 | "destination" : [ "obj-56", 0 ], 821 | "hidden" : 0, 822 | "midpoints" : [ 1271.5, 328.5, 1074.5, 328.5 ] 823 | } 824 | 825 | } 826 | , { 827 | "patchline" : { 828 | "source" : [ "obj-5", 0 ], 829 | "destination" : [ "obj-59", 0 ], 830 | "hidden" : 0, 831 | "midpoints" : [ 1271.5, 258.0, 1043.5, 258.0 ] 832 | } 833 | 834 | } 835 | , { 836 | "patchline" : { 837 | "source" : [ "obj-5", 0 ], 838 | "destination" : [ "obj-63", 0 ], 839 | "hidden" : 0, 840 | "midpoints" : [ 1271.5, 187.0, 1011.5, 187.0 ] 841 | } 842 | 843 | } 844 | , { 845 | "patchline" : { 846 | "source" : [ "obj-53", 0 ], 847 | "destination" : [ "obj-51", 0 ], 848 | "hidden" : 0, 849 | "midpoints" : [ ] 850 | } 851 | 852 | } 853 | , { 854 | "patchline" : { 855 | "source" : [ "obj-53", 0 ], 856 | "destination" : [ "obj-52", 0 ], 857 | "hidden" : 0, 858 | "midpoints" : [ ] 859 | } 860 | 861 | } 862 | , { 863 | "patchline" : { 864 | "source" : [ "obj-56", 0 ], 865 | "destination" : [ "obj-54", 0 ], 866 | "hidden" : 0, 867 | "midpoints" : [ ] 868 | } 869 | 870 | } 871 | , { 872 | "patchline" : { 873 | "source" : [ "obj-56", 0 ], 874 | "destination" : [ "obj-55", 0 ], 875 | "hidden" : 0, 876 | "midpoints" : [ ] 877 | } 878 | 879 | } 880 | , { 881 | "patchline" : { 882 | "source" : [ "obj-59", 0 ], 883 | "destination" : [ "obj-57", 0 ], 884 | "hidden" : 0, 885 | "midpoints" : [ ] 886 | } 887 | 888 | } 889 | , { 890 | "patchline" : { 891 | "source" : [ "obj-59", 0 ], 892 | "destination" : [ "obj-58", 0 ], 893 | "hidden" : 0, 894 | "midpoints" : [ ] 895 | } 896 | 897 | } 898 | , { 899 | "patchline" : { 900 | "source" : [ "obj-63", 0 ], 901 | "destination" : [ "obj-62", 0 ], 902 | "hidden" : 0, 903 | "midpoints" : [ ] 904 | } 905 | 906 | } 907 | , { 908 | "patchline" : { 909 | "source" : [ "obj-63", 0 ], 910 | "destination" : [ "obj-60", 0 ], 911 | "hidden" : 0, 912 | "midpoints" : [ ] 913 | } 914 | 915 | } 916 | , { 917 | "patchline" : { 918 | "source" : [ "obj-40", 0 ], 919 | "destination" : [ "obj-38", 0 ], 920 | "hidden" : 0, 921 | "midpoints" : [ ] 922 | } 923 | 924 | } 925 | , { 926 | "patchline" : { 927 | "source" : [ "obj-40", 0 ], 928 | "destination" : [ "obj-39", 0 ], 929 | "hidden" : 0, 930 | "midpoints" : [ ] 931 | } 932 | 933 | } 934 | , { 935 | "patchline" : { 936 | "source" : [ "obj-43", 0 ], 937 | "destination" : [ "obj-42", 0 ], 938 | "hidden" : 0, 939 | "midpoints" : [ ] 940 | } 941 | 942 | } 943 | , { 944 | "patchline" : { 945 | "source" : [ "obj-43", 0 ], 946 | "destination" : [ "obj-41", 0 ], 947 | "hidden" : 0, 948 | "midpoints" : [ ] 949 | } 950 | 951 | } 952 | , { 953 | "patchline" : { 954 | "source" : [ "obj-46", 0 ], 955 | "destination" : [ "obj-45", 0 ], 956 | "hidden" : 0, 957 | "midpoints" : [ ] 958 | } 959 | 960 | } 961 | , { 962 | "patchline" : { 963 | "source" : [ "obj-46", 0 ], 964 | "destination" : [ "obj-44", 0 ], 965 | "hidden" : 0, 966 | "midpoints" : [ ] 967 | } 968 | 969 | } 970 | , { 971 | "patchline" : { 972 | "source" : [ "obj-50", 0 ], 973 | "destination" : [ "obj-47", 0 ], 974 | "hidden" : 0, 975 | "midpoints" : [ ] 976 | } 977 | 978 | } 979 | , { 980 | "patchline" : { 981 | "source" : [ "obj-50", 0 ], 982 | "destination" : [ "obj-49", 0 ], 983 | "hidden" : 0, 984 | "midpoints" : [ ] 985 | } 986 | 987 | } 988 | , { 989 | "patchline" : { 990 | "source" : [ "obj-27", 0 ], 991 | "destination" : [ "obj-26", 0 ], 992 | "hidden" : 0, 993 | "midpoints" : [ ] 994 | } 995 | 996 | } 997 | , { 998 | "patchline" : { 999 | "source" : [ "obj-27", 0 ], 1000 | "destination" : [ "obj-25", 0 ], 1001 | "hidden" : 0, 1002 | "midpoints" : [ ] 1003 | } 1004 | 1005 | } 1006 | , { 1007 | "patchline" : { 1008 | "source" : [ "obj-30", 0 ], 1009 | "destination" : [ "obj-29", 0 ], 1010 | "hidden" : 0, 1011 | "midpoints" : [ ] 1012 | } 1013 | 1014 | } 1015 | , { 1016 | "patchline" : { 1017 | "source" : [ "obj-30", 0 ], 1018 | "destination" : [ "obj-28", 0 ], 1019 | "hidden" : 0, 1020 | "midpoints" : [ ] 1021 | } 1022 | 1023 | } 1024 | , { 1025 | "patchline" : { 1026 | "source" : [ "obj-33", 0 ], 1027 | "destination" : [ "obj-31", 0 ], 1028 | "hidden" : 0, 1029 | "midpoints" : [ ] 1030 | } 1031 | 1032 | } 1033 | , { 1034 | "patchline" : { 1035 | "source" : [ "obj-33", 0 ], 1036 | "destination" : [ "obj-32", 0 ], 1037 | "hidden" : 0, 1038 | "midpoints" : [ ] 1039 | } 1040 | 1041 | } 1042 | , { 1043 | "patchline" : { 1044 | "source" : [ "obj-37", 0 ], 1045 | "destination" : [ "obj-36", 0 ], 1046 | "hidden" : 0, 1047 | "midpoints" : [ ] 1048 | } 1049 | 1050 | } 1051 | , { 1052 | "patchline" : { 1053 | "source" : [ "obj-37", 0 ], 1054 | "destination" : [ "obj-34", 0 ], 1055 | "hidden" : 0, 1056 | "midpoints" : [ ] 1057 | } 1058 | 1059 | } 1060 | , { 1061 | "patchline" : { 1062 | "source" : [ "obj-67", 0 ], 1063 | "destination" : [ "obj-66", 0 ], 1064 | "hidden" : 0, 1065 | "midpoints" : [ ] 1066 | } 1067 | 1068 | } 1069 | , { 1070 | "patchline" : { 1071 | "source" : [ "obj-67", 0 ], 1072 | "destination" : [ "obj-65", 0 ], 1073 | "hidden" : 0, 1074 | "midpoints" : [ ] 1075 | } 1076 | 1077 | } 1078 | , { 1079 | "patchline" : { 1080 | "source" : [ "obj-70", 0 ], 1081 | "destination" : [ "obj-68", 0 ], 1082 | "hidden" : 0, 1083 | "midpoints" : [ ] 1084 | } 1085 | 1086 | } 1087 | , { 1088 | "patchline" : { 1089 | "source" : [ "obj-70", 0 ], 1090 | "destination" : [ "obj-69", 0 ], 1091 | "hidden" : 0, 1092 | "midpoints" : [ ] 1093 | } 1094 | 1095 | } 1096 | , { 1097 | "patchline" : { 1098 | "source" : [ "obj-73", 0 ], 1099 | "destination" : [ "obj-71", 0 ], 1100 | "hidden" : 0, 1101 | "midpoints" : [ ] 1102 | } 1103 | 1104 | } 1105 | , { 1106 | "patchline" : { 1107 | "source" : [ "obj-73", 0 ], 1108 | "destination" : [ "obj-72", 0 ], 1109 | "hidden" : 0, 1110 | "midpoints" : [ ] 1111 | } 1112 | 1113 | } 1114 | , { 1115 | "patchline" : { 1116 | "source" : [ "obj-77", 0 ], 1117 | "destination" : [ "obj-76", 0 ], 1118 | "hidden" : 0, 1119 | "midpoints" : [ ] 1120 | } 1121 | 1122 | } 1123 | , { 1124 | "patchline" : { 1125 | "source" : [ "obj-77", 0 ], 1126 | "destination" : [ "obj-74", 0 ], 1127 | "hidden" : 0, 1128 | "midpoints" : [ ] 1129 | } 1130 | 1131 | } 1132 | , { 1133 | "patchline" : { 1134 | "source" : [ "obj-3", 0 ], 1135 | "destination" : [ "obj-1", 0 ], 1136 | "hidden" : 0, 1137 | "midpoints" : [ ] 1138 | } 1139 | 1140 | } 1141 | , { 1142 | "patchline" : { 1143 | "source" : [ "obj-4", 0 ], 1144 | "destination" : [ "obj-5", 0 ], 1145 | "hidden" : 0, 1146 | "midpoints" : [ ] 1147 | } 1148 | 1149 | } 1150 | , { 1151 | "patchline" : { 1152 | "source" : [ "obj-1", 0 ], 1153 | "destination" : [ "obj-4", 0 ], 1154 | "hidden" : 0, 1155 | "midpoints" : [ ] 1156 | } 1157 | 1158 | } 1159 | ] 1160 | } 1161 | 1162 | } 1163 | -------------------------------------------------------------------------------- /misc&utilities/illucia_dtr_max_objects/dtrJackIsPatched.maxpat: -------------------------------------------------------------------------------- 1 | { 2 | "patcher" : { 3 | "fileversion" : 1, 4 | "rect" : [ 18.0, 130.0, 1390.0, 621.0 ], 5 | "bglocked" : 0, 6 | "defrect" : [ 18.0, 130.0, 1390.0, 621.0 ], 7 | "openrect" : [ 0.0, 0.0, 0.0, 0.0 ], 8 | "openinpresentation" : 0, 9 | "default_fontsize" : 12.0, 10 | "default_fontface" : 0, 11 | "default_fontname" : "Arial", 12 | "gridonopen" : 0, 13 | "gridsize" : [ 15.0, 15.0 ], 14 | "gridsnaponopen" : 0, 15 | "toolbarvisible" : 1, 16 | "boxanimatetime" : 200, 17 | "imprint" : 0, 18 | "enablehscroll" : 1, 19 | "enablevscroll" : 1, 20 | "devicewidth" : 0.0, 21 | "boxes" : [ { 22 | "box" : { 23 | "maxclass" : "comment", 24 | "text" : "Port Defaults to 12001\nOptional argument can change that", 25 | "linecount" : 3, 26 | "fontname" : "Arial", 27 | "patching_rect" : [ 1061.0, 34.0, 154.0, 48.0 ], 28 | "numinlets" : 1, 29 | "id" : "obj-2", 30 | "numoutlets" : 0, 31 | "fontsize" : 12.0 32 | } 33 | 34 | } 35 | , { 36 | "box" : { 37 | "maxclass" : "newobj", 38 | "text" : "unpack 1", 39 | "fontname" : "Arial", 40 | "patching_rect" : [ 1234.0, 85.0, 59.0, 20.0 ], 41 | "numinlets" : 1, 42 | "id" : "obj-1", 43 | "numoutlets" : 1, 44 | "fontsize" : 12.0, 45 | "outlettype" : [ "int" ] 46 | } 47 | 48 | } 49 | , { 50 | "box" : { 51 | "maxclass" : "newobj", 52 | "text" : "patcherargs 12001", 53 | "fontname" : "Arial", 54 | "patching_rect" : [ 1234.0, 54.0, 111.0, 20.0 ], 55 | "numinlets" : 1, 56 | "id" : "obj-3", 57 | "numoutlets" : 2, 58 | "fontsize" : 12.0, 59 | "outlettype" : [ "", "" ] 60 | } 61 | 62 | } 63 | , { 64 | "box" : { 65 | "maxclass" : "message", 66 | "text" : "port $1", 67 | "fontname" : "Arial", 68 | "patching_rect" : [ 1234.0, 108.0, 48.0, 18.0 ], 69 | "numinlets" : 2, 70 | "id" : "obj-4", 71 | "numoutlets" : 1, 72 | "fontsize" : 12.0, 73 | "outlettype" : [ "" ] 74 | } 75 | 76 | } 77 | , { 78 | "box" : { 79 | "maxclass" : "newobj", 80 | "text" : "udpreceive 12001", 81 | "fontname" : "Arial", 82 | "patching_rect" : [ 1234.0, 133.0, 106.0, 20.0 ], 83 | "numinlets" : 1, 84 | "id" : "obj-5", 85 | "numoutlets" : 1, 86 | "fontsize" : 12.0, 87 | "outlettype" : [ "" ] 88 | } 89 | 90 | } 91 | , { 92 | "box" : { 93 | "maxclass" : "outlet", 94 | "patching_rect" : [ 1067.0, 456.0, 25.0, 25.0 ], 95 | "numinlets" : 1, 96 | "id" : "obj-51", 97 | "numoutlets" : 0, 98 | "comment" : "Data from Input Jack 16" 99 | } 100 | 101 | } 102 | , { 103 | "box" : { 104 | "maxclass" : "flonum", 105 | "fontname" : "Arial", 106 | "patching_rect" : [ 1106.0, 456.0, 50.0, 20.0 ], 107 | "numinlets" : 1, 108 | "id" : "obj-52", 109 | "numoutlets" : 2, 110 | "fontsize" : 12.0, 111 | "outlettype" : [ "float", "bang" ] 112 | } 113 | 114 | } 115 | , { 116 | "box" : { 117 | "maxclass" : "newobj", 118 | "text" : "route /dtr/JackIsPatched/16", 119 | "fontname" : "Arial", 120 | "patching_rect" : [ 1067.0, 430.0, 157.0, 20.0 ], 121 | "numinlets" : 1, 122 | "id" : "obj-53", 123 | "numoutlets" : 2, 124 | "fontsize" : 12.0, 125 | "outlettype" : [ "", "" ] 126 | } 127 | 128 | } 129 | , { 130 | "box" : { 131 | "maxclass" : "outlet", 132 | "patching_rect" : [ 1037.0, 383.0, 25.0, 25.0 ], 133 | "numinlets" : 1, 134 | "id" : "obj-54", 135 | "numoutlets" : 0, 136 | "comment" : "Data from Input Jack 15" 137 | } 138 | 139 | } 140 | , { 141 | "box" : { 142 | "maxclass" : "flonum", 143 | "fontname" : "Arial", 144 | "patching_rect" : [ 1076.0, 383.0, 50.0, 20.0 ], 145 | "numinlets" : 1, 146 | "id" : "obj-55", 147 | "numoutlets" : 2, 148 | "fontsize" : 12.0, 149 | "outlettype" : [ "float", "bang" ] 150 | } 151 | 152 | } 153 | , { 154 | "box" : { 155 | "maxclass" : "newobj", 156 | "text" : "route /dtr/JackIsPatched/15", 157 | "fontname" : "Arial", 158 | "patching_rect" : [ 1037.0, 357.0, 157.0, 20.0 ], 159 | "numinlets" : 1, 160 | "id" : "obj-56", 161 | "numoutlets" : 2, 162 | "fontsize" : 12.0, 163 | "outlettype" : [ "", "" ] 164 | } 165 | 166 | } 167 | , { 168 | "box" : { 169 | "maxclass" : "outlet", 170 | "patching_rect" : [ 1006.0, 314.0, 25.0, 25.0 ], 171 | "numinlets" : 1, 172 | "id" : "obj-57", 173 | "numoutlets" : 0, 174 | "comment" : "Data from Input Jack 14" 175 | } 176 | 177 | } 178 | , { 179 | "box" : { 180 | "maxclass" : "flonum", 181 | "fontname" : "Arial", 182 | "patching_rect" : [ 1045.0, 314.0, 50.0, 20.0 ], 183 | "numinlets" : 1, 184 | "id" : "obj-58", 185 | "numoutlets" : 2, 186 | "fontsize" : 12.0, 187 | "outlettype" : [ "float", "bang" ] 188 | } 189 | 190 | } 191 | , { 192 | "box" : { 193 | "maxclass" : "newobj", 194 | "text" : "route /dtr/JackIsPatched/14", 195 | "fontname" : "Arial", 196 | "patching_rect" : [ 1006.0, 288.0, 157.0, 20.0 ], 197 | "numinlets" : 1, 198 | "id" : "obj-59", 199 | "numoutlets" : 2, 200 | "fontsize" : 12.0, 201 | "outlettype" : [ "", "" ] 202 | } 203 | 204 | } 205 | , { 206 | "box" : { 207 | "maxclass" : "outlet", 208 | "patching_rect" : [ 974.0, 242.0, 25.0, 25.0 ], 209 | "numinlets" : 1, 210 | "id" : "obj-60", 211 | "numoutlets" : 0, 212 | "comment" : "Data from Input Jack 13" 213 | } 214 | 215 | } 216 | , { 217 | "box" : { 218 | "maxclass" : "flonum", 219 | "fontname" : "Arial", 220 | "patching_rect" : [ 1013.0, 242.0, 50.0, 20.0 ], 221 | "numinlets" : 1, 222 | "id" : "obj-62", 223 | "numoutlets" : 2, 224 | "fontsize" : 12.0, 225 | "outlettype" : [ "float", "bang" ] 226 | } 227 | 228 | } 229 | , { 230 | "box" : { 231 | "maxclass" : "newobj", 232 | "text" : "route /dtr/JackIsPatched/13", 233 | "fontname" : "Arial", 234 | "patching_rect" : [ 974.0, 216.0, 157.0, 20.0 ], 235 | "numinlets" : 1, 236 | "id" : "obj-63", 237 | "numoutlets" : 2, 238 | "fontsize" : 12.0, 239 | "outlettype" : [ "", "" ] 240 | } 241 | 242 | } 243 | , { 244 | "box" : { 245 | "maxclass" : "outlet", 246 | "patching_rect" : [ 746.0, 451.0, 25.0, 25.0 ], 247 | "numinlets" : 1, 248 | "id" : "obj-38", 249 | "numoutlets" : 0, 250 | "comment" : "Data from Input Jack 12" 251 | } 252 | 253 | } 254 | , { 255 | "box" : { 256 | "maxclass" : "flonum", 257 | "fontname" : "Arial", 258 | "patching_rect" : [ 785.0, 451.0, 50.0, 20.0 ], 259 | "numinlets" : 1, 260 | "id" : "obj-39", 261 | "numoutlets" : 2, 262 | "fontsize" : 12.0, 263 | "outlettype" : [ "float", "bang" ] 264 | } 265 | 266 | } 267 | , { 268 | "box" : { 269 | "maxclass" : "newobj", 270 | "text" : "route /dtr/JackIsPatched/12", 271 | "fontname" : "Arial", 272 | "patching_rect" : [ 746.0, 425.0, 157.0, 20.0 ], 273 | "numinlets" : 1, 274 | "id" : "obj-40", 275 | "numoutlets" : 2, 276 | "fontsize" : 12.0, 277 | "outlettype" : [ "", "" ] 278 | } 279 | 280 | } 281 | , { 282 | "box" : { 283 | "maxclass" : "outlet", 284 | "patching_rect" : [ 716.0, 378.0, 25.0, 25.0 ], 285 | "numinlets" : 1, 286 | "id" : "obj-41", 287 | "numoutlets" : 0, 288 | "comment" : "Data from Input Jack 11" 289 | } 290 | 291 | } 292 | , { 293 | "box" : { 294 | "maxclass" : "flonum", 295 | "fontname" : "Arial", 296 | "patching_rect" : [ 755.0, 378.0, 50.0, 20.0 ], 297 | "numinlets" : 1, 298 | "id" : "obj-42", 299 | "numoutlets" : 2, 300 | "fontsize" : 12.0, 301 | "outlettype" : [ "float", "bang" ] 302 | } 303 | 304 | } 305 | , { 306 | "box" : { 307 | "maxclass" : "newobj", 308 | "text" : "route /dtr/JackIsPatched/11", 309 | "fontname" : "Arial", 310 | "patching_rect" : [ 716.0, 352.0, 156.0, 20.0 ], 311 | "numinlets" : 1, 312 | "id" : "obj-43", 313 | "numoutlets" : 2, 314 | "fontsize" : 12.0, 315 | "outlettype" : [ "", "" ] 316 | } 317 | 318 | } 319 | , { 320 | "box" : { 321 | "maxclass" : "outlet", 322 | "patching_rect" : [ 685.0, 309.0, 25.0, 25.0 ], 323 | "numinlets" : 1, 324 | "id" : "obj-44", 325 | "numoutlets" : 0, 326 | "comment" : "Data from Input Jack 10" 327 | } 328 | 329 | } 330 | , { 331 | "box" : { 332 | "maxclass" : "flonum", 333 | "fontname" : "Arial", 334 | "patching_rect" : [ 724.0, 309.0, 50.0, 20.0 ], 335 | "numinlets" : 1, 336 | "id" : "obj-45", 337 | "numoutlets" : 2, 338 | "fontsize" : 12.0, 339 | "outlettype" : [ "float", "bang" ] 340 | } 341 | 342 | } 343 | , { 344 | "box" : { 345 | "maxclass" : "newobj", 346 | "text" : "route /dtr/JackIsPatched/10", 347 | "fontname" : "Arial", 348 | "patching_rect" : [ 685.0, 283.0, 157.0, 20.0 ], 349 | "numinlets" : 1, 350 | "id" : "obj-46", 351 | "numoutlets" : 2, 352 | "fontsize" : 12.0, 353 | "outlettype" : [ "", "" ] 354 | } 355 | 356 | } 357 | , { 358 | "box" : { 359 | "maxclass" : "outlet", 360 | "patching_rect" : [ 653.0, 237.0, 25.0, 25.0 ], 361 | "numinlets" : 1, 362 | "id" : "obj-47", 363 | "numoutlets" : 0, 364 | "comment" : "Data from Input Jack 9" 365 | } 366 | 367 | } 368 | , { 369 | "box" : { 370 | "maxclass" : "flonum", 371 | "fontname" : "Arial", 372 | "patching_rect" : [ 692.0, 237.0, 50.0, 20.0 ], 373 | "numinlets" : 1, 374 | "id" : "obj-49", 375 | "numoutlets" : 2, 376 | "fontsize" : 12.0, 377 | "outlettype" : [ "float", "bang" ] 378 | } 379 | 380 | } 381 | , { 382 | "box" : { 383 | "maxclass" : "newobj", 384 | "text" : "route /dtr/JackIsPatched/9", 385 | "fontname" : "Arial", 386 | "patching_rect" : [ 653.0, 211.0, 150.0, 20.0 ], 387 | "numinlets" : 1, 388 | "id" : "obj-50", 389 | "numoutlets" : 2, 390 | "fontsize" : 12.0, 391 | "outlettype" : [ "", "" ] 392 | } 393 | 394 | } 395 | , { 396 | "box" : { 397 | "maxclass" : "outlet", 398 | "patching_rect" : [ 432.0, 450.0, 25.0, 25.0 ], 399 | "numinlets" : 1, 400 | "id" : "obj-25", 401 | "numoutlets" : 0, 402 | "comment" : "Data from Input Jack 8" 403 | } 404 | 405 | } 406 | , { 407 | "box" : { 408 | "maxclass" : "flonum", 409 | "fontname" : "Arial", 410 | "patching_rect" : [ 471.0, 450.0, 50.0, 20.0 ], 411 | "numinlets" : 1, 412 | "id" : "obj-26", 413 | "numoutlets" : 2, 414 | "fontsize" : 12.0, 415 | "outlettype" : [ "float", "bang" ] 416 | } 417 | 418 | } 419 | , { 420 | "box" : { 421 | "maxclass" : "newobj", 422 | "text" : "route /dtr/JackIsPatched/8", 423 | "fontname" : "Arial", 424 | "patching_rect" : [ 432.0, 424.0, 150.0, 20.0 ], 425 | "numinlets" : 1, 426 | "id" : "obj-27", 427 | "numoutlets" : 2, 428 | "fontsize" : 12.0, 429 | "outlettype" : [ "", "" ] 430 | } 431 | 432 | } 433 | , { 434 | "box" : { 435 | "maxclass" : "outlet", 436 | "patching_rect" : [ 402.0, 377.0, 25.0, 25.0 ], 437 | "numinlets" : 1, 438 | "id" : "obj-28", 439 | "numoutlets" : 0, 440 | "comment" : "Data from Input Jack 7" 441 | } 442 | 443 | } 444 | , { 445 | "box" : { 446 | "maxclass" : "flonum", 447 | "fontname" : "Arial", 448 | "patching_rect" : [ 441.0, 377.0, 50.0, 20.0 ], 449 | "numinlets" : 1, 450 | "id" : "obj-29", 451 | "numoutlets" : 2, 452 | "fontsize" : 12.0, 453 | "outlettype" : [ "float", "bang" ] 454 | } 455 | 456 | } 457 | , { 458 | "box" : { 459 | "maxclass" : "newobj", 460 | "text" : "route /dtr/JackIsPatched/7", 461 | "fontname" : "Arial", 462 | "patching_rect" : [ 402.0, 351.0, 150.0, 20.0 ], 463 | "numinlets" : 1, 464 | "id" : "obj-30", 465 | "numoutlets" : 2, 466 | "fontsize" : 12.0, 467 | "outlettype" : [ "", "" ] 468 | } 469 | 470 | } 471 | , { 472 | "box" : { 473 | "maxclass" : "outlet", 474 | "patching_rect" : [ 371.0, 308.0, 25.0, 25.0 ], 475 | "numinlets" : 1, 476 | "id" : "obj-31", 477 | "numoutlets" : 0, 478 | "comment" : "Data from Input Jack 6" 479 | } 480 | 481 | } 482 | , { 483 | "box" : { 484 | "maxclass" : "flonum", 485 | "fontname" : "Arial", 486 | "patching_rect" : [ 410.0, 308.0, 50.0, 20.0 ], 487 | "numinlets" : 1, 488 | "id" : "obj-32", 489 | "numoutlets" : 2, 490 | "fontsize" : 12.0, 491 | "outlettype" : [ "float", "bang" ] 492 | } 493 | 494 | } 495 | , { 496 | "box" : { 497 | "maxclass" : "newobj", 498 | "text" : "route /dtr/JackIsPatched/6", 499 | "fontname" : "Arial", 500 | "patching_rect" : [ 371.0, 282.0, 150.0, 20.0 ], 501 | "numinlets" : 1, 502 | "id" : "obj-33", 503 | "numoutlets" : 2, 504 | "fontsize" : 12.0, 505 | "outlettype" : [ "", "" ] 506 | } 507 | 508 | } 509 | , { 510 | "box" : { 511 | "maxclass" : "outlet", 512 | "patching_rect" : [ 339.0, 246.0, 25.0, 25.0 ], 513 | "numinlets" : 1, 514 | "id" : "obj-34", 515 | "numoutlets" : 0, 516 | "comment" : "Data from Input Jack 5" 517 | } 518 | 519 | } 520 | , { 521 | "box" : { 522 | "maxclass" : "flonum", 523 | "fontname" : "Arial", 524 | "patching_rect" : [ 378.0, 246.0, 50.0, 20.0 ], 525 | "numinlets" : 1, 526 | "id" : "obj-36", 527 | "numoutlets" : 2, 528 | "fontsize" : 12.0, 529 | "outlettype" : [ "float", "bang" ] 530 | } 531 | 532 | } 533 | , { 534 | "box" : { 535 | "maxclass" : "newobj", 536 | "text" : "route /dtr/JackIsPatched/5", 537 | "fontname" : "Arial", 538 | "patching_rect" : [ 339.0, 220.0, 150.0, 20.0 ], 539 | "numinlets" : 1, 540 | "id" : "obj-37", 541 | "numoutlets" : 2, 542 | "fontsize" : 12.0, 543 | "outlettype" : [ "", "" ] 544 | } 545 | 546 | } 547 | , { 548 | "box" : { 549 | "maxclass" : "outlet", 550 | "patching_rect" : [ 119.0, 446.0, 25.0, 25.0 ], 551 | "numinlets" : 1, 552 | "id" : "obj-65", 553 | "numoutlets" : 0, 554 | "comment" : "Data from Input Jack 4" 555 | } 556 | 557 | } 558 | , { 559 | "box" : { 560 | "maxclass" : "flonum", 561 | "fontname" : "Arial", 562 | "patching_rect" : [ 158.0, 446.0, 50.0, 20.0 ], 563 | "numinlets" : 1, 564 | "id" : "obj-66", 565 | "numoutlets" : 2, 566 | "fontsize" : 12.0, 567 | "outlettype" : [ "float", "bang" ] 568 | } 569 | 570 | } 571 | , { 572 | "box" : { 573 | "maxclass" : "newobj", 574 | "text" : "route /dtr/JackIsPatched/4", 575 | "fontname" : "Arial", 576 | "patching_rect" : [ 119.0, 420.0, 150.0, 20.0 ], 577 | "numinlets" : 1, 578 | "id" : "obj-67", 579 | "numoutlets" : 2, 580 | "fontsize" : 12.0, 581 | "outlettype" : [ "", "" ] 582 | } 583 | 584 | } 585 | , { 586 | "box" : { 587 | "maxclass" : "outlet", 588 | "patching_rect" : [ 89.0, 373.0, 25.0, 25.0 ], 589 | "numinlets" : 1, 590 | "id" : "obj-68", 591 | "numoutlets" : 0, 592 | "comment" : "Data from Input Jack 3" 593 | } 594 | 595 | } 596 | , { 597 | "box" : { 598 | "maxclass" : "flonum", 599 | "fontname" : "Arial", 600 | "patching_rect" : [ 128.0, 373.0, 50.0, 20.0 ], 601 | "numinlets" : 1, 602 | "id" : "obj-69", 603 | "numoutlets" : 2, 604 | "fontsize" : 12.0, 605 | "outlettype" : [ "float", "bang" ] 606 | } 607 | 608 | } 609 | , { 610 | "box" : { 611 | "maxclass" : "newobj", 612 | "text" : "route /dtr/JackIsPatched/3", 613 | "fontname" : "Arial", 614 | "patching_rect" : [ 89.0, 347.0, 150.0, 20.0 ], 615 | "numinlets" : 1, 616 | "id" : "obj-70", 617 | "numoutlets" : 2, 618 | "fontsize" : 12.0, 619 | "outlettype" : [ "", "" ] 620 | } 621 | 622 | } 623 | , { 624 | "box" : { 625 | "maxclass" : "outlet", 626 | "patching_rect" : [ 58.0, 304.0, 25.0, 25.0 ], 627 | "numinlets" : 1, 628 | "id" : "obj-71", 629 | "numoutlets" : 0, 630 | "comment" : "Data from Input Jack 2" 631 | } 632 | 633 | } 634 | , { 635 | "box" : { 636 | "maxclass" : "flonum", 637 | "fontname" : "Arial", 638 | "patching_rect" : [ 97.0, 304.0, 50.0, 20.0 ], 639 | "numinlets" : 1, 640 | "id" : "obj-72", 641 | "numoutlets" : 2, 642 | "fontsize" : 12.0, 643 | "outlettype" : [ "float", "bang" ] 644 | } 645 | 646 | } 647 | , { 648 | "box" : { 649 | "maxclass" : "newobj", 650 | "text" : "route /dtr/JackIsPatched/2", 651 | "fontname" : "Arial", 652 | "patching_rect" : [ 58.0, 278.0, 150.0, 20.0 ], 653 | "numinlets" : 1, 654 | "id" : "obj-73", 655 | "numoutlets" : 2, 656 | "fontsize" : 12.0, 657 | "outlettype" : [ "", "" ] 658 | } 659 | 660 | } 661 | , { 662 | "box" : { 663 | "maxclass" : "outlet", 664 | "patching_rect" : [ 26.0, 242.0, 25.0, 25.0 ], 665 | "numinlets" : 1, 666 | "id" : "obj-74", 667 | "numoutlets" : 0, 668 | "comment" : "Data from Input Jack 1" 669 | } 670 | 671 | } 672 | , { 673 | "box" : { 674 | "maxclass" : "flonum", 675 | "fontname" : "Arial", 676 | "patching_rect" : [ 65.0, 242.0, 50.0, 20.0 ], 677 | "numinlets" : 1, 678 | "id" : "obj-76", 679 | "numoutlets" : 2, 680 | "fontsize" : 12.0, 681 | "outlettype" : [ "float", "bang" ] 682 | } 683 | 684 | } 685 | , { 686 | "box" : { 687 | "maxclass" : "newobj", 688 | "text" : "route /dtr/JackIsPatched/1", 689 | "fontname" : "Arial", 690 | "patching_rect" : [ 26.0, 216.0, 150.0, 20.0 ], 691 | "numinlets" : 1, 692 | "id" : "obj-77", 693 | "numoutlets" : 2, 694 | "fontsize" : 12.0, 695 | "outlettype" : [ "", "" ] 696 | } 697 | 698 | } 699 | ], 700 | "lines" : [ { 701 | "patchline" : { 702 | "source" : [ "obj-53", 0 ], 703 | "destination" : [ "obj-52", 0 ], 704 | "hidden" : 0, 705 | "midpoints" : [ ] 706 | } 707 | 708 | } 709 | , { 710 | "patchline" : { 711 | "source" : [ "obj-53", 0 ], 712 | "destination" : [ "obj-51", 0 ], 713 | "hidden" : 0, 714 | "midpoints" : [ ] 715 | } 716 | 717 | } 718 | , { 719 | "patchline" : { 720 | "source" : [ "obj-5", 0 ], 721 | "destination" : [ "obj-53", 0 ], 722 | "hidden" : 0, 723 | "midpoints" : [ 1243.5, 427.0, 1076.5, 427.0 ] 724 | } 725 | 726 | } 727 | , { 728 | "patchline" : { 729 | "source" : [ "obj-56", 0 ], 730 | "destination" : [ "obj-55", 0 ], 731 | "hidden" : 0, 732 | "midpoints" : [ ] 733 | } 734 | 735 | } 736 | , { 737 | "patchline" : { 738 | "source" : [ "obj-56", 0 ], 739 | "destination" : [ "obj-54", 0 ], 740 | "hidden" : 0, 741 | "midpoints" : [ ] 742 | } 743 | 744 | } 745 | , { 746 | "patchline" : { 747 | "source" : [ "obj-5", 0 ], 748 | "destination" : [ "obj-56", 0 ], 749 | "hidden" : 0, 750 | "midpoints" : [ 1243.5, 354.5, 1046.5, 354.5 ] 751 | } 752 | 753 | } 754 | , { 755 | "patchline" : { 756 | "source" : [ "obj-59", 0 ], 757 | "destination" : [ "obj-58", 0 ], 758 | "hidden" : 0, 759 | "midpoints" : [ ] 760 | } 761 | 762 | } 763 | , { 764 | "patchline" : { 765 | "source" : [ "obj-59", 0 ], 766 | "destination" : [ "obj-57", 0 ], 767 | "hidden" : 0, 768 | "midpoints" : [ ] 769 | } 770 | 771 | } 772 | , { 773 | "patchline" : { 774 | "source" : [ "obj-5", 0 ], 775 | "destination" : [ "obj-59", 0 ], 776 | "hidden" : 0, 777 | "midpoints" : [ 1243.5, 284.0, 1015.5, 284.0 ] 778 | } 779 | 780 | } 781 | , { 782 | "patchline" : { 783 | "source" : [ "obj-63", 0 ], 784 | "destination" : [ "obj-60", 0 ], 785 | "hidden" : 0, 786 | "midpoints" : [ ] 787 | } 788 | 789 | } 790 | , { 791 | "patchline" : { 792 | "source" : [ "obj-63", 0 ], 793 | "destination" : [ "obj-62", 0 ], 794 | "hidden" : 0, 795 | "midpoints" : [ ] 796 | } 797 | 798 | } 799 | , { 800 | "patchline" : { 801 | "source" : [ "obj-5", 0 ], 802 | "destination" : [ "obj-63", 0 ], 803 | "hidden" : 0, 804 | "midpoints" : [ 1243.5, 213.0, 983.5, 213.0 ] 805 | } 806 | 807 | } 808 | , { 809 | "patchline" : { 810 | "source" : [ "obj-40", 0 ], 811 | "destination" : [ "obj-39", 0 ], 812 | "hidden" : 0, 813 | "midpoints" : [ ] 814 | } 815 | 816 | } 817 | , { 818 | "patchline" : { 819 | "source" : [ "obj-40", 0 ], 820 | "destination" : [ "obj-38", 0 ], 821 | "hidden" : 0, 822 | "midpoints" : [ ] 823 | } 824 | 825 | } 826 | , { 827 | "patchline" : { 828 | "source" : [ "obj-5", 0 ], 829 | "destination" : [ "obj-40", 0 ], 830 | "hidden" : 0, 831 | "midpoints" : [ 1243.5, 422.5, 755.5, 422.5 ] 832 | } 833 | 834 | } 835 | , { 836 | "patchline" : { 837 | "source" : [ "obj-43", 0 ], 838 | "destination" : [ "obj-41", 0 ], 839 | "hidden" : 0, 840 | "midpoints" : [ ] 841 | } 842 | 843 | } 844 | , { 845 | "patchline" : { 846 | "source" : [ "obj-43", 0 ], 847 | "destination" : [ "obj-42", 0 ], 848 | "hidden" : 0, 849 | "midpoints" : [ ] 850 | } 851 | 852 | } 853 | , { 854 | "patchline" : { 855 | "source" : [ "obj-5", 0 ], 856 | "destination" : [ "obj-43", 0 ], 857 | "hidden" : 0, 858 | "midpoints" : [ 1243.5, 349.0, 725.5, 349.0 ] 859 | } 860 | 861 | } 862 | , { 863 | "patchline" : { 864 | "source" : [ "obj-46", 0 ], 865 | "destination" : [ "obj-44", 0 ], 866 | "hidden" : 0, 867 | "midpoints" : [ ] 868 | } 869 | 870 | } 871 | , { 872 | "patchline" : { 873 | "source" : [ "obj-46", 0 ], 874 | "destination" : [ "obj-45", 0 ], 875 | "hidden" : 0, 876 | "midpoints" : [ ] 877 | } 878 | 879 | } 880 | , { 881 | "patchline" : { 882 | "source" : [ "obj-5", 0 ], 883 | "destination" : [ "obj-46", 0 ], 884 | "hidden" : 0, 885 | "midpoints" : [ 1243.5, 280.5, 694.5, 280.5 ] 886 | } 887 | 888 | } 889 | , { 890 | "patchline" : { 891 | "source" : [ "obj-50", 0 ], 892 | "destination" : [ "obj-49", 0 ], 893 | "hidden" : 0, 894 | "midpoints" : [ ] 895 | } 896 | 897 | } 898 | , { 899 | "patchline" : { 900 | "source" : [ "obj-50", 0 ], 901 | "destination" : [ "obj-47", 0 ], 902 | "hidden" : 0, 903 | "midpoints" : [ ] 904 | } 905 | 906 | } 907 | , { 908 | "patchline" : { 909 | "source" : [ "obj-5", 0 ], 910 | "destination" : [ "obj-50", 0 ], 911 | "hidden" : 0, 912 | "midpoints" : [ 1243.5, 206.5, 662.5, 206.5 ] 913 | } 914 | 915 | } 916 | , { 917 | "patchline" : { 918 | "source" : [ "obj-27", 0 ], 919 | "destination" : [ "obj-25", 0 ], 920 | "hidden" : 0, 921 | "midpoints" : [ ] 922 | } 923 | 924 | } 925 | , { 926 | "patchline" : { 927 | "source" : [ "obj-27", 0 ], 928 | "destination" : [ "obj-26", 0 ], 929 | "hidden" : 0, 930 | "midpoints" : [ ] 931 | } 932 | 933 | } 934 | , { 935 | "patchline" : { 936 | "source" : [ "obj-5", 0 ], 937 | "destination" : [ "obj-27", 0 ], 938 | "hidden" : 0, 939 | "midpoints" : [ 1243.5, 418.0, 441.5, 418.0 ] 940 | } 941 | 942 | } 943 | , { 944 | "patchline" : { 945 | "source" : [ "obj-30", 0 ], 946 | "destination" : [ "obj-28", 0 ], 947 | "hidden" : 0, 948 | "midpoints" : [ ] 949 | } 950 | 951 | } 952 | , { 953 | "patchline" : { 954 | "source" : [ "obj-30", 0 ], 955 | "destination" : [ "obj-29", 0 ], 956 | "hidden" : 0, 957 | "midpoints" : [ ] 958 | } 959 | 960 | } 961 | , { 962 | "patchline" : { 963 | "source" : [ "obj-5", 0 ], 964 | "destination" : [ "obj-30", 0 ], 965 | "hidden" : 0, 966 | "midpoints" : [ 1243.5, 345.5, 411.5, 345.5 ] 967 | } 968 | 969 | } 970 | , { 971 | "patchline" : { 972 | "source" : [ "obj-33", 0 ], 973 | "destination" : [ "obj-32", 0 ], 974 | "hidden" : 0, 975 | "midpoints" : [ ] 976 | } 977 | 978 | } 979 | , { 980 | "patchline" : { 981 | "source" : [ "obj-33", 0 ], 982 | "destination" : [ "obj-31", 0 ], 983 | "hidden" : 0, 984 | "midpoints" : [ ] 985 | } 986 | 987 | } 988 | , { 989 | "patchline" : { 990 | "source" : [ "obj-5", 0 ], 991 | "destination" : [ "obj-33", 0 ], 992 | "hidden" : 0, 993 | "midpoints" : [ 1243.5, 277.0, 380.5, 277.0 ] 994 | } 995 | 996 | } 997 | , { 998 | "patchline" : { 999 | "source" : [ "obj-37", 0 ], 1000 | "destination" : [ "obj-34", 0 ], 1001 | "hidden" : 0, 1002 | "midpoints" : [ ] 1003 | } 1004 | 1005 | } 1006 | , { 1007 | "patchline" : { 1008 | "source" : [ "obj-37", 0 ], 1009 | "destination" : [ "obj-36", 0 ], 1010 | "hidden" : 0, 1011 | "midpoints" : [ ] 1012 | } 1013 | 1014 | } 1015 | , { 1016 | "patchline" : { 1017 | "source" : [ "obj-5", 0 ], 1018 | "destination" : [ "obj-37", 0 ], 1019 | "hidden" : 0, 1020 | "midpoints" : [ 1243.5, 200.0, 348.5, 200.0 ] 1021 | } 1022 | 1023 | } 1024 | , { 1025 | "patchline" : { 1026 | "source" : [ "obj-67", 0 ], 1027 | "destination" : [ "obj-65", 0 ], 1028 | "hidden" : 0, 1029 | "midpoints" : [ ] 1030 | } 1031 | 1032 | } 1033 | , { 1034 | "patchline" : { 1035 | "source" : [ "obj-67", 0 ], 1036 | "destination" : [ "obj-66", 0 ], 1037 | "hidden" : 0, 1038 | "midpoints" : [ ] 1039 | } 1040 | 1041 | } 1042 | , { 1043 | "patchline" : { 1044 | "source" : [ "obj-5", 0 ], 1045 | "destination" : [ "obj-67", 0 ], 1046 | "hidden" : 0, 1047 | "midpoints" : [ 1243.5, 413.0, 128.5, 413.0 ] 1048 | } 1049 | 1050 | } 1051 | , { 1052 | "patchline" : { 1053 | "source" : [ "obj-70", 0 ], 1054 | "destination" : [ "obj-69", 0 ], 1055 | "hidden" : 0, 1056 | "midpoints" : [ ] 1057 | } 1058 | 1059 | } 1060 | , { 1061 | "patchline" : { 1062 | "source" : [ "obj-70", 0 ], 1063 | "destination" : [ "obj-68", 0 ], 1064 | "hidden" : 0, 1065 | "midpoints" : [ ] 1066 | } 1067 | 1068 | } 1069 | , { 1070 | "patchline" : { 1071 | "source" : [ "obj-5", 0 ], 1072 | "destination" : [ "obj-70", 0 ], 1073 | "hidden" : 0, 1074 | "midpoints" : [ 1243.5, 341.5, 98.5, 341.5 ] 1075 | } 1076 | 1077 | } 1078 | , { 1079 | "patchline" : { 1080 | "source" : [ "obj-73", 0 ], 1081 | "destination" : [ "obj-72", 0 ], 1082 | "hidden" : 0, 1083 | "midpoints" : [ ] 1084 | } 1085 | 1086 | } 1087 | , { 1088 | "patchline" : { 1089 | "source" : [ "obj-73", 0 ], 1090 | "destination" : [ "obj-71", 0 ], 1091 | "hidden" : 0, 1092 | "midpoints" : [ ] 1093 | } 1094 | 1095 | } 1096 | , { 1097 | "patchline" : { 1098 | "source" : [ "obj-5", 0 ], 1099 | "destination" : [ "obj-73", 0 ], 1100 | "hidden" : 0, 1101 | "midpoints" : [ 1243.5, 272.0, 67.5, 272.0 ] 1102 | } 1103 | 1104 | } 1105 | , { 1106 | "patchline" : { 1107 | "source" : [ "obj-77", 0 ], 1108 | "destination" : [ "obj-74", 0 ], 1109 | "hidden" : 0, 1110 | "midpoints" : [ ] 1111 | } 1112 | 1113 | } 1114 | , { 1115 | "patchline" : { 1116 | "source" : [ "obj-77", 0 ], 1117 | "destination" : [ "obj-76", 0 ], 1118 | "hidden" : 0, 1119 | "midpoints" : [ ] 1120 | } 1121 | 1122 | } 1123 | , { 1124 | "patchline" : { 1125 | "source" : [ "obj-5", 0 ], 1126 | "destination" : [ "obj-77", 0 ], 1127 | "hidden" : 0, 1128 | "midpoints" : [ 1243.5, 192.0, 35.5, 192.0 ] 1129 | } 1130 | 1131 | } 1132 | , { 1133 | "patchline" : { 1134 | "source" : [ "obj-3", 0 ], 1135 | "destination" : [ "obj-1", 0 ], 1136 | "hidden" : 0, 1137 | "midpoints" : [ ] 1138 | } 1139 | 1140 | } 1141 | , { 1142 | "patchline" : { 1143 | "source" : [ "obj-4", 0 ], 1144 | "destination" : [ "obj-5", 0 ], 1145 | "hidden" : 0, 1146 | "midpoints" : [ ] 1147 | } 1148 | 1149 | } 1150 | , { 1151 | "patchline" : { 1152 | "source" : [ "obj-1", 0 ], 1153 | "destination" : [ "obj-4", 0 ], 1154 | "hidden" : 0, 1155 | "midpoints" : [ ] 1156 | } 1157 | 1158 | } 1159 | ] 1160 | } 1161 | 1162 | } 1163 | --------------------------------------------------------------------------------