Monomer

A DSL for describing monome applications.

Monomer started out as an ambitious and fun project that would enable the use of Ruby in the development of monome applications typically created in frameworks such as Max/MSP. The main focus was to create a set of abstractions at a much higher level that allowed simple applications to be simply expressed and complex applications to be appropriately expressed (i.e. by not introducing any extra complexity).

The result was a highly concurrent event-driven DSL-fronted framework that could express a basic toggler in only a few lines:

class Toggle < Monomer::Listener

  on_button_press do |x,y|
    monome.toggle_led(x,y)
  end

end

Monomer::Monome.create.with_listeners(Toggle).start

However, when attempting to recreate more complex musical applications, the framework started to hit the barriers of the Ruby programming language for strongly timed event loops. These would be necessary to drive clocks which in turn would drive beats and rhythms. Also, the rapid development pace of the framework didn’t include a strict testing regime (such as TDD) and therefore the source got quickly out of hand in terms of manageable complexity - a chore to work with rather than a pleasure.

Much of the work and thinking of Monomer is now being applied into Polynome. However, all the timing and music aspects are being moved over into the music framework SuperCollider which was written specifically to deal with the concerns of strict timing and audio production.

Recent Posts