Hi.

During the past year or so I've been working on a Clojure library which lets me live code FluidSynth from within a Clojure REPL. I personally use Emacs with CIDER, but it should work from a plain REPL or any other editor that supports interactive development.

The project got to a point where I think it is ready to be shown to the world.

Feature highlights:

- drives an in-process FluidSynth instance through the C API bound into the JVM via JNR-FFI
- notes can be represented by keywords (:c-3), MIDI note values or scale degrees
- supports any kind of scale (just give it the list of intervals)
- musical phrases can be encoded with either Clojure data structures or an equivalent text-based syntax
- musical phrases can be bound to variables for reuse in other phrases
- supports scoped change of scale, mode, root note, octave, semitone offset, MIDI channel, velocity, note step and duration
- supports live looping (in the sense of Extempore or Sonic Pi)
- the sequencer is pretty generic, it could be used to control anything, not just musical devices (e.g. it would be possible to play music and control an OpenGL visualizer via OSC simultaneously from the same patterns)
- there is a tutorial which can be followed in a Clojure-capable editor, with runnable examples

Note that some Clojure programming knowledge is necessary to make use of this tool.

The library and the tutorial can be found at https://github.com/omkamra/cowbells

Merry Christmas,
Balázs Ruzsa (cellux)