@@ -30,14 +30,56 @@ We propose that there are three modes of collaboration: *Cooperation*, *Communic
*Organisation* describes the relationships between musicians. Organisation does not directly affect the sound production, but it impacts how the communication and cooperation modes operate.
***Nomination:** Nomination is that act of defining the roles of musicians within the group. For example one musician might be the conductor, another might be a soloist.
***Nomination:** Nomination is that act of defining the roles of musicians within the group. For example one musician might be the conductor, another might be a soloist.
***Grouping** The act of grouping defines a hierarchy of groups of instruments. For example a musician might be in the group "viola players" as well as in the group "string section."
***Selection** Selection is the act of choosing a group or instrument for cooperation or communication. For example, a conductor might gesture to the wind section (thereby selecting them) before cueing their entrance (indication.)
## The Boeuf components
[TODO]
## The Boeuf Components
The Boeuf Components are intended as a generic set of components that would be needed to implement the Cooperation and Communication modes described above. Most, but not all, of these are implemented as objects in the bf-pd library. And there are some differences between these conceptual components and their actual implementation in bf-pd.
***Session:** A session represents an instance of a group interaction. A session contains a set of instruments and the network of possible interactions between instruments.
In *bf-pd* the bf-session object is used to join a session.
***Instrument:** An instrument represents a bounded set of music-generating processes (i.e. modules) along with a user interface. In instrument may contain parameters, outputs, meters and it can receive and send messages. We presume that each musician in the ensemble is in control of at least one instrument. Thus, in our modeling an instrument often acts as a proxy for the musician.
In *bf-pd* the bf-instrument object is used to instantiate an instrument.
***Parameter:** A parameter is an attribute of an instrument or module that influences its musical production. Parameters can be of various types such as MIDI events, float or integer values, input audio streams, and so on. Parameters can be:
**Set:* where the parameter is set to a new value.
**Retrieved:* where the current value of the parameter is returned.
**Watched:* where the value of the parameter is sent every time the parameter value changes (until the parameter is no longer being watched.)
**Grabbed:* where the parameter can only be set by the instrument that has grabbed it.
**Indicated:* where a new value may be proposed for the parameter, but the value is not set.
These actions are always accessible to the instrument that owns the parameter, but permission may be needed for other instruments to access another instrument's parameter. Concurrent access can be managed in different ways. For example, by grabbing a parameter so that only one instrument can access it at a time.
In *bf-pd* the bf-param object is used to instantiate a parameter. bf-param enables most of these actions, however grabbing is not currently possible.
**Output:* An output is a musical attribute that is produced by a module or instrument. Outputs can be of the same types as parameters. Outputs can be retrieved and watched by another instrument.
In *bf-pd* the bf-output object can be used.
**Meter:* A meter is a component of an instrument that is not used in the actual sound production, but rather gives an indication on the activity of the instrument, which can help enable *awareness*. For example a meter might display the spectrum or loudness of an instrument's audio output.
In *bf-pd* each instrument has an activity monitor that displays a simplified spectrum of the instrument's output. In the collab window a musician can see this meter for all other instruments in the session. (Note: In bf-pd's *collab window*, the view of other instruments' parameters can effectively function as meters.)
***Group:** A group is a set of instruments or other groups. Instantiating a group is an act of *grouping*. Parameters common to all instruments in a group can be grabbed and set simultaneously. Similarly, messages sent to a group should be sent to all members. For example in a poly-instrument orchestra, a group might be all the musicians with the same instrument. A default group of all instruments is always defined, thereby giving access to parameters common to all instruments in the session e.g. tempo or scale.
*Note:* Groups are not explicitly enabled in the current version of the bf-pd library.
***Module:** A module is a component that produces musical data, of audio or control type. It may be composed of several parameters and outputs. Modules have a type, where each instance of the type has the same predefined parameters. This allows modules of the same type to easily exchange parameter settings. For example, a module of type *LowPassFilter* might have Cutoff Frequency and Q as parameters, whereas a module of type *MidiPattern** would hold an array of MIDI events.
*Note:* Modules are not explicitly implemented in the current version of the bf-pd library.
**Message:* A message can be some text, image, or video sent from one instrument to another instrument or group. Messages can be generic (e.g. Start, Stop, Fade Out), defined per session, or dynamically created.
*Note:* While many messages are sent between objects in bf-pd, bf-pd does not currently enable arbitrary or user-defined messages.
[TODO: add a link to the BOEUF framework paper!]
## Navigate
* The BOEUF project: [](https://bf-collab.net/bf/)