Introduction to Open Sound Control
Configuration
Each and every HOLOPHONIX parameters can be controlled or monitored via OSC (Open Sound Control) commands.
To configure the OSC Receive and Sends, open the OSC tab in the Preferences.
OSC Receive
Send the OSC messages to the processor’s IP address on the default port 4003. However, you can change that port number. See the OSC tab in the Preferences.
OSC Send
To send OSC commands from HOLOPHONIX to an external device, you first need to activate and configure the destination IP address and port. See the OSC tab in the Preferences.
You can now set multiple OSC destinations, and choose what coordinate format will be output for source positioning.
Ports 4002, 4001 and below 1024 are not allowed.
When a parameter's value is changed (such as source position or any source or bus setting for example), its new value is sent to the destination.
Message Structure
OSC messages are structured in two parts: first the address (whose elements are separated by slashes: /
), followed by the argument (the value) to transmit.
/{element}/{id}/{path/to/the/parameter} {argument#1} {argument#2} ...
Example
To set the second spatialization bus level to
-2.5 dB
, one would send the following command:/bus/2/gain -2.5
Address
The address itself contains first the type of object (mono source /track
, stereo source /stereo
, spatialization bus /bus
, etc.), then the index of the object, and finally the parameter to control.
When selecting an object, its header in the inspector displays the OSC address to use to control it, with its index included.
Depending on the type of object to control, the address can start with one of the following:
/track
(mono object)/stereo
(stereo object)/multi
(multichannel object)/tree
(mic tree object)/aformat
(A-Format ambisonics stream source)/bformat
(B-Format ambisonics stream source)/zylia
(Zylia microphone stream source)/eigenmike
(Eigenmike microphone stream source)/hoastream
(Higher Order Ambisonics stream source)/bus
(sound spatialization bus)/reverb
(reverberation associated with each bus)/d2m
(direct to master source)/d2b
(direct to bus source)/thru
(bus through)/lfe
(LFE bus)/monitoring
(monitoring bus)/master
(master bus)
Arguments
Argument Types
The "argument" is the value that is sent to a specific parameter. There are four types of arguments:
- integer numbers (
1
,2
,3
, etc.) - decimal numbers (
1.1
,1.2
,1.3
, etc.) - string of characters (
abc
,xyz
), - booleans (
true
orfalse
,0
or1
)
Rounding
When a decimal value is sent instead of an integer, the value will be rounded to the closest integer (for example, 1.5 will become 1, and 1.6 will become 2).
Angular Scales
Regarding the values expressed in degrees, they can be sent to HOLOPHONIX on the native -180° to +180° scale, but also from 0° to 360°. For exemple, if you set an angle to +190°, it will be converted to -170°, its equivalent direction on the native scale.
Non Case-Sensitive
When the argument is a string of characters, the messages will not be case-sensitive.
Example: Those two messages will be strictly equivalent:
/bformat/1/norm FuMa
/bformat/1/norm fuma
Pattern Matching (Groups and substitutions)
Specific structures of messages allow controlling several elements together:
- Use the
?
character as a substitution element for a single character in the addresses, - Use the
*
character as a substitution element for several characters, - Use straight brackets
[
]
with a dash-
to control a range:[1-4]
for 1, 2, 3 and 4 for example, - Use curvy brackets
{
}
with a coma,
to control a list:{1,4,5}
for 1, 4 and 5 only; it also works with strings of characters:{stereo, multi}
for example
Example 1: If you want to set the azimuth position of all the mono sources to
+10°
, you could send:/track/*/azim 10
Example 2: If you want to set the level to
-6 dB
for stereo sources 1 to 5, you could send either of these two messages:/stereo/[1-5]/gain -6
/stereo/{1,2,3,4,5}/gain -6
Example 3: If you want to mute all mono and stereo sources, send:
/{track,stereo}/*/mute 1
Retrieve parameter status
Use the /get
message to retrieve the status of a specific OSC parameter, or status of multiple parameters.
Example: If you want to know the gain level applied to stereo source 5, send:
/get /stereo/5/gain
This will return
/stereo/5/gain -6
.
/get
uses the mentioned above message structure and pattern matching.
Example: If you want to know the gain level applied to stereo sources 1 to 5, send:
/get /stereo/[1-5]/gain
This will return
/stereo/1/gain -6
[...]/stereo/5/gain -6
/get
only works with indexed elements in the project. As such, it cannot retrieve any paramater status for the Master, the Monitoring, or the LFE.