Introduction: Create Interactive Electronic Instruments With MaxMSP

About: I post updates on twitter and instagram: @amandaghassaei

This Instructable is part 3 in an Intro to MaxMSP series I've just finished teaching at Women's Audio Mission in San Francisco. Part 1 is an introduction to MaxMSP and MIDI, part 2 is intermediate Max and Audio, and this Instructable is all about interfacing MaxMSP with hardware.

I recommend at least skimming over my last two instructables before diving into this one, many of the example patches I use in this instructable are derived from patches built in the last two classes. In this Ible, I'll be going over how to get MaxMSP connected to Reactivision, Kinect, Arduino, MaKey MaKey, and the Novation Launchpad. The last step has some useful links and ideas for more ways to extend Max.

Step 1: ReacTIVision and MaxMSP

ReacTIVision is a free, open source tool that communicates with MaxMSP and allows you to track objects with a camera by attaching small paper markers to them. The software tracks x and y position and rotation and it's great for incorporating real world objects into your MaxMSP patch or making table top interfaces. It was originally written for the ReacTable, a table top multitouch instrument:

Here are some ReacTIVsion projects:

Here's how to do it:
- Download the ReacTIVision vision engine
- Download the ReacTIVision TUIO client for MaxMSP
- Print out some of the fiducial markers (look in your ReacTIVision vision engine download, under symbols>>default.pdf)
- Run the ReacTIVision application and hold up the markers to your webcam - you should see the number of the fiducial track with it as you move it around the screen. You may need to adjust your lighting to help reacTIVision see the markers.

By default ReacTIVision uses background subtraction to help it with tracking, in some cases this can be a hindrance. Use the 'E' key to toggle in and out of background subtraction mode and use the spacebar to recalculate the background until you find a setting that best tracks the fiducials. Pressing the 'S' key will show to the original source image. Pressing 'T' will show the binary tresholded image, and pressing the 'N' key will turn the display off, which reduces the CPU usage. The thresholder gradient gate can be adjusted by hitting the 'G' key, lowering the value can improve the thresholder performance in low light conditions with insufficient finger contrast for example. You can gradually lower the value just before noise appears in the image. The camera options can be adjusted by pressing the 'O' key. You can read more on the reacTIVision website and the README.txt (comes with the ReacTIVision vision engine) about the optimal lighting, camera, and background setup for the software.

- TUIOClient.help/mxe/and mxo are the files that allow you to pull in data from the ReacTIVision vision engine into Max. You must include these files in the same folder as any patch that requires them You can also add them into a directory that Max knows to look for external objects.

First open the file TuioDump.pat in Max (find it in the TUIO_MaxMSP folder), open up the Max window to see the logged output (Command + M / Ctrl + M).
<code>
----------begin_max5_patcher----------
489.3ocyTFraaCCCF9r8SgfNmMD45llzaC8TOsKcmFFFjsYRXgrjgjbm2J56
9josic2pSSCFJ1EZqeJSS9QJ8XbDOyz.NN6Z1WYQQOFGEQRsBQ8qi3kxlbkz
QaiqgeXxtmunykGZ7jbkE09A0JoOeOp28cKj66Bd5xOtbAayUs1jUsVQ3c12
5+BrfhRHxePLDksFsWKKAxymrnTM0iC+E4YSHVcp55RTq.OkmhQQSsePcYq3
SwwslEmXAmU68F8QJsq1Pk1Zpntbv9RkVB+XoZWd5+YEzEWdlTuieHNOuRDm
QkLSq6tZzbiBgSn+ktYzNW+6h+o8u+BJJzExyiCmjy.N4lxxIH3.cbXYkBXP
ijdRng42K8LZj2EdGXnN74Afwt6K29YVI3bxcPvkg7lazNiBFBsB0PtoVSwO
YdjKRRIZS1jTA8XJz2Z2kQS0GP3j1P5+YGilku.PPZOnp5o6VikjFGLIoRis
kzaM7WkYqESXl3jY1kuSLixFZN3Ot5kpnV8mCRmo1lOb.n+LFSbnlJ.mG0RO
FtlZbOgKaXi08drn.H2C4bA5jYJnX9F5aIaV9JYi3LylNTIqpd.rt9PRIRX5
5disc4pEzRT2sjvO2BOfC6+BRQZCCK9vjRssqu1rdEOt8+7T7uQCg2J3
-----------end_max5_patcher-----------

Here is how the TUIOClient sends messages into Max:

When an object comes into view an addObject message is sent:
addObject session_id symbol_id
session_id is the number of the current session, we don't need to worry about that for most applications. symbol_id is the number of the symbol that came onscreen - these can be found on the defaults.pdf that you printed out.

As the marker is tracked around the screen, an updateObject message is sent for each frame (my computer runs at about a 15fps frame rate, your machine may differ depending on how hard it is working):
updateObject session_id symbol_id xpos ypos angle xspeed yspeed rspeed maccel raccel
session_id and symbol_id are the same as the addObject message
xpos, ypos, and angle are the x position, yposition, and angle of rotation of the marker
xspeed, yspeed, and rspeed are the x, y, and rotational velocities of the marker
maccel is the acceleration of the marker across the screen
raccel is the rotational acceleration of the marker
you may find that you need just one or all of these pieces of information, but usually symbol_id, xpos, ypos, and rotation are the most useful

And when the marker is removed a removeObject is sent:
removeObject session_id symbol_id
session_id and symbol_id are the same as the addObject message

Use the patch below to read in and parse add, update, and remove messages for marker id, xpos, ypos, and rotation. Be sure to save it in the same folder as the TUIO objects you just downloaded.
<code>
----------begin_max5_patcher----------
905.3oc0XlsbaCBEF9Z6mBM5pzNNdDKZw8tN8An2z65zICxhjPhLRCBk3zL4
cuBzRTVjQdC6NwQKGvvOebNGv77zItwYqoEtNey42NSl77zISzlTFlz79D2U
j0KSIE5p4tLa0JJW5NqtLIcsTaWPWk8.8mw2QW1UXNQt7VF+lqDJi5NADFM2
alCLxScaAP+R0yN+o46bs3lXUUUkWagkn6fr36tD521zWmwkbxJptnuKXjz9
kTv9qtD.rqUxEzhJcSjrLde8DAq0CRcyq4RmZ3kqX7TpTO1AuZLqT1Z0SY7k
oSUWlsmPjjjXjfXud.LHZKAHdmAnkQgHqdtx4BuKgeMm8k1Zjx3zkYkbc0fC
yIebnlM99pa954WDZzfBbn8zvAf4g9JMDbN3psNOqvgvSbdR8vEwT4iTJ2wS
aCr0zFi.y86nMvKrYrNZd6cv4Mpl2vP74.uWQD2SENUcPLUrszEEhpGK6lyL
Xw4VT+0oYUMhq4nW3B8.16Co45O7BMO7xIhJ6Rp3JJmDmpqg2N4W4CqECxa7
tU0zR9TNstMTieRkOhiaLgeia+ubOvBOFfEGsXNzerjMvljE2rZFL7+Sx1jB
bTf0+n.1SLhhKkxL9FPDBDzKpFCZu9oHB5tY2EDnNEABrGtKaBAfc.AuM+9l
RkOJ2DjMi+PAG.fx3GEWKN8wJf7gUUK44jk2Wsqkp+lW+wr6GHp1Kz.6OvaU
dHR0bqKn7cOL.C8OFgms+3rwDdtvPzYaasWKSZ8nSHLZ7a6vylAmsJau34oJ
3zrOWSLYvhMR7C9OJqq2C2epptYyESaNHfwDrF4ddG1svazQcAmvMNcFF9T6
DLpnGe6sd1wGNhplk5zcdYN8O9Qmx7DhjNxSRC.0rCiPaBdGnMCfGBdJx08+
.3CeLxhDoOQgvNOmgQ.5DmD4ycD9UIK6GordG4xfyzHcR9.7FWh4HGjjxJ1p
bH5pnOmn2cJ85Qox9aQVQVoXYam0tMVGbWOkPKjLtdYv9UJrpRuxiaYIITd+
zlIrBUlzjgOumsROHS5Ivt5AZRO91UO.S5AYW83YROPqomQMcgspbLNaAr2r
EXL5wyt5wj2yBqIG+QnlHqpFSyUAV0S1DarXZvQnFrUUioYpcMkb8J7j77Gn
hhllTKjps+bWlP8ZvL8qLd8q5MW3JnOvZqORagHp12irZSOkh5ssrNJvcppe
dY5+.7jck4O
-----------end_max5_patcher-----------

Try wiring up the data from updateObject to the frequency modulated synth from the last Instructable. See if you can get the rotation of a fiducial to control the rate of frequency modulation. Or use the y position to change the pitch of the main oscillator. Hint: you'll need to use a scale object to scale your range of values to something appropriate for the synth. In case you get stuck:
<code>
----------begin_max5_patcher----------
1285.3oc4ZsrbahDEcs7WQWrJiihp9MP1kZ9.lMytoRMEB53PhDnRBMwNoh+
1GnaPF4BCWkft5gqxFjZ0Bctm649na3G2Lwad98lMdj2S9GxjI+3lISrCUMv
j52OwaYz8wKh1Xml2mVjmsco2T2GU9xzrElB6mwdZv7sEMixqG8S4YEaR+tw
NS9LZ8vtYV7vJiCEU+.QEdSIdyixtyi7w54sJpH9yoY28uqMwEtoFP0kWFhv
mUcRQqNxKOt66jlXgb97u7NI0qENxhVZ+479v5znEdUevOu4lpCSARCYluUd
YatlEl6sXxaSbzBCgNivlUBEJQRoy5jqzcxUrCjq.QOhfpSLlpW9gMt7yYjL
IjGZ0Gb9vxDNlpjR6y2oUNURjZpQFXOEF1G03OtTylEoIl0Gf.g86XgB+cp+
R6LnaKjELh93aerSaiOJN0Mo2kUR68F8y7m4qJ06AVYufOS8x9VM+pM52mJr
ddgb3neAC8hDzYLB6DVjngdnLWQBduYGCuHyATaiA7gSAHnGC+rdFOv5oEmv
tAD9VOrKBfw5MWOO3pMePCOD3Cna.wHmOX6x4l0GRgA9uVggoMLxNqZYdho8
ErbhUukt6R0AUoUgsZfTo6kpznj571GKigNsEV8czAOzlwTzebj+qZAjefUy
HU17ug8JfD3z58aerZMYmXEjzQKtxRxfdokW2ofB7soo497gSAIjnnfheHdg
4wRXyOwM36Jjw4VUjt2U2KTGCUzQrddZFrp4ZVcFF.aAjP+5tZtipTJIfPoQ
ttk46IQwGBS0WJApU2qEbmmu4Xm1Qv3G3Kkm5xG00Mb0S08W9XjWwVb9xklp
XymwMqMKy+OyeM+KUnDdZAZ+rSGFOKzsd0Pqe20C1K18kBGiOJIAAKWoZY38
604Rj754EQEo4Yj2PeG+1Uo+QyLVjlYhy2lU7r.ii.qncqp22l520nY0V8zI
svvgVteU9FRTVB4gpW7l4lhuYLYDpcL1IfjjkMbp1QRLpamAeQZhhCMsLZ8W
MqI62KAdjhHHvRCfjNrvq1MDoIBRBXCRY9Wuz.UNiqfxC5qVdnIWAHZXjKvN
eaQQd1XrevCZlBAqkpWxZN1oYxunWiztDcfboBTVD81rUQwesrjHsZ+ws+c.
Lk5WiopOsKV3Yu.hbwcaR3CvgxK1vhl1qgDVDdQGUvkB3k8nHGTb74mpSPDB
NAut2c4lwtX060KpBhbO3hVtynJvxc8qN0dsL.hXWgB4rtzRLjcar.o89qP1
tJIp3v2rE4gd6jm15+gYOVc3iPz6yY1kaoQp6IGP9zSQvKtqainR3u2ll+mK
Ras.58rR5nDl.zEqrqTTK6sX.LGr8qZWs+yd5Ss+3UiuOUsIe653F3V+3nQd
B.IlMEoY1Mip0b36MmOmljXxZSZKSSVkWlanFBjO1oaCJhzb.PRDblhIFZXR
A.R3xRp8r+tQjFUDU833NHIUciHvDSTHZIApZII.HovkkJ+03CfHlDcHMj7l
wPERU2WpAcbZ94GlD93hIMDLEhKlfj.WHO+vDGYem3Lz2ABSHG2wf56vqth.
RsNNt9NNn7S3lGmG.gmD3hIen8oblgINt8XxAkK.2tm3PaK.uTALHRbbqrv.
olvcMTLHcpHwM6jsOa4Pc95iOlDCgIM9XZvEsnvGSCtpEA9XZHMNC2tmXP5d
JDeHMnqC2Mu.z9ofNhFhj9cj2ku4m27+.Mt0nqC
-----------end_max5_patcher-----------

Step 2: Installing MaxMSP External Objects

Sometimes you will find useful objects created by the MaxMSP community that you'd like to use in your Max patches. There are two ways to do this, you can add the external files to the same folder as your patch or you can add them to Max's externals library. If you want to use the external object in many patches, it's best to do the add the object to your library with the following steps:

- Navigate to the MaxMSP Program Files on your computer. Find a folder called "Cycling '74"
- Inside Cycling '74 you'll find folders with the following names:

max-externals
max-help
msp-externals
msp-help
...and so on

- Copy the .mxo file of your external object into the appropriate folder. Copy the .maxhelp file of your external object (if it exists) into the appropriate help folder.
- Restart Max, open a new patch, and type in the name of the object. You should have access to the object as its help file, just like any other Max object.

If this does not work for you, try one of the other strategies outlined in this thread.

Step 3: MaKey MaKey and MaxMSP

The MaKey MaKey is a USB device that you can clip to anything conductive to transform that thing into an interface. Essentially what it does is trick your computer into thinking that it is an external keyboard, then the things you clip to it become keys.

You can read the keypress messages coming form the MaKey MaKey using the key and select objects in Max, just like with a regular keyboard. First get the MaKey MaKey setup with your computer, the MaKey MaKey website has great instructions for how to do that here.

Then wire up all the pins on the MaKey Makey with alligator clips (use jumper wire to connect to the pins labeled W, A, S, D, F, G), and run the following Max patch. It demonstrates how you can use a combination of "key" and "select" to pull keystrokes into Max and sort them. From there you've got some bang messages to work with, you can do anything you want from here.
<code>
----------begin_max5_patcher----------
678.3ocyW1saaBCE.9ZxSgEWyP9ev6t8bLUUAIdstiXhLNcoqpu6yXHoIcI0
jHDEj.DGLb93ylClWWDEWVuS1DC9N3mfnnWWDE4C0FHp+3n30E6VVUz3aVb4
VqsVGmzcp5s1Jo09xFY28HtrP+PL3t9Suovt7Qk9g6Mxk1tVvxYoB2BQj.PD
dJLAPD62d3BUq7Iqt7ouwD6Sld6Zk1kNOHn2C1AwIQ2XjMRssvpp0mj77zLW
xyyOjbX+FvcsW4aKVztIYpjAA9QdBHirQTFD+yNhf+x8.MikxgtE9P8P934g
1jOW7.FlRZe6fNTOPFQOfoyEOP3rTra3.BOTOPGOOP3hYiGP8uhNDEvFQEfH
yEEfYzqrDIe77.lkOW7.RHtxRjnQzCvrYiGnzqrDId77.hgmKdHWjhZ0P1P0
.b7zff2YA3WeAR5fqORup4QdCOKZ4eb4YeRrxcdFiajUNbAHj.Hxb6X.DD5V
wtUBffA3b.V.HPWU2OWDIi+9AHWguDHGy8i2XnDW0fya3CyE4W0ZqtXsG93e
XTEUmW83iZei5uxtftzc1tD7szmrccozbQspz1C1HrI59X.yOf+RN.G1AaJL
t3Vo4dotnrx2B3mMzbP5AOdiX+s7kPF6+2EVe3N8IRYWVenqbHD7ZTD8HE4S
dbkR+w+90iea7S8VS8Vyx8Rnevt6E3COCqjMVk1Wn7nF09uqf2azipUqj5i4
dkpocHfW.vy1CNTdvmjoyiCYxngL.ZnhIEGTn9J3jhCNDN3IEGRHbPSJNzP3
vmTbXgvgMo3vCgCcRwIKDNSacm7P3jOo3HBgS1jgCZ.Uku0xNcePsXylmkll
9aoGD2TNdp1zdHOwenR2cne5MwF4yp8sm3iTXbyev5l7vVS2m+2kyiWzlm2V
7OfiVWSP
-----------end_max5_patcher-----------

Step 4: Write MaxMSP Patches for Monome / Novation Launchpad / Grid-Based Instruments

The Novation Launchpad is a relatively inexpensive grid-based controller that's super flexible with Max and Ableton.

I highly recommend checking out the nonome monome simulator to connect your Novation Launchpad with MaxMSP like a monome (check this thread for updates). This is a really awesome solution because it also allows you to access all the max patches available for monome (I think there are hundreds at this point):

- Download the Launchpad drivers here
- Download the latest release of nonome.zip (find the mediafire link) and open the patch in Max
- Choose your Launchpad from the drop down menu
- Open any monome app <-- that is awesome, there are so many to choose from!
- Set the app prefix (press the message button called "/sys/prefix/something"
- Select LED color from the nonome dropdown menu

Below is an example patch for creating your own matrixctrl-based Max patches with Lauchpad and nonome:
<code>
----------begin_max5_patcher----------
703.3oc0W1zbZCCDF9r4WgFclBVF+Ymbo2Zuzo2axzwQdSPsxRLVxAnYx+8p
OLDRwPgVvyzY.azpUx66iVo077n.78xUfBidO5qnffmGED3LYMDz0N.WWthx
KUN2vTYcMHz3w99zvJsy9mPsJnBomCHQYMftEuV117kRMc9mMs+Hz.2hQZIR
CbNRHERiS54kZyElBY9XG5Bq+VuTfnBUCJU4ifoK4XjY5PzRApAVvKofeXKY
54nklYAdBZ7OXqeb1OfMQHmI.prU3ByzNih1ZlfCZmlHuZT1p2XMry5CRgVw
9I37LZxFytHkId7aM.U6AXRQgoaTZh8JweK2XBcW2XXUNTIu+6uq.uyzaiaW
OengUxw1NdYzH6kw+iqJ2bCZQighdZceqVKEV7RkBCUrqFxt0hdwUz0DWooD
Kglk44URnqUb+7J8xxKArzLq6gqFif.zz8xbm5fH9zoQTOznXKL7NpWu.7j.
iGa9tU18vpBGphycjJ1CrrCPpjAAUsUFlPA1S.JOLL7LXC4LYyQ4hMCCE42p
kdTrbgyf5NaZOtLUsVYSWdfspmDodwTzUGSIjY9sZdDEG52wc.RQFpDH2g7b
IsjOWpzl7n7yIOJ7n.pGJDm6nPbr6Fgb7sQwCBELYJKrTX+TE8TNTswepjKa
7pHbRVgYEjLt2eQ1QMC7dwM3kDty44GBuYQCSAPCCU3qYUr3nzIIiQEYV0l3
HPTX+ZNYXjruJ+0U0jHWAoSQ0W38Q0k5F1Jptg+WTNduDZNSosEec22F8Mxk
tgkeX.LqqV7L2IpQ9b9nvCbjZz+wJM4bDJYWg5bv8Bk+1+vv8Tr1eq5Uli.o
ahWO1LGss8wTAJMSTpYRwN9j8Vmlypp.wtI00rpERlP2ECn65co3TCorSIlr
0NFvXx9pM+4XJYXiojSHlHCaHQt1KclFuL5Wi5ZouC
-----------end_max5_patcher-----------

Open the patch and press the message button labeled "/sys/prefix/yourPatchNameHere". That sends a message to nonome and updates its OCS prefix field. Now message coming in to nonome will be directed to your patch. I used the name "yourPatchNameHere", but you could use whatever you want, just be sure to find all the objects that have "yourPatchNameHere" in them (there are 3, the message, udpsend, and udpreceive) and change it to your new name.

Press buttons on your Launchpad, you should see the matrixctrl object, labeled "buttons", light up. Now lock the patch and use your mouse to click on the matrixctrl labeled "leds", you should see the leds ont he Launchpad light up. Try wiring up the output form the button matrixctrl to the input of the leds matrixctrl, then press keys on your launchpad, the button you press with light up.

I copied the step sequencer example from last class into this simple Launchpad patch and wired it all up together. Try it out for yourself:
<code>
----------begin_max5_patcher----------
1680.3oc4bssbaaCD8Y4uBN5wNpND2A6a8anO1ISFZJXYlPQpRBk3zL4euD.
TxJJhffJPvHoiGKZAJSb1CNX2E.q8WtawxGZdVzsL4OR96jEK9xcKVnaR0vh
g2uX417mKpx6zerkaEcc4aDKWYtmT7rT2NIAlTVWbn858aKqqDR8uD7kFa1K
OzJXn0c4xhmJq27tVQgz.EN+9zUIjTp4h5UPeSIuc3WobstOad38+NL6PW9X
SsrNeqPeq+rsLu5z6zU9u56.f8OMSyFrH+7NgoWWtL4sp6706tS8xJGYjZwm
5Ax2QH6xK9PRZ+WiwJn4xJLlhHvDMqvHpWgoivJrHkU1jKE9QiLvF.8ED1Ja
PhT1Xe8QUR5EYEvEYEz3rRFTSGLiFIyJqf8GqTVKWt5atbUzzXNWJpD4s9Q1
fvZFBxY2STDkUeKnWacirYylJwLjFVrbBSOIAfzFt1oJZDoA6n6ic4s8lsTz
9NQc9CUZqwpJvmSO5631lDbZpeF5GH.hl.nV8ex7nGiGxq2bczxC6kxlZuN5
ywJiGSLQRFw3O5Xvi1xHCwchpdH16+Czm+.JAmPRnIrKZxYWzjylVvSoJaF.
Y1FwA.OOhu55u5UFtnYec+72dJ9xzJ4hzJ1A+HZOnLj04Q.uGi4v2dOHyFgr
noZ+15Dre72PG7wfz5OSH4wB0Pe0SXaZZg5oj6QyfV3wOsv7CsjAQtSKYwOs
P7TZ9XsaFmnEVZ7SKdJWFDf5rZA.ieZA5GZAymAs7KU18fT.PYsT3wDasjrC
Nr426SCkaV.mS1IE8yqcRY76YDWMT3OuFJAfcW3RhhEl9a8S27jibPJmb+KC
yHqaYCg52zo8pybp2XDb5IBBDTu5sQbhSh0M5ziRjL.1cEBLlUHdJJOml4t.
A8qu.gQH2CcUgf4wrBwSK8lklcZvS6RDb1u9RDxLhxfYwrBwSqqjLifLXZjJ
Ppajh9dXFGuXpk4LFupLhdeHH.aRDzUDlwimKP9GDJSWM8HAMxTjKa+vos+T
sh..rlHJxiar4iUM45s1z7C2nUXi75gn3zJrgzeBN20W9ZFKmgaKX7voLom.
Af1OCVvs7LXc3xUwpEMa2JpkeGs1Coc6kIO11rMoPTU0YkQercyCZWRGMImc
UQ3FNdXpZpUeUvzf3qxER43rwaEwvIzSIFDz5hoyBBwLlqoQl8UUVKzmY0Yt
m9QxFLK6DVwTOQpomWjTnw+lkB7zdHmwcdq0AQ64SoJ7LekjrYmnHlbBoVIj
W+SfIW1V9bgrsZFwsrj9CgBNovXfZ.2a88RjKpG3W0FwUU1oC8nud74117IS
T03TVXJbfgZpxd0HBR+evzDnlH3fooin8za8XAkAxLG4jYcjVqmrXMc319Gu
H4McRwt+R7O6E0Eh12rqsm6lAEAmpnDwFtAZxKlMBEMyBuJyBE46JoY+5dNo
PT9QQBOMM0Om9ggaLpGygWNJ0P8G030ISuo6ycJ4xikOelHxS4ov04oLjzOv
TwufQJdMJ3UlkFW7zIpWmT0TjW8TSmrWCwmiFxRV+HB2TRiloV.hUYDd1DjG
KJ9VwNEKblulJwZ+La5.S.3FeMXaLAygMwpOi6lVyyN8dVF.mBVcwe5zkSbS
0WisNSSwhdyVx8fe6L1PIzZa+iCyxJ8c9uFICxDM+vt+MhWFvMN6W8M0KE9r
+3bz.W092xLcM6aKNzMGxOO4EnuVzIKqykkM0m7gTS.N4C8T450h5Ssf0kcJ
iRa2WdLxU7bVWcY7nbMEH7nxyXR7.hK3nFRAgANTWFsHgS8vbQMGP73xvEKb
p4y5pQvS3jym0UiL6Jf3I0E7vC2z8rHCO7HCOrHCOfHK5UTE7h3xnEJf3g5J
dBSzTUIHEU7CLt3GbVbwOXdjwOrHCOz3Z7B4h2YDLr3A3BdBy3EzE8i5+iBw
DdBXzcHMxviKqt3LR7lhGrC5YMd.gCOSxOjvhGnK3IPiWnHSOCbfennvhmoz
yTXXwCZB7PXQFdnwk9gfhL7.iK87YIY+5im.6+YJ+gXVjgGZbgG.It7+.B2t
s3zYoDtzmAbWRGCDV5YJ7nJqxPwOQ1xK.QV5X.XjgGkTkL0gWjFV7vlJ8vrv
hG5T3IviW3ovCKr3YpvEPZXwyj9CCL+LU5p.TXwyj9eBW5yt.GHNpfipLiup
nol5JIe2tOJZ6FdlZjrba96ME5Dck9sk0l2pqilkshOVd3yq+CqaYdawSkRQ
gbeqo9ddlSWdmpe95c+WhiKpK
-----------end_max5_patcher-----------

Attached is an example monome patch I wrote, use the app prefix /arp to run it with the Launchpad (press the /arp button right under my name before starting):

Another option: Lauchpad Abstractions are a set of objects that can be used to send MIDI messages between Max and the Novation Launchpad. Download Launchpad Abstractions here. The zip file contains the following files and their associated help files, make sure to include these either in the same folder as your Lauchpad patch, or in a folder where Max can find them:

phi.lpad.in.maxpat - gets input from the Launchpad.
phi.lpad.out.maxpat - manipulates Launchpad LEDs

The help files for these objects are included in the zip file and are extremely helpful to get started, though there is a bit to read.

Step 5: Xbox Kinect and MaxMSP

The XBox Kinect is a hackable depth sensing camera and gesture tracking device. Since the Kinect was first hacked, it's been a popular choice for tons of interactive projects, and eventually the Max community developed a bunch of ways to pull Kinect information into Max. If you are going to buy a Kinect, be aware the the newer model 1473 does not work with any of the options listed below as of the Sept/2013, the older model 1414 will work, also make sure it is called "Kinect for Xbox".

The most popular program for connecting to Kinect is caled Synapse, though this program can only track one user at a time, it's relatively easy to set up and it communicates with Max through a patch called Kinect-Via-Synapse:

- Download Synapse (you may need to install drivers here)
- Plug in your Kinect via usb port (also make sure to power on the Kinect)
- Run the Synapse app (it will crash if you do not have the kinect plugged into your comp)
- Open Kinect-Via-Synapse.maxpat
- After starting Synapse, don’t forget to stay in position (stand up and put your arms up) and wait for skeleton detection
- Download and run the Kinect-Via-Synapse maxpat to pull Kinect data into Max

Once you have Synapse doing skeleton tracking, click on a joint in the Kinect-Via-Synapse Max patch to start pulling in info about its location. You can toggle between x, y, and z coordinates and you can also select the coordinate system you would like to reference to:

Body is the distance between a joint and the torso, this is good if you want to look at a person movements without an reference to their surroundings or location in the frame of the shot and capture specific body gestures
Screen is the position of a joint in x, y, and z coordinates across the screen, measured in pixels
World is the position of a joint in world space, measured in mm

Double click on the object labeled "User 1" on the left side of the patch. This will open up a subpatch that tells you where all the kinect data is being sent. Remember the send and receive objects from last class? Instead of writing out the full words "send" and "receive" in the object definitions you can use the abbreviations "s" and "r". For example, if you wanted to grab the left hand x coordinate, you would need to create a receive object "r lhnd1x" in your patch. Here is an example patch that calculates the distance between a persons hands to apply a low pass filter to the looper that we build last class:
<code>
----------begin_max5_patcher----------
2585.3oc2b0zjhaqEcM8uBUTuEujpGh9zx9UUVj8ucY4To5x.BZmwXSYa5om
jJ8u8HKYCXveHXDFwLUAziLt8QGcum6UWI0+8SSlNO8cQ9Tv+C7YvjI+8SSl
nZprgIU++IS2D99h3vb0Wa5p3zjcal9r9RxeLJIVTntF5Pio6JpaEW051vhE
uFkr9kLwhB8SD4QlAeFPo3xOXvx2wx2A+Q08DsT8LSm+meBCqelqRSJRB2HT
W52xhBimt+QjIauPj8hHIbdr5a.O5txi9KUanxmmtYMPK91VgFRk8uvhoOCl
NOLY8TveT909mmdp7smMjhRDeUh3ZPUHdW0cmFmlIx+P1Ag.3L+VYPRqLHpa
FDG3oXPhhH848wfHxvLnorTdz5D4ccUzi3uVFt3iV6+3V6+vt6+DOekoCMPQ
Cr52as+ylZuAy7EgwB.EBmIGLAD4KDT9uYs1s7tzg0JGCBS06PjfdGWw1ab8
5FQuAZBDn+vZBAO5RB+L3SnYWfmvvlLXsCgVOnKdy2dFLZt453jcalKxriUC
kpbT3FXzvGGilnjuWSFKROXehw7C8AgetAhNXBeX9g7nK57I.ztZNn.k2GAO
i0STJ2PyocJICj8ZxRz6sRKvKNoLphIPXE6vX8YMwt2wt6jQhsHi32fP5M1j
mqRHhEhn2Df4a2XGNg6ELiyJSxqjN3d8RJtJqjKhkcHP.GfPrxTfkuvxWD4K
p7km7EuU9JnU9JnGaHhmRewWmLLF0aNwVTtQI.+70+48O7eM0wLH7OB9njeT
6VjeQ7sKv+jNLog0jVPeA2HA1ybqhXN+CqNwC6j.PfbhukZXTXvvY.DPrKIc
U7wFQdd3ZwYDBzNDhOTO6UB9.ef76XVXn6sndWjA2RoGB8gyvLSoCrqRGd1h
Nz04zL1f3prAyVrADqy+wH5f5pzA0RJodp9uYjAzUIChkHC4DELV2fG3prA1
RwT7YFKav8cUx.YIxfdAjA+tOqIKlDOBizIYoK5x.E4j8XmE+u.7sUMppoMr
AEohi+gqx308+pR.OfYC5w1rotHM4ga1FK9+hj0EuZmp0rmFopB0fzyJry50
b2kgWjtYinjkOsfMeIZKnHUZG.gax60DaU154JtZF7RWVVeFQkaWUkgQ8a04
cE5z1LgVIUXqY+4eb2VuZBcEcxi4r1HaCWHlGlAxKByJ9k7hzs2JCkf.cAD7
flXmfFE6jhz0qiEWf5auYxR0VD5xURf0u25ZADXhFq8pER+0zkbIouhGlBz0
sk06VYfwseYacypKVyJZC+9qtHi4pUWrKEjhcYIfzUq.wooaiJGGtMxGTheI
w4ohIGz6BsQuuAYJIBfkByP8gy16PQI8EjgRc0fLJBQmm1sx5fQ4GrN7o8Zc
PFEqiNi3dCCwx4bcHHFxfXrTzc0MwRdHbJSU.op9b+kIf5rkSS4iXoBmT4LX
hnAg6rYlVlPJHr.TDsQ.90NDTsgzQ.Ra.QTyyKn2rVH2WwCYv.PTN30v3Uf7
sBwxalRR0za3AFHjPf2WgjYVZcJ73dJKAdvvJIXmcZ+HPgHNNGrNKM8MQYA.
1FG9MvpzruFlsrziJIMaSXbSCn3nDwhzcIEmvb10ph4qc0f3iLqJ2.qsRwd+
HDexSl8eYW1iaP3I7O3kzmipRPAZPM8Q9t5NgJZ8G1olAbrWipH061kixbiC
0QGrxVP3tkQo+dwtUqrS8rY5JHP4JYBduY06gsN4nKnvwvSjUQKU7h7WYTr3
MQVdTZxQcwISC2t8nlmbzsTRl+YZ1QmUjxlhRzMg12Tl3sn56mru0vLIIUHY
ncY5N369dS0WTN.9T8sVyfZhSMYYOHSun.zCDnbjdcb5huHVdjvsjP1JRhR1
lIxkwWBKp.w9KuTrJbWbwKsSmMu9pvEhNu4VGklLccVzxzjRPz3NKat9w8YY
rCcDji6LpuQR31VtYY1jE6xmGlURpUUYCWewhzz3lWZ+3nzSHLIZSXgnLMT0
cA2+KMZy1rHcDy8soKh2q4KxRiia7qRek2Z4JKkC0KDeMZYwqMBrVdE4WOZa
8Pvz8bzxn0h7hlsUDtNuYKMNweGaCdrKdi1OwUW6ZT+6qKO5tSBn6DAzEMWu
wNY0uuenriC+ip857dT8z5lURXUdAWYesgr1okIMYYaKzjEYDBTMmMRkcM5r
Bb00YSneMuNSRxRjlpm2Ia.6jMP8yFL8gyfZl4A9X.zQMyGACnakyBwmnLMB
7MiNP2auEoDb9qoEe.1uAi6L0wK2z.wzycfqOFrjg7SXnq2QoOypiWyeKwoM
S99j5CImeF3+frOehY5ciFUYcUsj298XcAuM7ocoxdLO+4CmIpa.MpEtOeqm
z04xz8sJarCUtDYMrQQ7v7N1rJmM8mKfx5YQUuXJ87Mvxs2FMJYU5GfMe62O
dQStDtOX.qUr9.OPz6YCLeHx26VZt9bo7Vt5y8MXxOzb8LGAQ3bQw9AEvMPK
lR0KNrd+GEvGRKlQeDzhaVnxSXTMWFqxpF7e2j+SFYreVMHuhrp7HGI+fPC5
BvfNQF28wlRGik5pv.JKLQNP5cjBlua0JCEvs.uVEHj00BGb17XXNAs1iXrt
P5FHGSt1Pg5o6ff5OPzg3LzMxu+PguZTevQPYMSrMtrTQVWRkfwGVKTs0XuY
2RdDTT6mICWdCRu0idfF0Gi4doQ7C9jDzZleWofMfOONPutPD8Ltf9Cl+6MN
ErtSv8PEVKmEZGETT0EKud6Ded5trE0OypI.AZ1WWJxKhR1Wu4OeX9lm7EeM
Z4xl02UWRz7xT80kx1HqjKExxjfAdF.Ypuy.4xLDMilcGHiLDxtCKS8u.Hid
rfLwcX4yHu1Qr2CGhawK8dAYro5EtCjQlpwE3VP1HKC2QWFQLjlcHKC7iGjg
ib.6pL9p28.SyCeSr7E4SPlo5KgEEYQy2UnS563M9v26h7O7lH3BV46VAQOO
7tdnqiSmGFWsUO1eusr.6OcfDuvMOyWkz6pzrMsuAhXstEY7FbKxvp9ixhdB
t9G+WEU8LY12YNYBMssLpSW7ZXR5pU4hhdOLRlTh15551bmFo.WyISn4tS8V
pXvy7RBZnE0Ud.M79O283bWiyFKMFOF.Gz3AGepA34DN7lhGhigGrigGjigG
nigGSfyngFdfawNbeGCObGCOLSwCZbviIpOm.5aJdLQ8gOdQu7Lwd9DPeSwC
ysR1P8nPCfmQFNCl7y34t6Yh0iSglwyTlYRnK53I8vLITAa7BsyLwUmMdVOl
.GpSgFznEFk5XxxTpigGrigGnao8PLZR6vwCOb2Z7xj4r6OZnA66VVOHWCOl
LbgbQ7LNQKPlnFhGOucjwYMOR7SYfa1Pt6iWtFJ73MDdHiKd3CgG73hmAkmQ
iKdnCgG33hGxPSCLXbwCdH73Ot3YnhHvGuY5fLI6PzHZOa.btV0G8xecxQDu
DHmbzvO4Xge9QBuqiCt747OO8uf5c8kB
-----------end_max5_patcher-----------

And here's another patch that watches you dance and speed up or slows down music according to how fast your dancing. (it measures dancing by looking at how quickly you raise alternating hands up in the air, I was in a rush to get this done so I had to pick something really exaggerated, but you could definitely adjust this to fit whatever you wanted)
<code>
----------begin_max5_patcher----------
2945.3oc2cs0iihiE94T+JrhFMZ2Q0lFeEXk5UZeeeadbznVjDmDll.Q.o5t
lQS+aeMXfPR3hSZiiS+PBoLgvm+3byGerq+5kYyWl7Ud1bv+F7afYy9qWlMq
rohFlU82yluO3qqhBxJ+Zyi4eIY4eL+U4ox4eMur4T9Jd3abvxC6qOW7w8gw
Q77xqy4TiIGyqaEV05gf7U6Bi29IwOStDMtT5BW5q.jyBmWAtrh2K9L32qtl
v0k2XAX9WLV88bSRbdbvdd4o9uogAQsOSV3eVdFHZQMdjfI+8Cb4sc9bvuWb
l+9kWJd60uOVIiGutWJA1Ik3zOkfwkr.C6KOLHk3b6Txczu2DkHf+Mz8Pi28
bJOPcFp6Q8Fu6cHHUzdNO8S73fkQ71rqpRCh9WP97WAyWFDuUqhFe.3rnSdC
cqZJU7F0kTb.iVPGf2znlhjatKNYBDanDUDaHO6hM+hnGpaAGXofCAMHyg+Q
Uvg34offC542dCSyxMDZoeHLYHhi3YExM85eNRzq.9t.HjBfNNhWHwKr3EQ7
hId41Io42Io42Oo4gjFlkVoQH3PrFDpOVqTR506+3cR3G2ujmpGE0ZpifGWQ
E5XFE0v3oQM8y72ug3mIiSZPIo4OTTAXe8ItUQLWePqdA0igLeHqbLFXeEBc
xGqWR5t3i87rrfs7qHDG8PHtdRS5P2S7Azqa9vC9nGzUejgqdHCg4e1BDUU5
.YqzASWzAxScgCrsxFTMY5PD0nqxxFDakMHZhMHdKTlLbrUx.qIxvwWcyFt9
1JafzCa34BU1pgqmsRFPMQF3afLbe3I0TiwvCQNT4nEUXz1tzm6f3+.vSSC0
tg1b7GOBUWjcLV6IPrAwTQrA9bK1TOGJYA6ODw+e73s46zyjozPiR6OPYjb8
N2AObyvqR1umWvxWlulOGd.jmTjCTm8YCJhsIc6xRtZgysNOKdX+xX6ftkJc
vgk5XtFYlV5MdVAUnoA+IFEbqtMtzGUedmXTqUF4PvJ9xfTPVdPZ9GxxSNLU
BJ9tx7GPnpHm.MhbRdx1sQ7av56f4GwQJQHmRNrS86clhbeUrwpuTgLbJcw2
R3qnwo.YZakY7t2IIvU+Ys0NStXMqHE7GN4hTpslbw9rfjeLMFjrYCHJI4PX
wygow7AAQJHNZoOYe5fSixi0ISAQ.zjaFBisnQgRlR+9bxPH1pSlRBQFm1TI
cPw3SRGdCOIaXiHczqG2IzEqKCKcAImywQ7wRfOT0DcEHlHJczo97voIfXso
SqTGQSINoRYPEiFXWqMxzh.RAA4f7v8bvG6wfpNLc35JEfPkLk+fQsferFOb
VPAgYfcAQa.YG370SEovpFdCinfgDryi0PxBMMMELFpTRfQF2RBxZG1ODjyi
hx.aSSRdiWj.fCQAuC1jj9kfz0EZTwIo6ChNW.JJLluJ4Xb9ELmd8OQHkDrm
aKoJgwptYX1OBtmXhf+KDinHE7Ng9AOi9tNx3S7THi9POasLkC29M8jw.WAl
amCoAqQYhFGYnnKDKtJcxJG.AGWGl7q4G2rQOrCUNdYBs7f6fwzyzqlSaPwS
qHiJ1P7CEFweimlElD2pKLadvgCsZdVqKofB+ijxeH1qMMEFKaB1zTJ+sv5q
G2zZPpfZxE7xwTY25qdr4xSJdr8R8k1j9ZZo1kORVe3xjN3PNQbhmvaiRV8Y
95VlqEDwAdbX7gTdlvqRPdELZN8Z9lfiQ4epaZ77yuIXEu2KtymNyluMMbcR
bAHN6JKZt91Uz2jNNZ2YJ+FwAG53hEwPleLaYPZAsVkaMT8IySRhN+TMOIEZ
.Awg6Cx4EAeVdUNM+ng6OjFJ8S1zlL0c6xVklDEc1Ok7Lu0wYVKdXuh+kv04
6NycZwYDe8vC0OBl2vQqC2xyxOus7fsYm2xYqRk1RgsUsOq8gTw6XMZzwTtz
q9d+AHzaAy53JKOB4yZ3Uo54pvOaig9kv5KdgY01.qTntSRqrm2Ka3zKa.Gl
MjJyTo0OZ868QEn1.nmrG25aTGBYo3iF4B4cdBDM7JGXK12SM5.N2.c1gzVD
lkx1kj+MPSk11aTT2tnQULkP2x3F7viomPg2uhxPhUsm8aMwomGG5EYJQLRE
vOA0OehnkAjVUzExUHS6nS6s5o0LepWpb.wye4zppZBnQog6qKBiqJwsmFox
ypUiawrFRIOdH2dJY+dWlHJPYCL8h2LkdcobL8xngwaR9FX+6+Z6oO3V3d+Q
jVQkSvBRtvbfH2wHe1TJt9Zg4srxiMMnxGNel8LfQ3LddyCEvDXKlPjSSJrb
jw9tiYKtYsJZ01hOOkcWvnRtLpLpZv+Xe1+TIg8qxF2cDUEC2x7CDNpJ.0wJ
h3dH1TnXrVlQBPwv0y.BsiDvxia1nnAbMvqUNBo8UWTWMNFpUPq7+bcvpucG
pzNpLRFXUzUz526M5JpgBRWlmbE7wfuW+6U8bG4AHYLAA3DYLqJseudQB.Mf
6hT9gnhbBoc+DX4B2StRrjpXCFxN9YvMwvLYv5IHlcF4DMhoiRinm7Q9HcD7
cEW4H57H+RFstRLb7FMn9INtx9iZ+TpTKFZcOYNrrKVb9tI9rjioqpumUipC
bdecMOKOLtIwx+1oAQewWbW350mmHWYtOyJF+hLm0JIkbqPVDYOfo.jIdVCj
KB6UMZ1dfLTQHaOrLw6FfL74BxX6gkuh75FwrmND2gV5iBxHUsWXOPFpLMCs
KLqDOSeRwrcXlChUDyVj3L54CxNFNJipvTqqtg4YAuwW+IwcPDd8mBxySCWd
LWFoZ6By36sDDFuDGtg4kuSPLvMuua51njkAQUkhRy01wz++xIR7FKomuHn2
MIo66trlncV3NrwKbmp8IF4nx8Zkpmpge0zYtXTXcMg1yWsKHNYylLd9fKPJ
URVdcF10Z8OEtA7SgvO9QGvO+yhOg.EeLeGOVWE0c0zoI2HKgzA2hOw1ZsyU
yRPI03nmJECAk60JRRwevxnCSsTpYaPNWWRJx8MAYURL7NNG9gWxoBK44B6o
ZQPnpmWrTwJRGHs98N64M5kcubB0uXO3j0gFM.HfGkw00pECgokyjCSlzI+A
217PjejdziHxrqK09kUvOizSOGOAO50YmwiodeA8.DiAURux0cqNe7UMUInA
WuIHnU6daRHnJQB03GGamefM1AclD6fH0MCB8sax5+TT6wJPR2tJmbeMoZ9H
gCuiFCe3qSPctYFW00cQJrEoxd12KiSAo6hWCeWOaNNUTGldJBqdoNaMT6Tw
Oe++yW3l20KfxIOkJqcL1vbhNC55UaPWpt2ybTPYB+rqLUaTdhrIyNyjLdvM
dJa0uU16wqtkEHGd7wyIWS1jAy4AQ6KOtqpqxGnVFSYGV3me+UQZzeEqs6pA
yLzjMnhxa140VgjdtLO7UjzU4e2+rY4nuoE8r4U35DuecR2u5wkx3QA3fH1E
bbrJ3.8MFb7HJfmKjvlT7fsL7frL7.sL73XW3w02xvimkgGWKCOTUwCzdvSw
+4uLEdTw9yEfdRwiJ1ebMWvFLUzut.zSJdXJfGh4ddwn1UvgLUjmMGbn910i
KpJhyLyEsJUE2ETyEtJUE0qKHwIEOJ4tv0b3gnp6KCgGUBmmZtACRUw7C0bg
+PTQemZN6gDKycAgXY3AYY3wwt7ecVwXqTwiOovAqT1VLm6TrJp6XyI9fcsK
wYL0x3GUT2wlazEXUF8kAUuTYr6FCMHO6xVHREeWXOikJA0viswOHywOpnbg
LWrgHU7siLmwPnupxy1DdnVFdLm7LzxrGBcUchAgVDdf1E+TJjYH9Qkbs.MW
tMfpDbHzb41.ph+Kn47W.UIbLhAsOWn5PGAOdDyhG1X3AaV73NFdPlEOiI+3
AMKdHigGGyhG7XS0juYwCZL7XX88wR9iqA8WnR7yPCJOqR3g2IZjEQ1Eaw7E
.4hsV9K1V4udKkuusSdw84ue4+uJaP5G
-----------end_max5_patcher-----------

Another way to interact with Max via Kinect is called OSCeleton (works for Windows, Mac, and Linux). It works by allowing Max and the Kinect to communicate via OSC messages (kind of like a fancier version of MIDI). OSCeleton allows you to track multiple users at a time (Synapse can only do one at a time)

- Download OSCeleton (look for the cloud-shaped download button "Download Zip")
- Follow the instructions of the OSCeleton GitHub page - you will need to install drivers
- Run the Kinect-Via-OSCeleton patch, like Kinect-Via-Synapse, it's a patch that pulls in data from all the major joints in the body, it works in a very similar way.

To extend this even further, jit.freenect is a jitter object that lets you grab depth and camera data from the Kinect:

Step 6: Arduino and MaxMSP

The Arduino is an open source microcontroller (tiny computer) that is used for tons of creative projects and interactive installations. It is definitely my favorite piece of hardware to work with, and the brains behind many of my own projects.

I could write another Instructable about the subject of Arduino and Max (and maybe I will one day), but for now I'll try to summarize what I know in a few paragraphs. First of all, there is a growing list of ways to make Arduino and Max talk on the Arduino website.

My favorite option for beginners is to read information from each of the Arduino's Digital and Analog Pins with Arduino2Max (download it here). This is by far the easiest to get started with and doesn't require extensive knowledge of Max or Arduino (though, feel free to check out the others if you need more flexibility).

Setting it up is easy:
- Download Arduino2Max
- Download and open Arduino (if you'd like to learn more about the Arduino IDE and Arduino Programming, read sections 1-3 of these tutorials)
- Plug in your Arduino to your computer via usb and open the Arduino2Max .ino file (from your Arduino2Max download) with the Arduino software
- Upload the program onto your Arduino board (here are some tips in case you get stuck)
- Quit Arduino
- Open the Max patch "Arduino2Max"
- select your Arduino Board from the dropdown menu (mine is called usbmodemfa131)
- click the toggle button to start

Once connected, you should see the Arduino sending analog values (between 0 and 1023) through a0-a5 and digital values (on/off) through d0-d13. Wire up some components to the Arduino. Try wiring up analog components like potentiometers and light sensitive resistors to the Arduino's analog pins, and digital components like buttons to the Arduino's digital inputs. Then see what kind of effect these components have on the output from Arduino2Max.

Just like we saw with kinect, you can use receive objects to pull data from the Arduino's pins into your Max patch. Try this simple patch, it uses info from pin A0 of the arduino to set the pitch of an oscillator, and uses the output of pin D7 to trigger notes:
<code>
----------begin_max5_patcher----------
839.3ocyXEraiBCD8bxWgEZOr6prUXBPHqTOreGqppb.GhqL1QFSaZqZ+1Wy
XnMoEHzrTRuPBic77l2L9M14woSbVI2QycP+F8WzjIONcxDvTogIUuOwIirK
lSxgo4rlKEEYNyrCY9JSvoZXL7qFkE5ZqdUV2RzwaXhzqUzXs0iyc8uvcFZN
1q7i.2xmdlmnqp9MrDvmxU27K7hZetVJzBRFEF5OJFg67hKTF6Zp5ZpfrhCy
vcueUN6AvF3OqYKP02ukZgTY7QzNyPNqHhTGzUkS6ooSKeLqmTTrLKiJz0nR
S2AwqSVAWy1xuGo2PQFGusPiVqjYHNSPQ2wzafQxYoBBG88hbJ5mO+CjVhhM
fWI4vvjrsbltHwrDqsqTdLiyIZop1ikqWrrP.t0uqT0ZU5JfkdgPNL441QxK
LXujG1l8BaK6Ed7r2ayPCHyCrbBKkoMDKSXHdmOKVwGXE+n8HkVKocO+jBwT
pIS+b4Dr6RX+cPO3j4iBkjQyyIoz2QItWX.qqaiDgWigMt8v1OZADvKg3N.C
uD0RovxOdb2lB1oIZ0NkDUxICCkTI32OJI5bSIB5cFf7NFgsF8MFFc4kHbo9
q.U1o.Q44fntG75f1eDG3Y2x30oZh+.xWyFXNC5vY1c4dAtQpY9IRMdKBg1N
y6jY79JvLzGRHwO+A1G0khpOHhNeATQT0xInknG6Lb4w36i4zmGFwfpfnRLv
FDskBGP4Q6wqFzp67XB2TdazI87MgfoN22DaMxRgmJKY0.vy6TC37KYVjshp
FF0u5HGu732NXjtb.S7ed0fVJfTHRycXcOwxkn41yl2EmEdtKVzxzTN8CTrb
7SVDgescP4ylh6f9TQzXpeXS4IKFlTdUnauxQ2ob7mUJGbFzk+M+YB.dKseH
CkKKTw0KUcOZzqXNglqYBhlIE6OoEGLoMrjDpXeNKgkWlHg.t46EzW7rrOvw
Pmly.9kBNiC6rnGvIZzPSTOPyxQCMg8.MiWcbPeJb7GM3f6Ugr23gmnuX3w+
.IkVvyxwEOGkeFus53d.mfSDM1dXjsaukpxqVR.Hl942HUub5cGSyZ6qPSYG
E8VV87g6w5PTldzZSC5BksC6tnPykvL94oo+CLsikUK
-----------end_max5_patcher-----------

Other options for sending messages between Arduino and Max include:

- send and recieve MIDI with Arduino - once you get Arduino up and running with MIDI, you can use notein and noteout to write this up to Max. Here are some projects that use this approach:


- serial communication via USB - I tend to use this a lot in my projects. Serial communication is a lot like MIDI, but there aren't any preexisting protocols to work with (pitch, velocity, etc), so you can configure things to whatever suits your project best. Check out the serial object in Max if you are interested. Here are some projects I've worked on that use this technique:

Step 7: More Ways to Interface With Max

I just don't have time to get into the details of the rest of these, but here are some more hackable objects that are worth checking out. If you are interested in learning more, Google is your friend.

One more thing - check out Soundflower for audio routing between programs. It's free and works great with Max.

EEG - Emotiv and NeuroSky Headsets

Leap Motion

Nintendo Wii

Face OSC

Open CV

And so many more. If you like MaxMSP you might also want to check out:
Jitter - graphics and video processing in Max
Arduino - control electronics
Processing - 2D and 3D graphics programming environment
Pure Data - the free version of MaxMSP
Grasshopper - generative 3D modeling - similar visual flow-based layout as Max
Lilypad - an Arduino that you can sew into fabric