Addressing software using OSC messages

We propose a style of programming in which the entire functionality of each software module is addressable through OSC messages. Advantages of this style include the following:

1. The OSC namespace for each module explicitly names all of that module's features. This can enable software to be self-documenting and transparent in its functionality.

2. The entire functionality of each module is accessible via a single control mechanism: incoming OSC messages. In graphical languages such as Max/MSP and Pd, this allows even the most complex objects to have a single control inlet, reducing the clutter and confusion of connecting to multiple inlets (Figure 1). As a module's functionality grows, no structural changes (such as adding more inlets) are required; the programmer simply expands the module's OSC namespace.

3 . If the components of a complex system already communicate among themselves exclusively with OSC messages, then it becomes very easy to move some of the components to other computers to form a distributed local area network system.

4. Certain OSC messages can be standardized across different modules. For example, the message "/gain" with a floating point argument can be used in many different synthesis and processing components to change gain; the message "/namespace" can trigger any module to display its OSC namespace; the message "/go" followed by the argument 1 or 0 can be used to turn on and off the processing in the module; and the message "/init" can initialize a module.

By sending the "/namespace" message to the Max/MSP patch above the user is presented with this list of OSC messages and can quickly learn how to control the patch:
1, /go _int_ turn processing on and off;
2, /rate _float_ play rate;
3, /set-position _float_ between 0 and 1 sets position
from start to end;
4, /gain _float_ sets gain;
5, /SDIF-tuples _anything_ talks to SDIF-tuples;
6, /SDIF-buffer _symbol_ sets SDIF-buffer for
7, /sinusoids~ _anything_ talks to sinusoids~;
8, /namespace _bang_ opens this collection;