Skip to content
This repository

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP

Build OSC into Ruby objects

branch: master

Fetching latest commit…

Octocat-spinner-32-eaf2f5

Cannot retrieve the latest commit at this time

Octocat-spinner-32 examples
Octocat-spinner-32 lib
Octocat-spinner-32 test
Octocat-spinner-32 LICENSE
Octocat-spinner-32 README.rdoc
Octocat-spinner-32 Rakefile
README.rdoc

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

Something went wrong with that request. Please try again.