Skip to main content

OSC

The Neurosity SDK supports Open Sound Control (OSC) protocol for real-time data streaming. This is particularly useful for integrating with audio/visual software and creative coding frameworks that support OSC.

Overview

OSC data is streamed over port 9000 via UDP in two modes:

  • Perform Mode: Streams processed metrics like focus, calm, and power by band data
  • Raw Mode: Streams raw EEG data samples

Configuration

The OSC server uses the following default configuration:

  • Local Host: Configured via oscLocalHost
  • Local Port: Configured via oscLocalPort
  • Remote Port: Configured via oscRemotePort
  • Broadcast: Enabled
  • Protocol: UDP

Enabling OSC Modes

Before using either mode, you'll need to enable them in your device settings:

  1. Go to console.neurosity.co
  2. Select your device
  3. Go to Settings
  4. Enable either or both:
    • "OSC Raw Mode" - for raw EEG data
    • "OSC Perform Mode" - for processed metrics

Note: Each mode can be enabled independently, allowing you to use either or both modes simultaneously.

Streaming Modes

Raw Mode

When raw mode is enabled via startRawMode(), you'll receive raw EEG data samples at the device's sampling rate (256Hz for Crown, 250Hz for Notion 1/2). Each packet contains:

  • 16 samples per channel for Crown (62.5ms of data)
  • 25 samples per channel for Notion 1/2 (100ms of data)

The data is sent to the OSC address /neurosity/notion/{deviceId}/raw with the following arguments:

  • channelData (array of floats) - Raw amplitude values for each channel
  • timestamp (string) - Timestamp of the first sample in the packet
  • count (integer) - Sample count
  • marker (string) - Any marker associated with this data

Perform Mode

When perform mode is enabled via startPerformMode(), you'll receive processed metrics at a lower rate (4Hz). This includes:

  • Power by band data (delta, theta, alpha, beta, gamma) - Updated every 250ms
  • Focus/Calm probability scores - Updated every 250ms
  • Signal quality metrics - Updated every 250ms
  • Battery status - Updated when changed

Each metric is sent to its own OSC address (see Address Patterns section below).

The power band data represents averaged frequency power over a 16 second sliding window, providing a more stable signal for creative applications.

OSC Raw Address Patterns

Device Info

/neurosity/notion/{deviceId}/info

Arguments:

  • deviceId (string)
  • deviceNickname (string)
  • model (string)
  • modelName (string)
  • modelVersion (string)
  • manufacturer (string)
  • samplingRate (integer)
  • channels (integer)
  • channelNames (string - comma separated)

Raw EEG Data

/neurosity/notion/{deviceId}/raw

Arguments:

  • channelData (array of floats) - Amplitude values for each channel
  • timestamp (string)
  • count (integer)
  • marker (string)

Markers

/neurosity/notion/{deviceId}/markers

Argument:

  • label (string)

OSC Perform Address Patterns

Metrics

The following metrics are streamed with the pattern /crown{deviceShortId}/{metricName}:

Power Bands

/crown{deviceId}/{bandName}

Where bandName is one of:

  • delta
  • theta
  • alpha
  • beta
  • gamma

Arguments:

  • values (array of floats) - Power values for each channel over a 16 second window

Power Band Slopes

/crown{deviceId}/slope/{bandName}

Arguments:

  • values (array of floats) - Slope values for each channel over a 16 second window

Battery

/crown{deviceId}/battery

Argument:

  • chargePercentage (float)

Signal Quality

/crown{deviceId}/signalQuality

Argument:

  • quality (float)

Usage Example

const osc = require("osc");

// Set up an OSC UDP port listening on port 9000
const udpPort = new osc.UDPPort({
localAddress: "0.0.0.0",
localPort: 9000,
});

udpPort.on("message", (oscMessage) => {
console.log("Received OSC message:", oscMessage);
});

udpPort.open();