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