Project

osc-access

0.0
No commit activity in last 3 years
No release in over 3 years
A simple way to bind OSC directly to Ruby classes and objects
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
 Dependencies

Runtime

 Project Readme

OSC Access¶ ↑

A simple way to bind OSC directly to Ruby classes and objects.

Features¶ ↑

  • Works with MRI 1.9 and JRuby (in 1.9 mode)

  • Binding OSC events can be done by class or by instance

  • Network resources are invisible to the user even when shared or multiplexed

  • Shortcuts for common tasks associated with OSC such as translating numeric values from one range to another

  • Make OSC-accessible objects discoverable on a network using Zeroconf

Requirements¶ ↑

Requires eventmachine and osc-ruby. These should install automatically with the gem

For Zeroconf support, dnssd is required.

Installation¶ ↑

gem install osc-access

Usage¶ ↑

require "osc-access"

In this example when OSC messages for /1/fader1 are received, velocity= is called and another message is outputted confirming that the first message was received

class Instrument

  include OSCAccessible

  osc_receive("/1/fader1", :translate => { :remote => 0..1, :local => 0..127 }) do |instance, val|
    instance.velocity = val
    instance.osc_send("/receipt", "val set to #{val}")
  end

  def velocity=(val)
    puts "setting velocity to #{val}"
  end

end

i = Instrument.new
i.osc_start(:input_port => 8000, :output => { :host => "192.168.1.8", :port => 9000}).join

The :translate option means that the first OSC argument will be translated from a number between 0 to 1 to the analogous value between 0 and 127 before being passed to the code block.

Or, here is an example that produces the same object, but it’s created by passing a Hash map to the instance:

map = {
  "/1/fader1" => { 
    :translate => { :remote => 0..1, :local => 0..127 }
    :action => Proc.new do |instance, val| 
      instance.pitch = val
      instance.osc_send("/receipt", "val set to #{val}")
    end
  }
}

class Instrument

  include OSCAccessible

  def pitch=(val)
    p "setting pitch to #{val}"
    ...
  end

end

i = Instrument.new
i.osc_start(:map => map, :input_port => 8000, :output => { :host => "192.168.1.8", :port => 9000}).join

Here’s a blog post that explains these examples in further depth and much more.

Other Documentation¶ ↑

License¶ ↑

Licensed under Apache 2.0, See the file LICENSE

Copyright ©2011 Ari Russo