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-2012 Ari Russo