Machina is a MIDI sequencer based on Finite State Automata.

A machine can be constructed manually from the user interface, recorded from MIDI input (free-form or step), or loaded from a MIDI file. The probability of arcs can be manipulated to build a machine that produces structured but constantly changing output. This way, Machina can be used as a generative recording tool that plays back patterns similar to, but not identical to, the original input.

A small Machina machine created by step recording


Machina is still in development, so for now it must be checked out of the SVN repository and compiled. To build all dependencies (among many other things) in one step:

svn co
cd lad
./waf configure build
sudo ./waf install

If you prefer, you can also build just the dependencies themselves. The compilation commands are identical for every project.


(Note this information is available in the interface under the help menu)


Nodes represent notes, which have a pitch and duration. When a node is highlighted green, it is playing.

Play begins at the initial node α. Whenever all nodes become inactive or stop is pressed, play returns to the initial node.

Nodes with dashed borders are selectors. Only one successor is played after a selector, i.e. only one outgoing arc is traversed.

  • Right click the canvas to create a new node
  • Middle click a node to learn a MIDI note
  • Double click a node to edit its properties
  • Ctrl+Left click a node to make it a selector


When a node is finished playing, play travels along outgoing arcs, depending on their probability. The colour of an arc indicates its probability, where green is high and red is low.

  • Ctrl+Left click an arc to decrease its probability
  • Ctrl+Right click an arc to increase its probability


A machine can be build by recording MIDI input. To record, press the record button and play some MIDI notes. To finish recording, press stop or play and the new nodes will be added to the machine.

Normal recording inserts delay nodes to reproduce the timing of the input. To avoid this, use step recording which directly connects nodes to their successors with no delays in-between.


Connecting nodes is based on the selection. If there is a selection, clicking a node will connect the selection to that node.

There are two modes: chain and fan. In chain mode, the selection is moved to the clicked node for quickly connecting long chains of nodes. In fan mode, the selection is unchanged for quickly connecting the selection to many nodes.



Machina is developed and given away freely for the benefit of all. However, donations of appreciation for the considerable time and effort spent are appreciated:

2 thoughts on “Machina

  1. This looks very interesting!
    As soon as possible I’ll try it although it seems a little hard to make a musical use of it. Maybe it could be even more interesting if it use chords instead of notes, so that (with a low BPM rate) it could create an harmonic progression.
    I’ll try to use it with some “chord” functionality on my synth, let’s see what it comes out.

    Thanks again and good job!

    • Thanks. I’m not sure having multiple notes on a node is really in the spirit of the program, but you can create chords and/or multiple voices “manually” since several nodes may be playing at once.

Leave a Reply

Your email address will not be published. Required fields are marked *