No edit summary  | 
				|||
| Line 44: | Line 44: | ||
For example, an application might send a rotational value as a Multi-Dimensional value, when this occurs you can use the <code>ArgumentIndex</code> to control which value you are interacting with:  | For example, an application might send a rotational value as a Multi-Dimensional value, when this occurs you can use the <code>ArgumentIndex</code> to control which value you are interacting with:  | ||
{| class="wikitable  | {| class="wikitable"  | ||
|-  | |-  | ||
! Path !! Argument Index !! Value !! Description  | ! Path !! Argument Index !! Value !! Description  | ||
Revision as of 20:05, 30 April 2024
Open Sound Control(OSC) is a network protocol that allows software and hardware to send and receive data. It is traditionally used for controlling Sound related equipment such as DJ Equipment, Musical Instruments and Sliders/Faders.
However, OSC itself can be used for basically any purpose where you need to send structured data over the network. In Resonite, we're seeing this used for:
- Haptics
 - Face and Eye Tracking
 - Macro Pads/Shortcut pads
 
Prerequisities
While OSC makes it much easier to get data in and out of Resonite, it is still a network protocol which means that there are some prerequisites:
- Basic knowledge about IP Addresses and Network Ports.
 - For receiving:
- An open port on the computer running Resonite.
 - The IP Address of the computer running Resonite.
 
 - For sending:
- An OSC Server reachable by Resonite on the network
 
 - Some sort of OSC Application/Tool. See tools for some examples.
 
Components
OSC has the following Resonite Components:
- Component:OSC_Receiver - Receive data into Resonite from OSC
 - Component:OSC_Sender - Send data out of Resonite from OSC
 - Component:OSC_Value - Expose an OSC value as a regular component field
 - Component:OSC_Field - Store an OSC value in another component's value field
 
Data
OSC Supports many data types, but Resonite supports:
- Float
 - Double
 - Int
 - Long
 - String
 - Color
 - ColorX (Will convert to sRGB)
 - DateTime
 - Byte
 
Many OSC Applications send data purely as Floats.
Multi-Dimensional Values
OSC Supports values which have multiple values. This is very similar to Resonite's Type system that has types such as Float3.
For example, an application might send a rotational value as a Multi-Dimensional value, when this occurs you can use the ArgumentIndex to control which value you are interacting with:
| Path | Argument Index | Value | Description | 
|---|---|---|---|
| /osc/rotation | 0 | The Pitch value of a rotation | |
| /osc/rotation | 1 | The Yaw value of a rotation | |
| /osc/rotation | 1 | The Roll value of a rotation | 
The structure of OSC messages and data is up to the Sender, as such some applications or tools send this data in different ways.
Tools
A number of tools that support OSC already exist and are compatible with Resonite's implementation:
- OSC Controller - Control Sliders, Buttons etc on your phone and send the data via OSC
 - Sensors2OSC - Send Android Sensor data over OSC
 - Basic-OSC-Example - A very simple OSC app written in C#. Used for testing OSC Connectivity.
 - GigglePuck - A haptic device, that vibrates in response to Resonite based Interactions
 
Examples
- Using a Phone's sensors
- Rotating an in-game box with your phone's gyroscope by Frooxius.
 - Accessing Sensors2OSC Data - Tutorial by ProbablePrime
 
 - Sliders, Buttons and a Multi-Touch System