Senselosc — OSC interface for the morph (OSX, Linux)

An OSC interface for the sensel morph.
Exposes contact information for up to 16 regions of the sensel morph using the Sensel API.

This is an alternative implementation to @timthompson’s MorphOsc which is Windows-only.
senselosc is currently tested on OSX with SuperCollider.
OSC implementation is straight-forward, so this should also work with any other OSC-capable host (e.g. Reaktor/Pd/…).
The project is written to be cross-platform and should thus also work (with slight changes in the cmake configuration files) on Linux. I did not yet test this, though and would be happy for others to give it a try.

OSC interface

Usage: senselosc [options]
options:
  -h [ --help ]           this help message
  -x [ --nobundle ]       send messages unbundled
  -d [ --scandetail ] arg set scanning detail (0: low, 1:med, 2:high), defaults
                          to high
  -p [ --port ] arg       set output port number (default: 7000)

OSC messages sent:
    /morph      <index> <id> <state> <x> <y> <force> <area> <orient> <major_axis> <minor_axis>
    /morphDelta <index> <id> <d_x> <d_y> <d_force> <d_area>
    /morphBB    <index> <id> <min_x> <min_y> <max_x> <max_y>
    /morphPeak  <index> <id> <peak_x> <peak_y> <peak_force>

with

index       [int]   device index (currently always 0)
id          [int]   contact id (0..15)

state       [int]   one of invalid(0), start(1), move(2), end(3) 
x           [float] x-coordinate in [mm]
y           [float] y-coordinate in [mm]
force       [float] sum of pressure applied [g] 
area        [int]   covered area [sensels]
orientation [float] orientation of bounding elipsis [deg] (0..360)
major_axis  [float] major axis length of bounding elipsis [mm]
minor_axis  [float] minor_axis length of bounding elipsis [mm]

delta_x     [float] x displacement [mm]
delta_y     [float] y displacement [mm]
delta_force [float] change of force [g]
delta_area  [int]   change of covered area [sensels]

min_x       [float] upper-left x-coordinate of bounding-box [mm] 
min_y       [float] upper-left y-coordinate of bounding-box [mm] 
max_x       [float] lower-right x-coordinate of bounding-box [mm] 
max_y       [float] lower-right y-coordinate of bounding-box [mm] 

peak_x      [float] x-coordinate of pressure peak [mm]
peak_y      [float] y-coordinate of pressure peak [mm]
peak_force  [float] force at pressur peak [g]

Comments, suggestions and PRs please via the github issue tracker.

1 Like

Wow, thank you so much for sharing! We’re excited to test this out :slight_smile:

1 Like

(unfortunately, I cannot edit my initial post anymore, so here you have the updated interface)

I implemented some additional features I found useful (average position / force, force-weighted average position, …) and changed the OSC-interface to

/contactAvg index num_contacts x y avg_force avg_dist area x_w y_w total_force avg_wdist
/contact index id state x y force area dist wdist orientation  major_axis  minor_axis
/contactDelta index id delta_x delta_y delta_force delta_area
/contactBB index id min_x min_y max_x max_y
/contactPeak index id peak_x peak_y peak_force

see README for details.

enjoy!

1 Like

Thank you so much, @ifsaw!

1 Like
Twitter RSS Facebook