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:
Here is typical MIDI output:
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.
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)
/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
/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.