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 git repository and compiled. To build all dependencies (among many other things) in one step:

git clone
cd drobillad
./waf configure build
sudo ./waf install

If you prefer, you can also build just the dependencies independently. 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 followed.


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.


A machine can be built 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.