The Midi2json device works in combination with Pixel2Midi device to synchronise events across performers.

Here is a description of the information workflow:


Sheets as 'repositories'

These devices uses the download-sheet abstraction, which downloads the contents of a google spreadsheet to the patch. In a way, the online sheet woks as a human-editable repo that keep the consistency of the data across multiple devices that read from it.

MORPHology. This spreadsheet codifies the specific way the cue is rendered on the performer's side. The device reads (and stores) a MORPH .tsv database of the different realisations of a cue. Some examples include:

  • Use downbeat to mark the pulse, and the horizontal bar to mark when a cue arrives Perhaps 02 with the same cadence as the established pulse, and 20 for the extent of the note (as a makeshift progress bar)

  • Use two vertical regions (left and right), where left is the current action, and right is the upcoming one. The transition onto the new action could entail a couple of normal beats followed by a downbeat (or vice versa).

    • This requires a wildcard for the time of the previous cue
    • the flickering of inverse images could happen immediately before (together with the beats), or perhaps the region on the right could have a different color.
    • The different (derivative) image files should be named in a way that is eindeutig... I just haven't thought enough about it yet.
  • Use the regular beat to convey the pulse for each individual performer (perhaps the schrittempo) and reserve the horizontal bar for the length of the action.

  • Three regions (columns), the ones on the sides are very skinny, and they flicker to indicate that the performer should turn left/right.

  • Two vertical regions, one for the content (score, text) and another region for the movement in space, like turning, up/down... etc.

  • Two horizontal regions, one fro the content, and another one (above, below, etc.) for the intensity (dynamic, articulation, technique...)

  • Use different font siZEs in the score (perhaps font size is also manageable within polytempo, which would make it rather flexible) to convey intensity (dynamics + articulaition). Perhaps color (or 'acotaciones') for a specific emotion.

  • Use horizontal bar as a progress bar for the length of the note. Without warning, with two beat warnings... etc.

  • have noteoff as a category of pseudocode that gets executed when the current note ends.


Wildcards can be used to use contextual values. The maxmsp code uses $ for wildcards, however in pseudocode the szmbol ~ may also be used (~1 = $1).

wildcard value
$1 Action ID)
$2 Current time (float, in seconds)
$3 derivative action (+1, -1.... etc.)
$4 derivative time (float, in seconds)
$5 Time of the previous noteoff
$4 Time of the previous noteon

Time can be expressed using b and B for beat and BAR respectively. So 1b would be equal to the length of a beat given the current tempo.

Pseudocode examples

Pseudocode what it does
image $2 sectionID $1 regionID 1 OPTION+SPACE (ALT+SPACE)
before 3.0 image $4 sectionID $1 regionID 1 image $1 shown after 3.0 seconds
before 1.5b image $4 sectionID $1 regionID 1 image $1 shown 1.5x length of a beat before the action´s time
text 3 "Whichever text you like"
name Promenade
addRegion 1 rect 0 0 1 0.5
loadImage 1 url mussorgsky.png
addSection 3 imageID 1 rect 0 0 1 0.5
marker $2 value $1
beat $2 duration 1 pattern 21 cue 1
loadAudio 5 url freejazz.wav ? analogous to loadImage
audio 5 ? analogous to image


  • The color panel begin "color" is slightly larger than the text...

  • is it possible to write in different colors on textedit? maybe there are alternatives where this is possible, like [lcd]...

  • make also the url for the [download-image] object settable via clientwindow.

  • How to store pseudocode in the spreadsheets, so that I can more flexibly experiment with the morphology

  • I could write pseudocode using natural language for the colors.

  • Have (for every piece) a separate spreadsheet, for ACTION. Inside: pseudocode ("TEXT hola ue tal" "VIBRATE vibration signal" "IMAGE specify image name..." "COLOR maroon")

  • Use image_128.png as a convention for the COVER page (it is an id unlikely to be used, regardless of the bank.)

  • deal with the "multiple files in your search path" error

Atlas of Smooth Spaces

In this artistic research project (AR 640) we explore how to notate, communicate and compose space phenomena across audio-corporeal artistic practices. We investigate these in four disciplines: dance, rhythmics, choir conducting and direct sound. They share an alertness for and a certain tacit knowledge about space. In stark contrast to musical or movement notations, one finds that notated spaces are rather scarce in the audio-corporeal practices even though space unites them. We argue that this lacuna will be bridged by working on an atlas of space qualities. Rather than communicating merely the metric measures of spaces without the performer, we are concerned instead with emergent spatial qualities of smooth spaces that complement the performer, that exist outside of but not without the performer.


Brainchild is a trio which brings together three different, but unexpectedly compatible instruments. While the saxophone is associated with jazz music, the cello with the classics, and computer music with the cutting edge of modern music, the three melt together into a chamber music ensemble nothing like its individual elements.

SoDA node

SoDA application kit

This code repository also hosts the documentation and help files of the set of applications included in the Social Distancing Applications kit (SoDA), developed by Adrián Artacho. The standalone programs has been written in MaxMSP, while the message broker (AMEX) is C# programm written by Oscar Medina Duarte. The build standalone for the SoDA node can be downloaded here.

Required externals:

From the CNMAT package:

  • OSC-route.mxo

Computer Vision for Jitter (Jean-Marc Pelletier)

  • cv.jit.resize.mxo
  • cv.jit.track.mxo

Probabilistic Models by Jules Francoise:

  • mubu.mxo
  • mubu.gmm.mxo
  • mubu.hhmm.mxo

From the Ejies library:

  • zsa.descriptors.mxo

SoDA ecosystem

The SoDA ecosystem is composed by a network of SoDA node applications in addition to standalone components that add some features to the system. The local standalone components communicate by means of OSC messages with the SoDA node, and the individual nodes exchange messages via TCP protocol with the message broker application usually running in a remote server.

  • OSC messages (Description of the SoDA message ecosystem)
  • (Message broker program running in the remote server)

Standalone applications

  • SoDA node is the main application you will need to participate in a networked performance session.

  • SoDA pov (This application monitors and corrects latency problems)
  • SoDATA

Max for Live devices

  • SoDA for Live (SoD4L) is a M4L object that acts as a bridge between Ableton Live and the SoDA-node standalone.

SoDA node

This are the instructions for the installation and use of the SoDA-node application. The installation process will be different between Mac and Windows operating systems.

Download SoDA node

The toolkit heavily relies on the MuBu lib developed by the ISMM team at IRCAM. This a Max/MSP library that is free (only to register to the IRCAM forum:

SoDA-node v.1.5 Standalones (2021.03.26)

For Mac OS:

: SoDA-node-standalone-v1.5_Max8-MacOS-10-13-6

For Windows:

: SoDA-node-standalone-v1.5_Max8-Windows7

Note for Windows' users: you need to install Visual Studio 2015 Redistributable Package to have MuBu working! Once downloaded, add the Mubu library into the ext-libs folder within the GST.

Last step: in MaxMSP add all the toolkit to your file preferences:

Options > File Preferences

Installation in Mac operation systems

  1. First you will need to download the appropriate version from the Downloads page to your Desktop.
  2. Uncompress the .zip file by double clicking on it.
  3. Move the uncompressed file ( to your Applications folder (optional)
  4. Lauch it as you would with any other application and enjoy!

→ (error) If your computer protests that the application is broken / corrupted / or from an unknown developer, you may solve with a little line in your computer Terminal:

  1. Open your Terminal application (⌘CMD + SPACEBAR to open Spotlight, then type terminal)
  2. Write the following:

xattr -cr /Applications/

Installation in Windows operation systems

  1. First you will need to download the appropriate version to your Desktop.
  2. Uncompress the .zip file by double clicking on it.
  3. Lauch it as you would with any other application and enjoy!

Using the SoDA-node application (both operating systems)

Using the program is pretty straightforward. Once the remote server is on (which can also be done from the SoDA pov application),
hit connect button:


Then, the application should show the status "connected" and the toggle "tcp on".


Now, select your participant ID:


If we are going to use audio for the session, make sure to drop the audiofile (.wav, .mp3 etc.) in the rectangle on the right.


You will know that a connection is established with the POV application when your internal SID number appears near your Participant ID. You will also see a red blink at the top corner right whenever 'pinged' by the POV Application.


Set your volume level as you like with the horizontal slider, but make sure to leave the audio ON (the speaker symbol on the left) if we are going to be working with audio.

OSC messages


Quick message reference (pdf):





Here is the links to the live.device (OS-agnostic):

TransForms M4L device

[comment]: # ( TransForms standalone (MacOS) )

(*) In order to have polyphonic Pitch Bend, the Max For Live device needs to be used together with additional routing devices.

work in progress... - - -

OSC messages to & from TransForms App

OSC messages from the PolytempoNetwork App to the TransForms App use the port 22574 and these are the ones implemented so far:

TransForms app (OSC port IN 22574)