API for Co-Related Space Visual Subsys

We are using Open Sound Control (OSC) to talk between different subsystems of Co-Related Space.  This is a crazy simple protocol that was designed to replace the esoteric mystery that is MIDI.

Here’s the MIDI protocol, used to control digitally-controlled instruments and hated by musicians for the last 30 years:

midi-message

Here is typical MIDI output:

OkG7c

I+HATE+MIDI+IHATEMIDI120

Totally, clear right? I’m not a digital musician, so I don’t have strong feelings about it. But some people do.

Enter OSC, “a content format for messaging among computers, sound synthesizers, and other multimedia devices that are optimized for modern networking technology. Bringing the benefits of modern networking technology to the world of electronic musical instruments, OSC’s advantages include interoperability, accuracy, flexibility, and enhanced organization and documentation.”

So in contrast to MIDI, OSC messages are super simple.  Here are some example from Mark Hansen and Ben Rubin’s Listening Post in which the different subsystems of the piece are passing important messages back and forth.

/lp/content/pitchvol p v
/lp/content/pulse
/lp/content/activity a

Okay, so I’m designing the API for Co-related Space in OSC.  Currently, it looks like this.

Input/Output Protocols

The graphics subsystem communicates with the other subsystems via Open Sound Protocol.

Structures (cells, connectors, etc)
Location/size (for groups and cells: the center and diameters; for connectors: the end points)
Modifiers (wavy, curly, distorted, blowy, thick, thin, sketchy, dotted, dashed, degrading)
Variation (degree of uniformity or randomness)

Input

/conductor/cell/add,id
- add a new cell
ex: /conductor/cell/add,4

/conductor/cell/mod,id,feature,intensity
- modify a cell with feature and intensity
ex: /conductor/cell/mod,4,nervousness,0.8

/conductor/cell/remove,id
- remove a cell
ex: /conductor/cell/nervousness,4

/conductor/connector/add,cid,id1,id2
- add a connector between cells id1 and id2
ex: /conductor/connector/add,7,1,4

/conductor/connector/mod,cid,feature,intensity
- modify a connector with feature and intensity
ex: /conductor/connector/mod,7,affinity,0.95

/conductor/connector/remove,cid
- remove a connector
ex: /conductor/connector/remove,7

Output

/crs/visual/fusion,x,y,comp
    - announce a fusion event, two cells are coming together, not merely a trigger, because a fusion event could stop midway through and become a fission event (SHOULD COMPOSER HANDLE THESE?)
    x,y - location of center of event (for spacialization)
    comp - level of completion (unit interval where 0 = just started, 1 = just finished)

/crs/visual/fission,x,y,comp
    - announce a fission event, two cells are splitting apart, not merely a trigger, because a fission event could stop midway through and become a fusion event (SHOULD COMPOSER HANDLE THESE?)
    x,y - location of center of event (for spacialization)
    comp - level of completion (unit interval where 0 = just started, 1 = just finished)

/crs/visual/status,obj,pts 
    - provide output status automatically or upon request
    obj - number of objects enqueued
    pts - number of points in current frame

Okay, so there’s a quick view into what’s going on with the programming for Co-related Space.

 

Leave a Reply