Controlling Max-Msp with The Captury


The following tutorial covers the process of connecting Max/Msp (short: Max) with "the Captury" tracking software and explains how use the out coming information.



UDP (User Datagram Protocol) is an internet protocol which provides communication which no handshaking. It also let you define which port on the destination IP1. Internet Protocol 2. Intellectual property you want to address. In our case it is used to transmit messages in OSC[[OSC|Open Sound Control]] format.

In Max/Msp you set up an udpsend object. It need two parameters: IP1. Internet Protocol 2. Intellectual property address and port number (e.g.: "" or "" and "1065").


OSC[[OSC|Open Sound Control]]-Syntax

OSC[[OSC|Open Sound Control]]-messages are build up like an path in your PC (e.g.: "/Animal/Dog/Dackel/Colour/ brown" or "/Animal/Dog/Dackel/Amount/ 45"). Under this path syntax you can send any datatypes (symbol, integer, float as given in the example). This message order is important. Because you can only find what has been sent under the exact path. You would not search the amount of Dackels under path ".../Colour".

Custom Port Configuration

Since we can change the port number on that we want to receive messages (in case you want to split up channels on one machine or distribute messages to different receivers), we can configure the port we want to receive messages on. In our case we use this feature to tell "the Captury" software where we want to receive any kind of messages.

In Max we can make this work by calling the [udpsend] object with following message: "/configure/port $1" ($1 is the Max syntax style for variables).


Subscribe to any Skeleton

After we have been setting up the port we want to receive on, we can tell "the Captury" what we want to receive. We are doing this by calling the following message to [udpsend]: "/subscribe/John-Doe/blender/Root/vector 50. 0. 100.".

Since subscriptions will expire after a while, we call this message every 10 seconds. Therefore we use the Max own metronome object called [metro] which will repeat to put out bangs and so trigger the message. The toggle [X] will turn ON the metro.


Grabbing the Bone Vector Coordinates

The [udpreceive] object work the other way around. It can receive messages coming from a specific IP1. Internet Protocol 2. Intellectual property and port. After [udpreceive] we can route the out coming array of information by using the OSC[[OSC|Open Sound Control]]-Syntax again. With the [route] object we can exactly determine what branch of the string we want to access, in this case we write "/route/John-Doe/blender/Root/vector" to get exactly what we asked for. Afterwards we unpack the containing floats, which represent the x, y and z value of our subscripted bone.


Using the Data Stream from The Captury

In the Max domain - instead of patching cords - we can send and receive data as well. To do this we simply write [send] or [receive] and a unique name, which serves as a kind of address: in our case it is [s x-coord] (s as the short form for send is also possible).

Now we can receive the values that have been sent and use them for very own purposes. In my example I display the data first - to have a kind of overview - to see which direction the information is heading to or where it is coming from.


Happy patching!

For questions please contact me: benjamin[.] vossler[at] uni-weimar[.] de