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