Tag Clojure

12/12/12: Senses Places

senses_places_web-440x258

Today’s iconic date marks performances of Senses Places in Second Life. We were responsible for transforming the feed from from the (physical) dancers’ wearable sensors into an interactive granular soundtrack, with network code written in Clojure driving a sound engine in MaxMSP.

Second Life location: Koru.

Kora, Boudhanath, Kathmandu

2012-11-27__MG_2037_Gaynor-OFlynn-KIAF-440x268

We’re just back from a week in Kathmandu, working with Gaynor O’Flynn as part of beinghuman on a pair of performances for the Kathmandu International Art Festival: a collaboration with local artists for a piece at the Patan Museum, and the multimedia installation work Kora at Boudhanath, featuring nuns from Nagi Gompa.

Technology alphabet soup: audio from the nuns was routed into Ableton Live and Max for Live, tracked and converted into a stream of Open Sound Control messages, and routed into Field with custom Clojure code for projection.

(The backup plan was to project with an off-the-shelf laser display, but the only interface of any use at short notice was DMX, which really only provided recall and simple transformations of built-in clip art.)

This is the second time in two weeks that we’ve had the opportunity to project onto world-famous iconic man-made structures.

Monome Action at Music Tech Fest

This video from a gig we played back in May at Music Tech Fest has just made its way online. As far as I know, the audio was lifted from the PA which, being d&b audiotechnik, sounded superb.

Instruments: monome running Straker sequencer (Python over Shado), arc running some Clojure over Shado.

ClojureScript for Max

cljs-square-440x440

I’ve been writing graphics widgets in Javascript for MaxMSP using JSUI for a few years (things like the TextBrick and the Nixie tube display, as well as the Forbidden Planet-inspired Krell Mixer Panel which I really must release some time), and I’ve also been working in Clojure for a while, so the arrival of ClojureScript, targetting Javascript as its back end, prompted an investigation of using Clojure to develop user interface panels and scripting extensions for Max without writing any Javascript directly.

Summary: despite a few niggles it all hangs together rather nicely, but be wary of thinking in Javascript terms when coding in ClojureScript, especially when porting example code, otherwise it can all go a bit pear-shaped.

Enter Sifaka

IMG_0010-440x330

Lemur is a multitouch control application for iPhone and iPad, ported by Liine from the now-obsolete JazzMutant hardware device of the same name. The application comes with a rather quirky WYSIWYG editor, and while the editor’s irritating interface might not be enough to prompt efforts on a replacement, control interfaces tend to be heirarchical, highly structured and repetitive, so it makes sense to use some kind of dedicated high-level language to create them and lay them out. So: enter Sifaka.

Morse Code for Overtone

morse170

We’ve just uploaded a Morse code generator for Overtone.

I’ve never been much of a fan of SuperCollider largely because of its front-end language, which I first encountered around 15 years ago (before SuperCollider even existed) and had various issues with, but Overtone (a Clojure environment for driving the SuperCollider audio engine) is a different proposition.

I’m working on a project involving online avatars and audio-rate control systems, and since Clojure+Overtone can clearly do both web interfacing and audio (all with decent multithreading semantics) it avoids the need for separate programs hooked together via OSC or any kind of plug-in or hosting setup. (We’ve already implemented Clojure for MaxMSP, and that was lined up as our Plan B.)

This Morse code generator is very much My First Overtone Program, drawing just on basic Overtone/SuperCollider idioms which I can hack together without getting too lost. Most of it is plain old Clojure coding with a bit of event scheduling, familiar from realtime media applications.

I wonder how much SuperCollider I’d have to learn to add synthetic shortwave radio interference?

Whitney Reloaded

As half of Monomatic, I contributed an algorithmic video piece to a set of works entitled Whitney Evolved, projected at the Kinetica Art Fair last month. (Other contributors included Lewis Sykes, Evan Raskob, Mick Grierson and Paul Prudence.) Each work was inspired by the early animation work of John Whitney Senior, much of which was done using mechanical equipment many years before computers became powerful enough to render his images in real time.

This particular piece takes Whitney’s basic “rose” pattern and duplicates it into translucent layers of discs, rotating at arithmetically related speeds so that the layers drift into and out of various patterns of alignment. The virtual camera performs a continuous slow pan around the structure from poles to equator, its distance varying as it orbits.

Technology: the Whitney algorithm is written in Clojure and hosted in Field, which takes care of the OpenGL display. Projection in the P3 Ambika space courtesy of a pair of the inevitable Barco FX-20s.

Fusion Programming: From Python to Clojure and Back

clojure-python-2

Recently we’ve been working on several digital art projects using Field as a development and presentation platform but with Clojure running the core, domain-specific algorithmic code. This choice is, admittedly, partly because Clojure is new and shiny, but we also like the Emacs- and Leiningen-based development environment (complete with continuous integration testing), and Clojure’s clean functional semantics lends itself to realtime, evolutionary artworks. Since Field works at the level of Python-on-Java (via Jython), and Clojure runs in the JVM, the Python and Clojure worlds inevitably collide.

MaxMSP Showing and Telling

m4u_170

We’re workshopping, and gigging, at the M4_u (Max/MSP for Users) Convention, 13th to 14th of January, Phoenix Square, Leicester. The workshop is pretty much going to be a repeat of that given at the Cycling ’74 Expo – building an algorithmic step sequencer and abstract display system using Clojure. The gig will be monome-based, probably with some pulse sequencer action.

Clojure Workshop, Expo ’74, October

expo-74-logo

We are running a workshop on concurrent patchers and data structures with MaxMSP and Clojure at the Cycling ’74 Expo in Brooklyn, October 14-16. Details to follow. For that matter, details to be designed and coded.

Anyone who wants to get a flavour of how the workshop might pan out should check out the existing Python-for-MaxMSP package, and then close their eyes and try to imagine what that might look and feel like if the underlying language were Clojure rather than Python.

I’m anticipating that full-on functional programming techniques will be new to many MaxMSP users, and the uncompromising nature of the Lisp syntax can also be a bit of a hurdle, so I’m planning to spend some workshop time getting up to speed on those aspects before looking at the concurrency features specific to Clojure itself.