changeset 34:950b839f50ed

Merge
author Becky Stewart <rebecca.stewart@eecs.qmul.ac.uk>
date Fri, 25 Feb 2011 12:03:05 +0000
parents 85d158045994 (current diff) 1df5ded9f9ff (diff)
children 8ab665941557
files
diffstat 3 files changed, 1526 insertions(+), 203 deletions(-) [+]
line wrap: on
line diff
Binary file Ableton Project/Ableton.als has changed
--- a/Abletons max connection.maxpat	Fri Feb 25 12:02:22 2011 +0000
+++ b/Abletons max connection.maxpat	Fri Feb 25 12:03:05 2011 +0000
@@ -1,9 +1,9 @@
 {
 	"patcher" : 	{
 		"fileversion" : 1,
-		"rect" : [ 204.0, 44.0, 988.0, 691.0 ],
+		"rect" : [ 815.0, 97.0, 584.0, 712.0 ],
 		"bglocked" : 0,
-		"defrect" : [ 204.0, 44.0, 988.0, 691.0 ],
+		"defrect" : [ 815.0, 97.0, 584.0, 712.0 ],
 		"openrect" : [ 0.0, 0.0, 0.0, 0.0 ],
 		"openinpresentation" : 0,
 		"default_fontsize" : 12.0,
@@ -20,14 +20,1073 @@
 		"devicewidth" : 0.0,
 		"boxes" : [ 			{
 				"box" : 				{
+					"maxclass" : "message",
+					"text" : "1 1 48",
+					"patching_rect" : [ 678.0, 240.0, 50.0, 18.0 ],
+					"id" : "obj-167",
+					"fontname" : "Arial",
+					"numinlets" : 2,
+					"numoutlets" : 1,
+					"fontsize" : 12.0,
+					"outlettype" : [ "" ]
+				}
+
+			}
+, 			{
+				"box" : 				{
+					"maxclass" : "button",
+					"patching_rect" : [ 668.0, 157.0, 20.0, 20.0 ],
+					"id" : "obj-165",
+					"numinlets" : 1,
+					"numoutlets" : 1,
+					"outlettype" : [ "bang" ]
+				}
+
+			}
+, 			{
+				"box" : 				{
+					"maxclass" : "newobj",
+					"text" : "ctlout a",
+					"patching_rect" : [ 325.0, 648.0, 49.0, 20.0 ],
+					"id" : "obj-163",
+					"fontname" : "Arial",
+					"numinlets" : 3,
+					"numoutlets" : 0,
+					"fontsize" : 12.0
+				}
+
+			}
+, 			{
+				"box" : 				{
+					"maxclass" : "comment",
+					"text" : "map to launch scene",
+					"patching_rect" : [ 992.0, 580.0, 122.0, 20.0 ],
+					"id" : "obj-162",
+					"fontname" : "Arial",
+					"numinlets" : 1,
+					"numoutlets" : 0,
+					"fontsize" : 12.0,
+					"presentation_rect" : [ 1031.0, 586.0, 0.0, 0.0 ]
+				}
+
+			}
+, 			{
+				"box" : 				{
+					"maxclass" : "message",
+					"text" : "127 2 16, 0 2 16",
+					"patching_rect" : [ 894.0, 581.0, 97.0, 18.0 ],
+					"id" : "obj-161",
+					"fontname" : "Arial",
+					"numinlets" : 2,
+					"numoutlets" : 1,
+					"fontsize" : 12.0,
+					"outlettype" : [ "" ]
+				}
+
+			}
+, 			{
+				"box" : 				{
+					"maxclass" : "comment",
+					"text" : "launch scene and move to next scene. (different scenes are different drum loop)",
+					"linecount" : 7,
+					"patching_rect" : [ 334.0, 529.285706, 67.0, 86.0 ],
+					"id" : "obj-144",
+					"fontname" : "Arial",
+					"numinlets" : 1,
+					"numoutlets" : 0,
+					"fontsize" : 9.836608
+				}
+
+			}
+, 			{
+				"box" : 				{
+					"maxclass" : "message",
+					"text" : "127 2 16, 0 2 16",
+					"linecount" : 2,
+					"patching_rect" : [ 325.0, 497.0, 60.0, 32.0 ],
+					"id" : "obj-141",
+					"fontname" : "Arial",
+					"numinlets" : 2,
+					"numoutlets" : 1,
+					"fontsize" : 12.0,
+					"outlettype" : [ "" ]
+				}
+
+			}
+, 			{
+				"box" : 				{
+					"maxclass" : "comment",
+					"text" : "IAC Driver Bus should be set to output 'a' under MIDI settings.",
+					"linecount" : 2,
+					"patching_rect" : [ 12.0, 67.37207, 220.0, 39.0 ],
+					"frgb" : [ 1.0, 1.0, 1.0, 1.0 ],
+					"id" : "obj-139",
+					"fontname" : "Arial",
+					"numinlets" : 1,
+					"bgcolor" : [ 0.811765, 0.372549, 0.372549, 1.0 ],
+					"numoutlets" : 0,
+					"textcolor" : [ 1.0, 1.0, 1.0, 1.0 ],
+					"fontsize" : 14.012403,
+					"presentation_rect" : [ 15.0, 67.37207, 0.0, 0.0 ]
+				}
+
+			}
+, 			{
+				"box" : 				{
+					"maxclass" : "comment",
+					"text" : "to Ableton",
+					"patching_rect" : [ 405.0, 670.0, 67.0, 20.0 ],
+					"id" : "obj-138",
+					"fontname" : "Arial",
+					"numinlets" : 1,
+					"numoutlets" : 0,
+					"fontsize" : 12.0
+				}
+
+			}
+, 			{
+				"box" : 				{
+					"maxclass" : "comment",
+					"text" : "We listen on port 12346.",
+					"linecount" : 2,
+					"patching_rect" : [ 401.0, 2.37207, 103.0, 39.0 ],
+					"frgb" : [ 1.0, 1.0, 1.0, 1.0 ],
+					"id" : "obj-135",
+					"fontname" : "Arial",
+					"numinlets" : 1,
+					"bgcolor" : [ 0.811765, 0.372549, 0.372549, 1.0 ],
+					"numoutlets" : 0,
+					"textcolor" : [ 1.0, 1.0, 1.0, 1.0 ],
+					"fontsize" : 14.012403,
+					"presentation_rect" : [ 997.0, 240.37207, 0.0, 0.0 ]
+				}
+
+			}
+, 			{
+				"box" : 				{
+					"maxclass" : "comment",
+					"text" : "CC2",
+					"patching_rect" : [ 686.0, 583.0, 35.0, 20.0 ],
+					"id" : "obj-134",
+					"fontname" : "Arial",
+					"numinlets" : 1,
+					"numoutlets" : 0,
+					"fontsize" : 12.0,
+					"presentation_rect" : [ 785.0, 566.0, 0.0, 0.0 ]
+				}
+
+			}
+, 			{
+				"box" : 				{
+					"maxclass" : "comment",
+					"text" : "CC1",
+					"patching_rect" : [ 686.0, 556.0, 35.0, 20.0 ],
+					"id" : "obj-133",
+					"fontname" : "Arial",
+					"numinlets" : 1,
+					"numoutlets" : 0,
+					"fontsize" : 12.0
+				}
+
+			}
+, 			{
+				"box" : 				{
+					"maxclass" : "comment",
+					"text" : "Inst 3",
+					"patching_rect" : [ 836.0, 529.0, 43.0, 20.0 ],
+					"id" : "obj-131",
+					"fontname" : "Arial",
+					"numinlets" : 1,
+					"numoutlets" : 0,
+					"fontsize" : 12.0,
+					"presentation_rect" : [ 935.0, 512.0, 0.0, 0.0 ]
+				}
+
+			}
+, 			{
+				"box" : 				{
+					"maxclass" : "comment",
+					"text" : "Inst 2",
+					"patching_rect" : [ 784.0, 529.0, 43.0, 20.0 ],
+					"id" : "obj-130",
+					"fontname" : "Arial",
+					"numinlets" : 1,
+					"numoutlets" : 0,
+					"fontsize" : 12.0,
+					"presentation_rect" : [ 883.0, 512.0, 0.0, 0.0 ]
+				}
+
+			}
+, 			{
+				"box" : 				{
+					"maxclass" : "comment",
+					"text" : "Inst 1",
+					"patching_rect" : [ 730.0, 529.0, 43.0, 20.0 ],
+					"id" : "obj-129",
+					"fontname" : "Arial",
+					"numinlets" : 1,
+					"numoutlets" : 0,
+					"fontsize" : 12.0
+				}
+
+			}
+, 			{
+				"box" : 				{
+					"maxclass" : "message",
+					"text" : "50 2 3",
+					"patching_rect" : [ 836.0, 583.0, 44.0, 18.0 ],
+					"id" : "obj-126",
+					"fontname" : "Arial",
+					"numinlets" : 2,
+					"numoutlets" : 1,
+					"fontsize" : 12.0,
+					"outlettype" : [ "" ],
+					"presentation_rect" : [ 934.0, 566.0, 0.0, 0.0 ]
+				}
+
+			}
+, 			{
+				"box" : 				{
+					"maxclass" : "message",
+					"text" : "50 1 3",
+					"patching_rect" : [ 836.0, 556.0, 44.0, 18.0 ],
+					"id" : "obj-127",
+					"fontname" : "Arial",
+					"numinlets" : 2,
+					"numoutlets" : 1,
+					"fontsize" : 12.0,
+					"outlettype" : [ "" ],
+					"presentation_rect" : [ 934.0, 541.0, 0.0, 0.0 ]
+				}
+
+			}
+, 			{
+				"box" : 				{
+					"maxclass" : "message",
+					"text" : "50 2 2",
+					"patching_rect" : [ 784.0, 583.0, 44.0, 18.0 ],
+					"id" : "obj-124",
+					"fontname" : "Arial",
+					"numinlets" : 2,
+					"numoutlets" : 1,
+					"fontsize" : 12.0,
+					"outlettype" : [ "" ],
+					"presentation_rect" : [ 881.0, 566.0, 0.0, 0.0 ]
+				}
+
+			}
+, 			{
+				"box" : 				{
+					"maxclass" : "message",
+					"text" : "50 1 2",
+					"patching_rect" : [ 784.0, 556.0, 44.0, 18.0 ],
+					"id" : "obj-125",
+					"fontname" : "Arial",
+					"numinlets" : 2,
+					"numoutlets" : 1,
+					"fontsize" : 12.0,
+					"outlettype" : [ "" ],
+					"presentation_rect" : [ 881.0, 541.0, 0.0, 0.0 ]
+				}
+
+			}
+, 			{
+				"box" : 				{
+					"maxclass" : "message",
+					"text" : "50 2 1",
+					"patching_rect" : [ 730.0, 583.0, 44.0, 18.0 ],
+					"id" : "obj-123",
+					"fontname" : "Arial",
+					"numinlets" : 2,
+					"numoutlets" : 1,
+					"fontsize" : 12.0,
+					"outlettype" : [ "" ],
+					"presentation_rect" : [ 829.0, 566.0, 0.0, 0.0 ]
+				}
+
+			}
+, 			{
+				"box" : 				{
+					"maxclass" : "message",
+					"text" : "50 1 1",
+					"patching_rect" : [ 730.0, 556.0, 44.0, 18.0 ],
+					"id" : "obj-122",
+					"fontname" : "Arial",
+					"numinlets" : 2,
+					"numoutlets" : 1,
+					"fontsize" : 12.0,
+					"outlettype" : [ "" ]
+				}
+
+			}
+, 			{
+				"box" : 				{
+					"maxclass" : "newobj",
+					"text" : "ctlout a",
+					"patching_rect" : [ 784.0, 622.0, 49.0, 20.0 ],
+					"id" : "obj-120",
+					"fontname" : "Arial",
+					"numinlets" : 3,
+					"numoutlets" : 0,
+					"fontsize" : 12.0
+				}
+
+			}
+, 			{
+				"box" : 				{
+					"maxclass" : "comment",
+					"text" : "For setting up the mapping in Ableton:",
+					"linecount" : 2,
+					"patching_rect" : [ 680.0, 479.191315, 135.0, 40.0 ],
+					"id" : "obj-119",
+					"fontname" : "Arial",
+					"numinlets" : 1,
+					"numoutlets" : 0,
+					"fontsize" : 14.350855
+				}
+
+			}
+, 			{
+				"box" : 				{
+					"maxclass" : "comment",
+					"text" : "Send chord changes 68ms early.",
+					"patching_rect" : [ 197.0, 385.92392, 167.0, 18.0 ],
+					"id" : "obj-115",
+					"fontname" : "Arial",
+					"numinlets" : 1,
+					"numoutlets" : 0,
+					"fontsize" : 10.29036
+				}
+
+			}
+, 			{
+				"box" : 				{
+					"maxclass" : "comment",
+					"text" : "IP address for Joe needs to be set below",
+					"linecount" : 2,
+					"patching_rect" : [ 12.0, 6.492308, 226.0, 57.0 ],
+					"frgb" : [ 1.0, 1.0, 1.0, 1.0 ],
+					"id" : "obj-113",
+					"fontname" : "Arial",
+					"numinlets" : 1,
+					"bgcolor" : [ 0.811765, 0.372549, 0.372549, 1.0 ],
+					"numoutlets" : 0,
+					"textcolor" : [ 1.0, 1.0, 1.0, 1.0 ],
+					"fontsize" : 22.117697
+				}
+
+			}
+, 			{
+				"box" : 				{
+					"maxclass" : "comment",
+					"text" : "to Joe",
+					"patching_rect" : [ 120.0, 520.37207, 50.0, 23.0 ],
+					"frgb" : [ 1.0, 1.0, 1.0, 1.0 ],
+					"id" : "obj-111",
+					"fontname" : "Arial",
+					"numinlets" : 1,
+					"bgcolor" : [ 0.811765, 0.372549, 0.372549, 1.0 ],
+					"numoutlets" : 0,
+					"textcolor" : [ 1.0, 1.0, 1.0, 1.0 ],
+					"fontsize" : 14.012403
+				}
+
+			}
+, 			{
+				"box" : 				{
+					"maxclass" : "newobj",
+					"text" : "delay 68",
+					"patching_rect" : [ 127.0, 414.0, 56.0, 20.0 ],
+					"id" : "obj-109",
+					"fontname" : "Arial",
+					"numinlets" : 2,
+					"numoutlets" : 1,
+					"fontsize" : 12.0,
+					"outlettype" : [ "bang" ]
+				}
+
+			}
+, 			{
+				"box" : 				{
+					"maxclass" : "newobj",
+					"text" : "delay 400",
+					"patching_rect" : [ 127.0, 375.0, 63.0, 20.0 ],
+					"id" : "obj-108",
+					"fontname" : "Arial",
+					"numinlets" : 2,
+					"numoutlets" : 1,
+					"fontsize" : 12.0,
+					"outlettype" : [ "bang" ]
+				}
+
+			}
+, 			{
+				"box" : 				{
+					"maxclass" : "comment",
+					"text" : "final beat",
+					"patching_rect" : [ 146.0, 340.0, 59.0, 20.0 ],
+					"id" : "obj-107",
+					"fontname" : "Arial",
+					"numinlets" : 1,
+					"numoutlets" : 0,
+					"fontsize" : 12.0
+				}
+
+			}
+, 			{
+				"box" : 				{
+					"maxclass" : "button",
+					"patching_rect" : [ 126.0, 340.0, 20.0, 20.0 ],
+					"id" : "obj-105",
+					"numinlets" : 1,
+					"numoutlets" : 1,
+					"outlettype" : [ "bang" ]
+				}
+
+			}
+, 			{
+				"box" : 				{
+					"maxclass" : "newobj",
+					"text" : "+ 1",
+					"patching_rect" : [ 52.0, 363.756714, 26.5, 17.0 ],
+					"id" : "obj-94",
+					"fontname" : "Arial",
+					"numinlets" : 2,
+					"numoutlets" : 1,
+					"fontsize" : 9.108685,
+					"outlettype" : [ "int" ],
+					"presentation_rect" : [ 619.0, 546.756714, 0.0, 0.0 ]
+				}
+
+			}
+, 			{
+				"box" : 				{
+					"maxclass" : "newobj",
+					"text" : "+ 1",
+					"patching_rect" : [ 86.0, 362.756714, 26.5, 17.0 ],
+					"id" : "obj-93",
+					"fontname" : "Arial",
+					"numinlets" : 2,
+					"numoutlets" : 1,
+					"fontsize" : 9.108685,
+					"outlettype" : [ "int" ]
+				}
+
+			}
+, 			{
+				"box" : 				{
+					"maxclass" : "number",
+					"patching_rect" : [ 86.0, 386.0, 17.996094, 20.0 ],
+					"id" : "obj-92",
+					"fontname" : "Arial",
+					"numinlets" : 1,
+					"numoutlets" : 2,
+					"fontsize" : 12.0,
+					"triangle" : 0,
+					"outlettype" : [ "int", "bang" ],
+					"ignoreclick" : 1
+				}
+
+			}
+, 			{
+				"box" : 				{
+					"maxclass" : "number",
+					"patching_rect" : [ 52.0, 386.0, 31.0, 20.0 ],
+					"id" : "obj-90",
+					"fontname" : "Arial",
+					"numinlets" : 1,
+					"numoutlets" : 2,
+					"fontsize" : 12.0,
+					"triangle" : 0,
+					"outlettype" : [ "int", "bang" ],
+					"ignoreclick" : 1
+				}
+
+			}
+, 			{
+				"box" : 				{
+					"maxclass" : "newobj",
+					"text" : "% 4",
+					"patching_rect" : [ 86.0, 342.84613, 26.5, 17.0 ],
+					"id" : "obj-88",
+					"fontname" : "Arial",
+					"numinlets" : 2,
+					"numoutlets" : 1,
+					"fontsize" : 9.108685,
+					"outlettype" : [ "int" ]
+				}
+
+			}
+, 			{
+				"box" : 				{
+					"maxclass" : "newobj",
+					"text" : "/ 4",
+					"patching_rect" : [ 52.0, 342.84613, 26.5, 17.0 ],
+					"id" : "obj-87",
+					"fontname" : "Arial",
+					"numinlets" : 2,
+					"numoutlets" : 1,
+					"fontsize" : 9.164513,
+					"outlettype" : [ "int" ]
+				}
+
+			}
+, 			{
+				"box" : 				{
+					"maxclass" : "newobj",
+					"text" : "loadmess 16",
+					"patching_rect" : [ 110.0, 242.0, 79.0, 20.0 ],
+					"id" : "obj-86",
+					"fontname" : "Arial",
+					"numinlets" : 1,
+					"numoutlets" : 1,
+					"fontsize" : 12.0,
+					"outlettype" : [ "" ]
+				}
+
+			}
+, 			{
+				"box" : 				{
+					"maxclass" : "comment",
+					"text" : "bars per chord & drum loop",
+					"patching_rect" : [ 161.0, 265.0, 158.0, 20.0 ],
+					"id" : "obj-85",
+					"fontname" : "Arial",
+					"numinlets" : 1,
+					"numoutlets" : 0,
+					"fontsize" : 12.0
+				}
+
+			}
+, 			{
+				"box" : 				{
+					"maxclass" : "newobj",
+					"text" : "expr $i1*4 - 1",
+					"patching_rect" : [ 110.0, 289.374817, 70.0, 18.0 ],
+					"id" : "obj-83",
+					"fontname" : "Arial",
+					"numinlets" : 1,
+					"numoutlets" : 1,
+					"fontsize" : 10.024733,
+					"outlettype" : [ "" ]
+				}
+
+			}
+, 			{
+				"box" : 				{
+					"maxclass" : "number",
+					"patching_rect" : [ 110.0, 265.0, 50.0, 20.0 ],
+					"id" : "obj-80",
+					"fontname" : "Arial",
+					"numinlets" : 1,
+					"numoutlets" : 2,
+					"fontsize" : 12.0,
+					"outlettype" : [ "int", "bang" ]
+				}
+
+			}
+, 			{
+				"box" : 				{
+					"maxclass" : "newobj",
+					"text" : "counter 0 63",
+					"patching_rect" : [ 52.0, 312.0, 77.0, 20.0 ],
+					"id" : "obj-78",
+					"fontname" : "Arial",
+					"numinlets" : 5,
+					"numoutlets" : 4,
+					"fontsize" : 12.0,
+					"outlettype" : [ "int", "", "", "int" ]
+				}
+
+			}
+, 			{
+				"box" : 				{
+					"maxclass" : "led",
+					"patching_rect" : [ 78.0, 228.0, 28.0, 28.0 ],
+					"id" : "obj-75",
+					"numinlets" : 1,
+					"blinktime" : 234,
+					"numoutlets" : 1,
+					"outlettype" : [ "int" ]
+				}
+
+			}
+, 			{
+				"box" : 				{
+					"maxclass" : "toggle",
+					"patching_rect" : [ 41.0, 168.0, 20.0, 20.0 ],
+					"id" : "obj-74",
+					"numinlets" : 1,
+					"numoutlets" : 1,
+					"outlettype" : [ "int" ]
+				}
+
+			}
+, 			{
+				"box" : 				{
+					"maxclass" : "comment",
+					"text" : "nearly 128 BPM",
+					"patching_rect" : [ 110.0, 205.0, 99.0, 20.0 ],
+					"id" : "obj-72",
+					"fontname" : "Arial",
+					"numinlets" : 1,
+					"numoutlets" : 0,
+					"fontsize" : 12.0
+				}
+
+			}
+, 			{
+				"box" : 				{
+					"maxclass" : "newobj",
+					"text" : "metro 468",
+					"patching_rect" : [ 41.0, 205.0, 65.0, 20.0 ],
+					"id" : "obj-70",
+					"fontname" : "Arial",
+					"numinlets" : 2,
+					"numoutlets" : 1,
+					"fontsize" : 12.0,
+					"outlettype" : [ "bang" ]
+				}
+
+			}
+, 			{
+				"box" : 				{
+					"maxclass" : "comment",
+					"text" : "Clock to change drum loop and chord",
+					"linecount" : 2,
+					"patching_rect" : [ 13.0, 125.0, 150.0, 34.0 ],
+					"id" : "obj-69",
+					"fontname" : "Arial",
+					"numinlets" : 1,
+					"numoutlets" : 0,
+					"fontsize" : 12.0
+				}
+
+			}
+, 			{
+				"box" : 				{
+					"maxclass" : "comment",
+					"text" : "Simulate Kinect input",
+					"patching_rect" : [ 981.0, 16.441864, 164.0, 26.0 ],
+					"id" : "obj-67",
+					"fontname" : "Arial",
+					"numinlets" : 1,
+					"numoutlets" : 0,
+					"fontsize" : 16.599777
+				}
+
+			}
+, 			{
+				"box" : 				{
+					"maxclass" : "newobj",
+					"text" : "p delay note-offs for instrument 1",
+					"patching_rect" : [ 401.0, 248.944763, 186.0, 20.0 ],
+					"id" : "obj-65",
+					"fontname" : "Arial",
+					"numinlets" : 1,
+					"numoutlets" : 1,
+					"fontsize" : 12.0,
+					"outlettype" : [ "" ],
+					"patcher" : 					{
+						"fileversion" : 1,
+						"rect" : [ 25.0, 69.0, 640.0, 480.0 ],
+						"bglocked" : 0,
+						"defrect" : [ 25.0, 69.0, 640.0, 480.0 ],
+						"openrect" : [ 0.0, 0.0, 0.0, 0.0 ],
+						"openinpresentation" : 0,
+						"default_fontsize" : 12.0,
+						"default_fontface" : 0,
+						"default_fontname" : "Arial",
+						"gridonopen" : 0,
+						"gridsize" : [ 15.0, 15.0 ],
+						"gridsnaponopen" : 0,
+						"toolbarvisible" : 1,
+						"boxanimatetime" : 200,
+						"imprint" : 0,
+						"enablehscroll" : 1,
+						"enablevscroll" : 1,
+						"devicewidth" : 0.0,
+						"boxes" : [ 							{
+								"box" : 								{
+									"maxclass" : "comment",
+									"text" : "pitch vel chan",
+									"patching_rect" : [ 208.0, 461.0, 96.0, 20.0 ],
+									"id" : "obj-5",
+									"fontname" : "Arial",
+									"numinlets" : 1,
+									"numoutlets" : 0,
+									"fontsize" : 12.0
+								}
+
+							}
+, 							{
+								"box" : 								{
+									"maxclass" : "comment",
+									"text" : "pitch vel chan",
+									"patching_rect" : [ 161.0, 57.0, 86.0, 20.0 ],
+									"id" : "obj-2",
+									"fontname" : "Arial",
+									"numinlets" : 1,
+									"numoutlets" : 0,
+									"fontsize" : 12.0
+								}
+
+							}
+, 							{
+								"box" : 								{
+									"maxclass" : "newobj",
+									"text" : "zl rev",
+									"patching_rect" : [ 192.0, 414.055237, 39.0, 20.0 ],
+									"id" : "obj-62",
+									"fontname" : "Arial",
+									"numinlets" : 2,
+									"numoutlets" : 2,
+									"fontsize" : 12.0,
+									"outlettype" : [ "", "" ]
+								}
+
+							}
+, 							{
+								"box" : 								{
+									"maxclass" : "comment",
+									"text" : "chan vel pitch",
+									"patching_rect" : [ 208.0, 389.566895, 73.0, 17.0 ],
+									"id" : "obj-61",
+									"fontname" : "Arial",
+									"numinlets" : 1,
+									"numoutlets" : 0,
+									"fontsize" : 9.106835
+								}
+
+							}
+, 							{
+								"box" : 								{
+									"maxclass" : "newobj",
+									"text" : "prepend 1",
+									"patching_rect" : [ 192.0, 367.055237, 65.0, 20.0 ],
+									"id" : "obj-59",
+									"fontname" : "Arial",
+									"numinlets" : 1,
+									"numoutlets" : 1,
+									"fontsize" : 12.0,
+									"outlettype" : [ "" ]
+								}
+
+							}
+, 							{
+								"box" : 								{
+									"maxclass" : "newobj",
+									"text" : "pack 0 0",
+									"patching_rect" : [ 192.0, 310.055237, 56.0, 20.0 ],
+									"id" : "obj-58",
+									"fontname" : "Arial",
+									"numinlets" : 2,
+									"numoutlets" : 1,
+									"fontsize" : 12.0,
+									"outlettype" : [ "" ]
+								}
+
+							}
+, 							{
+								"box" : 								{
+									"maxclass" : "newobj",
+									"text" : "pipe 100",
+									"patching_rect" : [ 50.0, 337.055237, 57.0, 20.0 ],
+									"id" : "obj-57",
+									"fontname" : "Arial",
+									"numinlets" : 2,
+									"numoutlets" : 1,
+									"fontsize" : 12.0,
+									"outlettype" : [ "" ]
+								}
+
+							}
+, 							{
+								"box" : 								{
+									"maxclass" : "newobj",
+									"text" : "pack 0 0",
+									"patching_rect" : [ 50.0, 310.055237, 56.0, 20.0 ],
+									"id" : "obj-56",
+									"fontname" : "Arial",
+									"numinlets" : 2,
+									"numoutlets" : 1,
+									"fontsize" : 12.0,
+									"outlettype" : [ "" ]
+								}
+
+							}
+, 							{
+								"box" : 								{
+									"maxclass" : "comment",
+									"text" : "chan vel pitch",
+									"patching_rect" : [ 157.0, 164.629944, 79.0, 19.0 ],
+									"id" : "obj-53",
+									"fontname" : "Arial",
+									"numinlets" : 1,
+									"numoutlets" : 0,
+									"fontsize" : 10.536201
+								}
+
+							}
+, 							{
+								"box" : 								{
+									"maxclass" : "comment",
+									"text" : "vel pitch",
+									"patching_rect" : [ 148.0, 217.055237, 55.0, 20.0 ],
+									"id" : "obj-51",
+									"fontname" : "Arial",
+									"numinlets" : 1,
+									"numoutlets" : 0,
+									"fontsize" : 12.0
+								}
+
+							}
+, 							{
+								"box" : 								{
+									"maxclass" : "newobj",
+									"text" : "if $i1!=0 then $i1 else out2 0",
+									"patching_rect" : [ 50.0, 277.055237, 161.0, 20.0 ],
+									"id" : "obj-24",
+									"fontname" : "Arial",
+									"numinlets" : 1,
+									"numoutlets" : 2,
+									"fontsize" : 12.0,
+									"outlettype" : [ "", "" ]
+								}
+
+							}
+, 							{
+								"box" : 								{
+									"maxclass" : "newobj",
+									"text" : "unpack 0 0",
+									"patching_rect" : [ 131.0, 238.055237, 69.0, 20.0 ],
+									"id" : "obj-22",
+									"fontname" : "Arial",
+									"numinlets" : 1,
+									"numoutlets" : 2,
+									"fontsize" : 12.0,
+									"outlettype" : [ "int", "int" ]
+								}
+
+							}
+, 							{
+								"box" : 								{
+									"maxclass" : "comment",
+									"text" : "Instrument 1 is monophonic with glide: this bit of patching delays the note-offs slightly",
+									"linecount" : 3,
+									"patching_rect" : [ 155.0, 100.0, 147.0, 42.0 ],
+									"id" : "obj-20",
+									"fontname" : "Arial",
+									"numinlets" : 1,
+									"numoutlets" : 0,
+									"fontsize" : 10.385214
+								}
+
+							}
+, 							{
+								"box" : 								{
+									"maxclass" : "newobj",
+									"text" : "zl rev",
+									"patching_rect" : [ 131.0, 145.055237, 39.0, 20.0 ],
+									"id" : "obj-12",
+									"fontname" : "Arial",
+									"numinlets" : 2,
+									"numoutlets" : 2,
+									"fontsize" : 12.0,
+									"outlettype" : [ "", "" ]
+								}
+
+							}
+, 							{
+								"box" : 								{
+									"maxclass" : "newobj",
+									"text" : "route 1",
+									"patching_rect" : [ 131.0, 185.055237, 48.0, 20.0 ],
+									"id" : "obj-4",
+									"fontname" : "Arial",
+									"numinlets" : 1,
+									"numoutlets" : 2,
+									"fontsize" : 12.0,
+									"outlettype" : [ "", "" ]
+								}
+
+							}
+, 							{
+								"box" : 								{
+									"maxclass" : "inlet",
+									"patching_rect" : [ 131.0, 40.0, 25.0, 25.0 ],
+									"id" : "obj-63",
+									"numinlets" : 0,
+									"numoutlets" : 1,
+									"outlettype" : [ "" ],
+									"comment" : ""
+								}
+
+							}
+, 							{
+								"box" : 								{
+									"maxclass" : "outlet",
+									"patching_rect" : [ 192.0, 494.055237, 25.0, 25.0 ],
+									"id" : "obj-64",
+									"numinlets" : 1,
+									"numoutlets" : 0,
+									"comment" : ""
+								}
+
+							}
+ ],
+						"lines" : [ 							{
+								"patchline" : 								{
+									"source" : [ "obj-12", 0 ],
+									"destination" : [ "obj-4", 0 ],
+									"hidden" : 0,
+									"midpoints" : [  ]
+								}
+
+							}
+, 							{
+								"patchline" : 								{
+									"source" : [ "obj-4", 0 ],
+									"destination" : [ "obj-22", 0 ],
+									"hidden" : 0,
+									"midpoints" : [  ]
+								}
+
+							}
+, 							{
+								"patchline" : 								{
+									"source" : [ "obj-22", 0 ],
+									"destination" : [ "obj-24", 0 ],
+									"hidden" : 0,
+									"midpoints" : [  ]
+								}
+
+							}
+, 							{
+								"patchline" : 								{
+									"source" : [ "obj-22", 1 ],
+									"destination" : [ "obj-56", 1 ],
+									"hidden" : 0,
+									"midpoints" : [  ]
+								}
+
+							}
+, 							{
+								"patchline" : 								{
+									"source" : [ "obj-24", 0 ],
+									"destination" : [ "obj-56", 0 ],
+									"hidden" : 0,
+									"midpoints" : [  ]
+								}
+
+							}
+, 							{
+								"patchline" : 								{
+									"source" : [ "obj-56", 0 ],
+									"destination" : [ "obj-57", 0 ],
+									"hidden" : 0,
+									"midpoints" : [  ]
+								}
+
+							}
+, 							{
+								"patchline" : 								{
+									"source" : [ "obj-24", 1 ],
+									"destination" : [ "obj-58", 0 ],
+									"hidden" : 0,
+									"midpoints" : [  ]
+								}
+
+							}
+, 							{
+								"patchline" : 								{
+									"source" : [ "obj-22", 1 ],
+									"destination" : [ "obj-58", 1 ],
+									"hidden" : 0,
+									"midpoints" : [  ]
+								}
+
+							}
+, 							{
+								"patchline" : 								{
+									"source" : [ "obj-57", 0 ],
+									"destination" : [ "obj-59", 0 ],
+									"hidden" : 0,
+									"midpoints" : [  ]
+								}
+
+							}
+, 							{
+								"patchline" : 								{
+									"source" : [ "obj-58", 0 ],
+									"destination" : [ "obj-59", 0 ],
+									"hidden" : 0,
+									"midpoints" : [  ]
+								}
+
+							}
+, 							{
+								"patchline" : 								{
+									"source" : [ "obj-4", 1 ],
+									"destination" : [ "obj-62", 1 ],
+									"hidden" : 0,
+									"midpoints" : [ 169.5, 212.055237, 301.0, 212.055237, 301.0, 409.055237, 221.5, 409.055237 ]
+								}
+
+							}
+, 							{
+								"patchline" : 								{
+									"source" : [ "obj-59", 0 ],
+									"destination" : [ "obj-62", 0 ],
+									"hidden" : 0,
+									"midpoints" : [  ]
+								}
+
+							}
+, 							{
+								"patchline" : 								{
+									"source" : [ "obj-63", 0 ],
+									"destination" : [ "obj-12", 0 ],
+									"hidden" : 0,
+									"midpoints" : [  ]
+								}
+
+							}
+, 							{
+								"patchline" : 								{
+									"source" : [ "obj-62", 0 ],
+									"destination" : [ "obj-64", 0 ],
+									"hidden" : 0,
+									"midpoints" : [  ]
+								}
+
+							}
+ ]
+					}
+,
+					"saved_object_attributes" : 					{
+						"default_fontsize" : 12.0,
+						"fontname" : "Arial",
+						"globalpatchername" : "",
+						"fontface" : 0,
+						"default_fontface" : 0,
+						"fontsize" : 12.0,
+						"default_fontname" : "Arial"
+					}
+
+				}
+
+			}
+, 			{
+				"box" : 				{
 					"maxclass" : "newobj",
 					"text" : "udpsend localhost 12344",
+					"patching_rect" : [ 998.0, 214.0, 144.0, 20.0 ],
 					"id" : "obj-32",
 					"fontname" : "Arial",
 					"numinlets" : 1,
-					"fontsize" : 12.0,
 					"numoutlets" : 0,
-					"patching_rect" : [ 747.0, 573.0, 144.0, 20.0 ]
+					"fontsize" : 12.0
 				}
 
 			}
@@ -35,13 +1094,13 @@
 				"box" : 				{
 					"maxclass" : "newobj",
 					"text" : "prepend /person",
+					"patching_rect" : [ 998.0, 174.0, 98.0, 20.0 ],
 					"id" : "obj-31",
 					"fontname" : "Arial",
 					"numinlets" : 1,
+					"numoutlets" : 1,
 					"fontsize" : 12.0,
-					"numoutlets" : 1,
-					"outlettype" : [ "" ],
-					"patching_rect" : [ 736.0, 533.0, 98.0, 20.0 ]
+					"outlettype" : [ "" ]
 				}
 
 			}
@@ -49,87 +1108,87 @@
 				"box" : 				{
 					"maxclass" : "newobj",
 					"text" : "pak i f f f",
+					"patching_rect" : [ 998.0, 95.0, 59.5, 20.0 ],
 					"id" : "obj-30",
 					"fontname" : "Arial",
 					"numinlets" : 4,
+					"numoutlets" : 1,
 					"fontsize" : 12.0,
-					"numoutlets" : 1,
-					"outlettype" : [ "" ],
-					"patching_rect" : [ 728.0, 454.0, 59.5, 20.0 ]
+					"outlettype" : [ "" ]
 				}
 
 			}
 , 			{
 				"box" : 				{
 					"maxclass" : "flonum",
+					"patching_rect" : [ 1084.0, 50.0, 80.0, 20.0 ],
 					"id" : "obj-29",
 					"fontname" : "Arial",
 					"numinlets" : 1,
+					"numoutlets" : 2,
 					"fontsize" : 12.0,
-					"numoutlets" : 2,
-					"outlettype" : [ "float", "bang" ],
-					"patching_rect" : [ 866.0, 403.0, 80.0, 20.0 ]
+					"outlettype" : [ "float", "bang" ]
 				}
 
 			}
 , 			{
 				"box" : 				{
 					"maxclass" : "flonum",
+					"patching_rect" : [ 1030.0, 50.0, 50.0, 20.0 ],
 					"id" : "obj-27",
 					"fontname" : "Arial",
 					"numinlets" : 1,
+					"numoutlets" : 2,
 					"fontsize" : 12.0,
-					"numoutlets" : 2,
-					"outlettype" : [ "float", "bang" ],
-					"patching_rect" : [ 794.0, 403.0, 50.0, 20.0 ]
+					"outlettype" : [ "float", "bang" ]
 				}
 
 			}
 , 			{
 				"box" : 				{
 					"maxclass" : "flonum",
+					"patching_rect" : [ 977.0, 50.0, 50.0, 20.0 ],
 					"id" : "obj-25",
 					"fontname" : "Arial",
 					"numinlets" : 1,
+					"numoutlets" : 2,
 					"fontsize" : 12.0,
-					"numoutlets" : 2,
-					"outlettype" : [ "float", "bang" ],
-					"patching_rect" : [ 723.0, 399.0, 50.0, 20.0 ]
+					"outlettype" : [ "float", "bang" ]
 				}
 
 			}
 , 			{
 				"box" : 				{
 					"maxclass" : "number",
+					"patching_rect" : [ 923.0, 50.0, 50.0, 20.0 ],
 					"id" : "obj-23",
 					"fontname" : "Arial",
 					"numinlets" : 1,
+					"numoutlets" : 2,
 					"fontsize" : 12.0,
-					"numoutlets" : 2,
-					"outlettype" : [ "int", "bang" ],
-					"patching_rect" : [ 653.0, 403.0, 50.0, 20.0 ]
+					"outlettype" : [ "int", "bang" ]
 				}
 
 			}
 , 			{
 				"box" : 				{
 					"maxclass" : "button",
+					"patching_rect" : [ 414.0, 466.0, 20.0, 20.0 ],
 					"id" : "obj-21",
 					"numinlets" : 1,
 					"numoutlets" : 1,
-					"outlettype" : [ "bang" ],
-					"patching_rect" : [ 175.0, 322.0, 20.0, 20.0 ]
+					"outlettype" : [ "bang" ]
 				}
 
 			}
 , 			{
 				"box" : 				{
 					"maxclass" : "button",
+					"patching_rect" : [ 325.0, 436.0, 20.0, 20.0 ],
 					"id" : "obj-19",
 					"numinlets" : 1,
 					"numoutlets" : 1,
-					"outlettype" : [ "bang" ],
-					"patching_rect" : [ 385.0, 319.0, 20.0, 20.0 ]
+					"outlettype" : [ "bang" ]
 				}
 
 			}
@@ -137,13 +1196,13 @@
 				"box" : 				{
 					"maxclass" : "newobj",
 					"text" : "flush",
+					"patching_rect" : [ 401.0, 497.0, 49.0, 20.0 ],
 					"id" : "obj-17",
 					"fontname" : "Arial",
 					"numinlets" : 2,
+					"numoutlets" : 2,
 					"fontsize" : 12.0,
-					"numoutlets" : 2,
-					"outlettype" : [ "int", "int" ],
-					"patching_rect" : [ 313.0, 356.0, 36.0, 20.0 ]
+					"outlettype" : [ "int", "int" ]
 				}
 
 			}
@@ -151,42 +1210,26 @@
 				"box" : 				{
 					"maxclass" : "message",
 					"text" : "/chord",
+					"patching_rect" : [ 72.0, 522.0, 44.0, 18.0 ],
 					"id" : "obj-16",
 					"fontname" : "Arial",
 					"numinlets" : 2,
+					"numoutlets" : 1,
 					"fontsize" : 12.0,
-					"numoutlets" : 1,
-					"outlettype" : [ "" ],
-					"patching_rect" : [ 358.0, 433.0, 44.0, 18.0 ]
+					"outlettype" : [ "" ]
 				}
 
 			}
 , 			{
 				"box" : 				{
 					"maxclass" : "newobj",
-					"text" : "udpsend 169.254.5.9 12345",
+					"text" : "udpsend localhost 12345",
+					"patching_rect" : [ 72.0, 546.0, 144.0, 20.0 ],
 					"id" : "obj-10",
 					"fontname" : "Arial",
 					"numinlets" : 1,
-					"fontsize" : 12.0,
 					"numoutlets" : 0,
-					"patching_rect" : [ 353.0, 538.0, 160.0, 20.0 ]
-				}
-
-			}
-, 			{
-				"box" : 				{
-					"maxclass" : "message",
-					"text" : "/pitch_vel_chan \"82 127 2\"",
-					"linecount" : 4,
-					"id" : "obj-9",
-					"fontname" : "Arial",
-					"numinlets" : 2,
-					"fontsize" : 12.0,
-					"presentation_rect" : [ 200.0, 127.0, 0.0, 0.0 ],
-					"numoutlets" : 1,
-					"outlettype" : [ "" ],
-					"patching_rect" : [ 222.0, 86.0, 50.0, 60.0 ]
+					"fontsize" : 12.0
 				}
 
 			}
@@ -194,13 +1237,13 @@
 				"box" : 				{
 					"maxclass" : "newobj",
 					"text" : "unpack 0 0 0",
+					"patching_rect" : [ 401.0, 413.0, 79.0, 20.0 ],
 					"id" : "obj-7",
 					"fontname" : "Arial",
 					"numinlets" : 1,
+					"numoutlets" : 3,
 					"fontsize" : 12.0,
-					"numoutlets" : 3,
-					"outlettype" : [ "int", "int", "int" ],
-					"patching_rect" : [ 306.0, 272.0, 79.0, 20.0 ]
+					"outlettype" : [ "int", "int", "int" ]
 				}
 
 			}
@@ -209,13 +1252,13 @@
 					"maxclass" : "message",
 					"text" : "82 127 2",
 					"linecount" : 2,
+					"patching_rect" : [ 345.0, 243.0, 50.0, 32.0 ],
 					"id" : "obj-6",
 					"fontname" : "Arial",
 					"numinlets" : 2,
+					"numoutlets" : 1,
 					"fontsize" : 12.0,
-					"numoutlets" : 1,
-					"outlettype" : [ "" ],
-					"patching_rect" : [ 403.0, 253.0, 50.0, 32.0 ]
+					"outlettype" : [ "" ]
 				}
 
 			}
@@ -223,12 +1266,12 @@
 				"box" : 				{
 					"maxclass" : "newobj",
 					"text" : "ctlout a",
+					"patching_rect" : [ 694.0, 193.387756, 52.0, 21.0 ],
 					"id" : "obj-2",
 					"fontname" : "Arial",
 					"numinlets" : 3,
-					"fontsize" : 12.0,
 					"numoutlets" : 0,
-					"patching_rect" : [ 569.0, 243.0, 49.0, 20.0 ]
+					"fontsize" : 12.88093
 				}
 
 			}
@@ -237,12 +1280,12 @@
 					"maxclass" : "comment",
 					"text" : "OSC input is routed to instruments 1-3.",
 					"linecount" : 2,
+					"patching_rect" : [ 528.0, 31.91593, 176.0, 45.0 ],
 					"id" : "obj-54",
 					"fontname" : "Arial Bold",
 					"numinlets" : 1,
-					"fontsize" : 16.935125,
 					"numoutlets" : 0,
-					"patching_rect" : [ 433.0, 31.91593, 176.0, 45.0 ]
+					"fontsize" : 16.935125
 				}
 
 			}
@@ -250,12 +1293,12 @@
 				"box" : 				{
 					"maxclass" : "comment",
 					"text" : "value, CC number, channel",
+					"patching_rect" : [ 738.0, 159.794876, 120.0, 16.0 ],
 					"id" : "obj-43",
 					"fontname" : "Arial Bold",
 					"numinlets" : 1,
-					"fontsize" : 8.046342,
 					"numoutlets" : 0,
-					"patching_rect" : [ 613.0, 160.0, 117.0, 16.0 ]
+					"fontsize" : 8.46547
 				}
 
 			}
@@ -263,13 +1306,13 @@
 				"box" : 				{
 					"maxclass" : "newobj",
 					"text" : "zl rev",
+					"patching_rect" : [ 694.0, 156.25, 39.0, 19.0 ],
 					"id" : "obj-39",
 					"fontname" : "Arial Bold",
 					"numinlets" : 2,
-					"fontsize" : 10.0,
 					"numoutlets" : 2,
-					"outlettype" : [ "", "" ],
-					"patching_rect" : [ 569.0, 157.0, 36.0, 18.0 ]
+					"fontsize" : 11.134259,
+					"outlettype" : [ "", "" ]
 				}
 
 			}
@@ -278,12 +1321,12 @@
 					"maxclass" : "comment",
 					"text" : "Route MIDI data from Joe to the three instruments.",
 					"linecount" : 5,
+					"patching_rect" : [ 327.0, 107.0, 71.0, 64.0 ],
 					"id" : "obj-35",
 					"fontname" : "Arial Bold",
 					"numinlets" : 1,
-					"fontsize" : 10.0,
 					"numoutlets" : 0,
-					"patching_rect" : [ 228.0, 293.0, 71.0, 64.0 ]
+					"fontsize" : 10.0
 				}
 
 			}
@@ -291,13 +1334,13 @@
 				"box" : 				{
 					"maxclass" : "newobj",
 					"text" : "fromsymbol",
+					"patching_rect" : [ 401.0, 218.0, 68.0, 18.0 ],
 					"id" : "obj-15",
 					"fontname" : "Arial Bold",
 					"numinlets" : 1,
+					"numoutlets" : 1,
 					"fontsize" : 10.0,
-					"numoutlets" : 1,
-					"outlettype" : [ "" ],
-					"patching_rect" : [ 306.0, 218.0, 68.0, 18.0 ]
+					"outlettype" : [ "" ]
 				}
 
 			}
@@ -305,12 +1348,12 @@
 				"box" : 				{
 					"maxclass" : "newobj",
 					"text" : "print unhandled_osc",
+					"patching_rect" : [ 495.0, 157.0, 109.0, 18.0 ],
 					"id" : "obj-14",
 					"fontname" : "Arial Bold",
 					"numinlets" : 1,
-					"fontsize" : 10.0,
 					"numoutlets" : 0,
-					"patching_rect" : [ 400.0, 157.0, 109.0, 18.0 ]
+					"fontsize" : 10.0
 				}
 
 			}
@@ -319,12 +1362,12 @@
 					"maxclass" : "comment",
 					"text" : "From tim's Grid mapping.\nIn form: channel, CC number, value",
 					"linecount" : 2,
+					"patching_rect" : [ 702.0, 100.703423, 155.0, 27.0 ],
 					"id" : "obj-13",
 					"fontname" : "Arial Bold",
 					"numinlets" : 1,
-					"fontsize" : 8.381793,
 					"numoutlets" : 0,
-					"patching_rect" : [ 577.0, 100.959999, 152.0, 26.0 ]
+					"fontsize" : 8.716659
 				}
 
 			}
@@ -332,12 +1375,12 @@
 				"box" : 				{
 					"maxclass" : "comment",
 					"text" : "From Joe as one big string",
+					"patching_rect" : [ 417.0, 116.231461, 105.0, 15.0 ],
 					"id" : "obj-11",
 					"fontname" : "Arial Bold",
 					"numinlets" : 1,
-					"fontsize" : 7.352522,
 					"numoutlets" : 0,
-					"patching_rect" : [ 322.0, 116.231461, 105.0, 15.0 ]
+					"fontsize" : 7.352522
 				}
 
 			}
@@ -345,13 +1388,13 @@
 				"box" : 				{
 					"maxclass" : "newobj",
 					"text" : "route /cc",
+					"patching_rect" : [ 694.0, 132.480774, 55.0, 19.0 ],
 					"id" : "obj-8",
 					"fontname" : "Arial Bold",
 					"numinlets" : 1,
-					"fontsize" : 10.0,
 					"numoutlets" : 2,
-					"outlettype" : [ "", "" ],
-					"patching_rect" : [ 569.0, 133.0, 52.0, 18.0 ]
+					"fontsize" : 10.605745,
+					"outlettype" : [ "", "" ]
 				}
 
 			}
@@ -359,13 +1402,13 @@
 				"box" : 				{
 					"maxclass" : "newobj",
 					"text" : "route /pitch_vel_chan",
+					"patching_rect" : [ 401.0, 133.0, 113.0, 18.0 ],
 					"id" : "obj-5",
 					"fontname" : "Arial Bold",
 					"numinlets" : 1,
+					"numoutlets" : 2,
 					"fontsize" : 10.0,
-					"numoutlets" : 2,
-					"outlettype" : [ "", "" ],
-					"patching_rect" : [ 306.0, 133.0, 113.0, 18.0 ]
+					"outlettype" : [ "", "" ]
 				}
 
 			}
@@ -373,13 +1416,13 @@
 				"box" : 				{
 					"maxclass" : "newobj",
 					"text" : "udpreceive 12346",
+					"patching_rect" : [ 399.0, 42.0, 94.0, 18.0 ],
 					"id" : "obj-3",
 					"fontname" : "Arial Bold",
 					"numinlets" : 1,
+					"numoutlets" : 1,
 					"fontsize" : 10.0,
-					"numoutlets" : 1,
-					"outlettype" : [ "" ],
-					"patching_rect" : [ 304.0, 42.0, 94.0, 18.0 ]
+					"outlettype" : [ "" ]
 				}
 
 			}
@@ -387,20 +1430,20 @@
 				"box" : 				{
 					"maxclass" : "newobj",
 					"text" : "noteout a",
+					"patching_rect" : [ 401.0, 648.0, 79.0, 20.0 ],
 					"id" : "obj-1",
 					"fontname" : "Arial",
 					"numinlets" : 3,
-					"fontsize" : 12.0,
 					"numoutlets" : 0,
-					"patching_rect" : [ 306.0, 404.0, 61.0, 20.0 ]
+					"fontsize" : 12.0
 				}
 
 			}
  ],
 		"lines" : [ 			{
 				"patchline" : 				{
-					"source" : [ "obj-29", 0 ],
-					"destination" : [ "obj-30", 3 ],
+					"source" : [ "obj-8", 0 ],
+					"destination" : [ "obj-167", 1 ],
 					"hidden" : 0,
 					"midpoints" : [  ]
 				}
@@ -408,8 +1451,8 @@
 			}
 , 			{
 				"patchline" : 				{
-					"source" : [ "obj-27", 0 ],
-					"destination" : [ "obj-30", 2 ],
+					"source" : [ "obj-8", 0 ],
+					"destination" : [ "obj-165", 0 ],
 					"hidden" : 0,
 					"midpoints" : [  ]
 				}
@@ -417,8 +1460,8 @@
 			}
 , 			{
 				"patchline" : 				{
-					"source" : [ "obj-25", 0 ],
-					"destination" : [ "obj-30", 1 ],
+					"source" : [ "obj-141", 0 ],
+					"destination" : [ "obj-163", 0 ],
 					"hidden" : 0,
 					"midpoints" : [  ]
 				}
@@ -426,8 +1469,8 @@
 			}
 , 			{
 				"patchline" : 				{
-					"source" : [ "obj-23", 0 ],
-					"destination" : [ "obj-30", 0 ],
+					"source" : [ "obj-19", 0 ],
+					"destination" : [ "obj-141", 0 ],
 					"hidden" : 0,
 					"midpoints" : [  ]
 				}
@@ -435,8 +1478,8 @@
 			}
 , 			{
 				"patchline" : 				{
-					"source" : [ "obj-30", 0 ],
-					"destination" : [ "obj-31", 0 ],
+					"source" : [ "obj-161", 0 ],
+					"destination" : [ "obj-120", 0 ],
 					"hidden" : 0,
 					"midpoints" : [  ]
 				}
@@ -444,8 +1487,8 @@
 			}
 , 			{
 				"patchline" : 				{
-					"source" : [ "obj-31", 0 ],
-					"destination" : [ "obj-32", 0 ],
+					"source" : [ "obj-127", 0 ],
+					"destination" : [ "obj-120", 0 ],
 					"hidden" : 0,
 					"midpoints" : [  ]
 				}
@@ -453,7 +1496,331 @@
 			}
 , 			{
 				"patchline" : 				{
-					"source" : [ "obj-21", 0 ],
+					"source" : [ "obj-126", 0 ],
+					"destination" : [ "obj-120", 0 ],
+					"hidden" : 0,
+					"midpoints" : [  ]
+				}
+
+			}
+, 			{
+				"patchline" : 				{
+					"source" : [ "obj-125", 0 ],
+					"destination" : [ "obj-120", 0 ],
+					"hidden" : 0,
+					"midpoints" : [  ]
+				}
+
+			}
+, 			{
+				"patchline" : 				{
+					"source" : [ "obj-124", 0 ],
+					"destination" : [ "obj-120", 0 ],
+					"hidden" : 0,
+					"midpoints" : [  ]
+				}
+
+			}
+, 			{
+				"patchline" : 				{
+					"source" : [ "obj-122", 0 ],
+					"destination" : [ "obj-120", 0 ],
+					"hidden" : 0,
+					"midpoints" : [  ]
+				}
+
+			}
+, 			{
+				"patchline" : 				{
+					"source" : [ "obj-123", 0 ],
+					"destination" : [ "obj-120", 0 ],
+					"hidden" : 0,
+					"midpoints" : [  ]
+				}
+
+			}
+, 			{
+				"patchline" : 				{
+					"source" : [ "obj-108", 0 ],
+					"destination" : [ "obj-19", 0 ],
+					"hidden" : 0,
+					"midpoints" : [ 136.5, 402.0, 334.5, 402.0 ]
+				}
+
+			}
+, 			{
+				"patchline" : 				{
+					"source" : [ "obj-16", 0 ],
+					"destination" : [ "obj-10", 0 ],
+					"hidden" : 0,
+					"midpoints" : [  ]
+				}
+
+			}
+, 			{
+				"patchline" : 				{
+					"source" : [ "obj-105", 0 ],
+					"destination" : [ "obj-108", 0 ],
+					"hidden" : 0,
+					"midpoints" : [  ]
+				}
+
+			}
+, 			{
+				"patchline" : 				{
+					"source" : [ "obj-108", 0 ],
+					"destination" : [ "obj-109", 0 ],
+					"hidden" : 0,
+					"midpoints" : [  ]
+				}
+
+			}
+, 			{
+				"patchline" : 				{
+					"source" : [ "obj-70", 0 ],
+					"destination" : [ "obj-75", 0 ],
+					"hidden" : 0,
+					"midpoints" : [  ]
+				}
+
+			}
+, 			{
+				"patchline" : 				{
+					"source" : [ "obj-74", 0 ],
+					"destination" : [ "obj-70", 0 ],
+					"hidden" : 0,
+					"midpoints" : [  ]
+				}
+
+			}
+, 			{
+				"patchline" : 				{
+					"source" : [ "obj-70", 0 ],
+					"destination" : [ "obj-78", 0 ],
+					"hidden" : 0,
+					"midpoints" : [  ]
+				}
+
+			}
+, 			{
+				"patchline" : 				{
+					"source" : [ "obj-78", 3 ],
+					"destination" : [ "obj-105", 0 ],
+					"hidden" : 0,
+					"midpoints" : [  ]
+				}
+
+			}
+, 			{
+				"patchline" : 				{
+					"source" : [ "obj-80", 0 ],
+					"destination" : [ "obj-83", 0 ],
+					"hidden" : 0,
+					"midpoints" : [  ]
+				}
+
+			}
+, 			{
+				"patchline" : 				{
+					"source" : [ "obj-83", 0 ],
+					"destination" : [ "obj-78", 4 ],
+					"hidden" : 0,
+					"midpoints" : [  ]
+				}
+
+			}
+, 			{
+				"patchline" : 				{
+					"source" : [ "obj-78", 0 ],
+					"destination" : [ "obj-87", 0 ],
+					"hidden" : 0,
+					"midpoints" : [  ]
+				}
+
+			}
+, 			{
+				"patchline" : 				{
+					"source" : [ "obj-78", 0 ],
+					"destination" : [ "obj-88", 0 ],
+					"hidden" : 0,
+					"midpoints" : [  ]
+				}
+
+			}
+, 			{
+				"patchline" : 				{
+					"source" : [ "obj-94", 0 ],
+					"destination" : [ "obj-90", 0 ],
+					"hidden" : 0,
+					"midpoints" : [  ]
+				}
+
+			}
+, 			{
+				"patchline" : 				{
+					"source" : [ "obj-87", 0 ],
+					"destination" : [ "obj-94", 0 ],
+					"hidden" : 0,
+					"midpoints" : [  ]
+				}
+
+			}
+, 			{
+				"patchline" : 				{
+					"source" : [ "obj-93", 0 ],
+					"destination" : [ "obj-92", 0 ],
+					"hidden" : 0,
+					"midpoints" : [  ]
+				}
+
+			}
+, 			{
+				"patchline" : 				{
+					"source" : [ "obj-88", 0 ],
+					"destination" : [ "obj-93", 0 ],
+					"hidden" : 0,
+					"midpoints" : [  ]
+				}
+
+			}
+, 			{
+				"patchline" : 				{
+					"source" : [ "obj-86", 0 ],
+					"destination" : [ "obj-80", 0 ],
+					"hidden" : 0,
+					"midpoints" : [  ]
+				}
+
+			}
+, 			{
+				"patchline" : 				{
+					"source" : [ "obj-15", 0 ],
+					"destination" : [ "obj-65", 0 ],
+					"hidden" : 0,
+					"midpoints" : [  ]
+				}
+
+			}
+, 			{
+				"patchline" : 				{
+					"source" : [ "obj-65", 0 ],
+					"destination" : [ "obj-7", 0 ],
+					"hidden" : 0,
+					"midpoints" : [  ]
+				}
+
+			}
+, 			{
+				"patchline" : 				{
+					"source" : [ "obj-5", 1 ],
+					"destination" : [ "obj-14", 0 ],
+					"hidden" : 0,
+					"midpoints" : [  ]
+				}
+
+			}
+, 			{
+				"patchline" : 				{
+					"source" : [ "obj-5", 0 ],
+					"destination" : [ "obj-15", 0 ],
+					"hidden" : 0,
+					"midpoints" : [  ]
+				}
+
+			}
+, 			{
+				"patchline" : 				{
+					"source" : [ "obj-3", 0 ],
+					"destination" : [ "obj-5", 0 ],
+					"hidden" : 0,
+					"midpoints" : [  ]
+				}
+
+			}
+, 			{
+				"patchline" : 				{
+					"source" : [ "obj-3", 0 ],
+					"destination" : [ "obj-8", 0 ],
+					"hidden" : 0,
+					"midpoints" : [  ]
+				}
+
+			}
+, 			{
+				"patchline" : 				{
+					"source" : [ "obj-8", 0 ],
+					"destination" : [ "obj-39", 0 ],
+					"hidden" : 0,
+					"midpoints" : [  ]
+				}
+
+			}
+, 			{
+				"patchline" : 				{
+					"source" : [ "obj-39", 0 ],
+					"destination" : [ "obj-2", 0 ],
+					"hidden" : 0,
+					"midpoints" : [  ]
+				}
+
+			}
+, 			{
+				"patchline" : 				{
+					"source" : [ "obj-15", 0 ],
+					"destination" : [ "obj-6", 1 ],
+					"hidden" : 0,
+					"midpoints" : [  ]
+				}
+
+			}
+, 			{
+				"patchline" : 				{
+					"source" : [ "obj-7", 2 ],
+					"destination" : [ "obj-1", 2 ],
+					"hidden" : 0,
+					"midpoints" : [  ]
+				}
+
+			}
+, 			{
+				"patchline" : 				{
+					"source" : [ "obj-7", 1 ],
+					"destination" : [ "obj-17", 1 ],
+					"hidden" : 0,
+					"midpoints" : [  ]
+				}
+
+			}
+, 			{
+				"patchline" : 				{
+					"source" : [ "obj-7", 0 ],
+					"destination" : [ "obj-17", 0 ],
+					"hidden" : 0,
+					"midpoints" : [  ]
+				}
+
+			}
+, 			{
+				"patchline" : 				{
+					"source" : [ "obj-17", 0 ],
+					"destination" : [ "obj-1", 0 ],
+					"hidden" : 0,
+					"midpoints" : [  ]
+				}
+
+			}
+, 			{
+				"patchline" : 				{
+					"source" : [ "obj-19", 0 ],
+					"destination" : [ "obj-16", 0 ],
+					"hidden" : 0,
+					"midpoints" : [  ]
+				}
+
+			}
+, 			{
+				"patchline" : 				{
+					"source" : [ "obj-19", 0 ],
 					"destination" : [ "obj-17", 0 ],
 					"hidden" : 0,
 					"midpoints" : [  ]
@@ -471,7 +1838,7 @@
 			}
 , 			{
 				"patchline" : 				{
-					"source" : [ "obj-19", 0 ],
+					"source" : [ "obj-21", 0 ],
 					"destination" : [ "obj-17", 0 ],
 					"hidden" : 0,
 					"midpoints" : [  ]
@@ -480,8 +1847,8 @@
 			}
 , 			{
 				"patchline" : 				{
-					"source" : [ "obj-19", 0 ],
-					"destination" : [ "obj-16", 0 ],
+					"source" : [ "obj-31", 0 ],
+					"destination" : [ "obj-32", 0 ],
 					"hidden" : 0,
 					"midpoints" : [  ]
 				}
@@ -489,8 +1856,8 @@
 			}
 , 			{
 				"patchline" : 				{
-					"source" : [ "obj-17", 0 ],
-					"destination" : [ "obj-1", 0 ],
+					"source" : [ "obj-30", 0 ],
+					"destination" : [ "obj-31", 0 ],
 					"hidden" : 0,
 					"midpoints" : [  ]
 				}
@@ -498,8 +1865,8 @@
 			}
 , 			{
 				"patchline" : 				{
-					"source" : [ "obj-7", 0 ],
-					"destination" : [ "obj-17", 0 ],
+					"source" : [ "obj-23", 0 ],
+					"destination" : [ "obj-30", 0 ],
 					"hidden" : 0,
 					"midpoints" : [  ]
 				}
@@ -507,8 +1874,8 @@
 			}
 , 			{
 				"patchline" : 				{
-					"source" : [ "obj-7", 1 ],
-					"destination" : [ "obj-17", 1 ],
+					"source" : [ "obj-25", 0 ],
+					"destination" : [ "obj-30", 1 ],
 					"hidden" : 0,
 					"midpoints" : [  ]
 				}
@@ -516,8 +1883,8 @@
 			}
 , 			{
 				"patchline" : 				{
-					"source" : [ "obj-16", 0 ],
-					"destination" : [ "obj-10", 0 ],
+					"source" : [ "obj-27", 0 ],
+					"destination" : [ "obj-30", 2 ],
 					"hidden" : 0,
 					"midpoints" : [  ]
 				}
@@ -525,89 +1892,8 @@
 			}
 , 			{
 				"patchline" : 				{
-					"source" : [ "obj-3", 0 ],
-					"destination" : [ "obj-9", 1 ],
-					"hidden" : 0,
-					"midpoints" : [  ]
-				}
-
-			}
-, 			{
-				"patchline" : 				{
-					"source" : [ "obj-7", 2 ],
-					"destination" : [ "obj-1", 2 ],
-					"hidden" : 0,
-					"midpoints" : [  ]
-				}
-
-			}
-, 			{
-				"patchline" : 				{
-					"source" : [ "obj-15", 0 ],
-					"destination" : [ "obj-7", 0 ],
-					"hidden" : 0,
-					"midpoints" : [  ]
-				}
-
-			}
-, 			{
-				"patchline" : 				{
-					"source" : [ "obj-15", 0 ],
-					"destination" : [ "obj-6", 1 ],
-					"hidden" : 0,
-					"midpoints" : [  ]
-				}
-
-			}
-, 			{
-				"patchline" : 				{
-					"source" : [ "obj-39", 0 ],
-					"destination" : [ "obj-2", 0 ],
-					"hidden" : 0,
-					"midpoints" : [  ]
-				}
-
-			}
-, 			{
-				"patchline" : 				{
-					"source" : [ "obj-8", 0 ],
-					"destination" : [ "obj-39", 0 ],
-					"hidden" : 0,
-					"midpoints" : [  ]
-				}
-
-			}
-, 			{
-				"patchline" : 				{
-					"source" : [ "obj-3", 0 ],
-					"destination" : [ "obj-8", 0 ],
-					"hidden" : 0,
-					"midpoints" : [  ]
-				}
-
-			}
-, 			{
-				"patchline" : 				{
-					"source" : [ "obj-3", 0 ],
-					"destination" : [ "obj-5", 0 ],
-					"hidden" : 0,
-					"midpoints" : [  ]
-				}
-
-			}
-, 			{
-				"patchline" : 				{
-					"source" : [ "obj-5", 0 ],
-					"destination" : [ "obj-15", 0 ],
-					"hidden" : 0,
-					"midpoints" : [  ]
-				}
-
-			}
-, 			{
-				"patchline" : 				{
-					"source" : [ "obj-5", 1 ],
-					"destination" : [ "obj-14", 0 ],
+					"source" : [ "obj-29", 0 ],
+					"destination" : [ "obj-30", 3 ],
 					"hidden" : 0,
 					"midpoints" : [  ]
 				}
--- a/tim_grid_mapper/grid_mapper.py	Fri Feb 25 12:02:22 2011 +0000
+++ b/tim_grid_mapper/grid_mapper.py	Fri Feb 25 12:03:05 2011 +0000
@@ -1,4 +1,5 @@
-'''
+#! /usr/bin/python
+'''
 grid_mapper.py - maintained by Tim.
 
 This module implements a mapping from person positions (id,x,y,z) to generate 
@@ -10,6 +11,7 @@
 from OSC import ThreadingOSCServer, OSCClient, OSCMessage, OSCClientError
 from threading import Thread
 from time import sleep
+import pdb
 
 #### PUBLIC OPTIONS ####
 num_channels = 3 # number of instruments (and max number of people who can 
@@ -51,7 +53,19 @@
 currently_playing = [None] * num_channels
 
 # mapping from personId to time of last update
-last_update_times = {} 
+# ((not yet implemented))
+#last_update_times = {}
+
+# mapping from (channel, CC_number) to last CC value sent:
+last_value_sent = {
+	(1, 1) : 0,
+	(1, 2) : 0,
+	(2, 1) : 0,
+	(2, 2) : 0,
+	(3, 1) : 0,
+	(3, 2) : 0,
+}
+	
 
 # OSC OBJECTS
 server = None # Initialised when start() is run
@@ -69,7 +83,19 @@
 	message = OSCMessage(address)
 	message.extend(data)
 	client.sendto(message, joe)
-	print_d('==OSC Output to Joe %s:==\n    %s' % (joe, data))
+	print_d('\n==OSC Output "%s" to Joe %s:==\n    %s' % (address, joe, data))
+
+
+def send_to_ableton(data, address='/cc'):
+	'''Sends `data` to Ableton (via Max) as an OSC message.
+	'''
+	#pdb.set_trace()
+	message = OSCMessage(address)
+	message.extend(data)
+	client.sendto(message, ableton)
+	print('\n==OSC Output "%s" to Ableton %s:==\n    %s' % (address, ableton, data))
+	
+
 
 def flush(channel):
 	'''Sends note off messages for whatever note is currently playing on 
@@ -82,10 +108,11 @@
 			'Turn off note %i on channel %i' % (pitch, channel), 
 			    # first string is ignored
 			int(pitch),       # pitch to turn off
-			0,                                # 0 to turn note off
-			127,                # doesn't matter for note-off (but never send 0)
+			0,                # 0 to turn note off
+			127,              # doesn't matter for note-off (but never send 0)
 			int(channel),
 		])
+	currently_playing[channel] = None
 
 
 def person_handler(address, tags, data, client_address):
@@ -95,6 +122,14 @@
 	'''
 	pitch, velocity, channel, cc1, cc2 = grid_map(*data)
 	
+	cc1, cc2 = int(round(cc1)), int(round(cc2))
+	if cc1 != last_value_sent[(channel, 1)]:
+		send_to_ableton([channel, 1, cc1], '/cc')
+		last_value_sent[(channel, 1)] = cc1
+	if cc2 != last_value_sent[(channel, 2)]:
+		send_to_ableton([channel, 2, cc2], '/cc')
+		last_value_sent[(channel, 2)] = cc2		
+
 	
 	## Format data for Joe - done using Specification.txt on 2011-02-15
 	
@@ -113,11 +148,13 @@
 			'Turn on note %i on channel %i' % (pitch, channel),
 				# first value is string which is ignored
 			int(pitch),    
-			1,        # 1 to turn note on
+			1,               # 1 to turn note on
 			int(velocity), 
 			int(channel)
 		])
-	
+		currently_playing[channel] = pitch
+
+
 
 
 
@@ -144,7 +181,7 @@
 	                          MIN['x'],     MAX['x'],
 	                          MIN['cc1'], MAX['cc1'])
 	        )
-	cc2 = round(interpolate(x, 
+	cc2 = round(interpolate(y, 
 	                          MIN['y'],     MAX['y'],
 	                          MIN['cc2'], MAX['cc2'])
 	        )