Main menu

Post navigation

Finite State Machine Sequencer

For the last years, I have been working with a drum trigger interaction system based on an acoustic drumset and the Nord Modular G2 synthesizer. The basic idea is to control multiple step sequencers by drum hits. Like that, the musician can interact with preprogrammed note patterns in his own musical feel and timing. People keep asking me how they could reproduce this approach on their own computers and beyond that, the G2 system is somewhat limiting for such a task, especially when the compositions get more complex.

Some weeks ago I discovered the call for works for the CTM.13 MusikMakers Hacklab and proposed my idea for an interactive graph-based step sequencer. The proposal was accepted and I spent the week on CTM Festival building the prototype as a Java External for Max/MSP. The Hacklab was a very inspirational gathering of music, art and visual developers collaborating within their projects and sharing ideas and concepts. For example, Imogen Heap was working with her team on their exciting musical gloves project. I set up an electronic drum kit and my stage LED Light modules as an interface testing environment. In many conversations with other artists in the lab I developed a basic concept for the interaction between the drum kit and my sequencer prototype.

Basically, the graphical sequencer consists of a finite state machine that can be played by a musician. It is a Max object that accepts any signal (e.g. MIDI) as input and sends predefined signals to the outputs. In the graphical representation, the nodes represent musical events or any other signal that Max can handle, e.g. MIDI notes, chords, OSC messages or visualization commands. The edges connecting the nodes define the rules for the transition from one node to another over time. Multiple outgoing edges are interpreted as alternate choices, giving the possibility to express a musical composition in form of a Markov Chain.

Screenshot of the graphical sequencer in Max

I added two more things to that concept to create the possibility of interaction with this graphical composition: An emitter is a start node that listens to a specific event, e.g. a drum pad. When activated, it emits a token into the graph that will transition the nodes when it recieves the “step” signal, e.g. from the bass drum trigger. You can now play this graphical composition with a simple drum interface:

So far, that’s it for the prototype. I can’t wait to try out hacking some more complex compositions in the sequencer and include it into my live setup. But of course, there’s lots of work to do until then, and we developed additional ideas for adding conditions to the graph, to express larger musical parts in a simple graphical way. There will be a free download of the basic Max external and/or a standalone Java application later, but this may take some time.