Arcenciel: Physical Knobs for Virtual Machines

Hero

"Touch the cloud; feel its thunder beneath your fingertips."

Introduction

Arcenciel is a declarative microframework for the Monome Arc OSC controller.

All sufficiently complex systems have phases and transitions. Discovering the boundary of each is challenging and often defies intuition. Trajectories can be stable, metastable, or chaotic. Small variations in the parameters of the system can manifest as large, unexpected effects. How can we thoroughly and naturally explore the space of all states?

Consider this idea: Play your benchmarks like a musical instrument.

Here's an inspiring example of the Arc's potential.

Monome has discontinued all models of the Arc controller and the supply is therefore strictly limited. Each unit is a stunningly beautiful masterpiece: a rare combination of technology and aesthetic joy. If you're among the lucky few who own this extraordinary recherché, love and cherish it forever. The Arc's value handily surpasses its weight in gold.

Dependencies

Arcenciel uses the OSC protocol (UDP). SerialOSC interfaces each Arc with the host machine.

To get started on Mac OS X, you'll need to:

Test your configuration by running the bundled demonstration script:

$ gem install arcenciel
$ arcenciel-demo
[ARC] Added device (m0000171; UDP 19930).
[ARC] Assigning control 'Arc' to device...
[ARC] Illuminated encoder 'First' (0). Press any key.
[ARC] Illuminated encoder 'Second' (1). Press any key.
[ARC] Assigned control 'Arc'.

Usage

The Arc reacts to tactile interactions with its rotary encoders:

  • Angular motion
  • Threshold pressure

From events generated by the device, Arcenciel emulates logical knobs. Each knob has a distinct configuration: a name, a value type, a range, and a precision (degrees per sweep). When the value of a knob changes, the provided callback is invoked.

Arcenciel discovers all connected devices and assigns each to a logical controller (defining one or more knobs). When a device is assigned to a controller, for each of its knobs, Arcenciel illuminates the rotary encoder's ring and requests that you to confirm the assignment.

Knobs are defined using these attributes:

  • Name
  • Initial value
  • Minimum and maximum value (individually or as a range)
  • Sweep (degrees of rotation for the entire range)
  • Value type (integer or float)

Example

Here's a sample that targets a single Arc (two-encoder version).

  • Emulate two knobs: "Query rate" and "Rows scanned."
  • Use a distinct range and sweep for each knob, with integer values.
  • Invoke a distinct callback for each knob.

Implementation:

require 'arcenciel'

Arcenciel.run! do
  knob do
    name "Query rate"

    min 0
    max 100
    type :integer
    sweep 1440

    on_value do |rate|
      puts "A: #{name}: #{rate}"
    end
  end

  knob do
    name "Rows scanned"

    min 0
    max 10000
    type :integer
    sweep 360

    on_value do |rows|
      puts "B: #{name}: #{rows}"
    end
  end
end

Special Thanks

  • The Monome minimalists, for a solid concept and outstanding craftsmanship.
  • The generous dudes who sold me their Arcs, without which this project would not be possible.