Polimod + Calculeitor

See the  all the virtual polimod tutorials.

Polimod is a system of tools that lets you do modular music improvisation.

More posts about this.

Polimod is a composition environment. It is though out to work as a common language among different composition operators, in a way inspired by how Modular synthesizers (specially Eurorack) environment work. This let's you improvise music in a way that you have probably never tried before. To this date, it works virtually on a host computer, and the modules are tweaked by using the "Calculeitor" controller as an interface.

The idea behind this project, is enabling a greater range of musical improvisation. There are many tools that allows us to do realtime changes to the timbres, such as modular synthesizers and live effect processors. It was observed, however, that there isn't a similar capacity in the ambit of composition. Most live improvisation tools delegate patterning to a piano roll which can be used to make loops, and perhaps shift that composition by semitones or octaves. By applying the same principle of modular synthesis to composition, the improvisation possibilities of musical patterns was expanded.


Calculeitor is the controller used to play modular composition with the Polimod, and a (soon to be) standalone midi sequencer.

Two connected calculeitors to form a hardware patch

Calculeitor standard module button names

Technical details

Calculeitor is basically an Arduino Mega, with sd cards, several backlit buttons, a screen, an encod
The latest version of Calculeitor was designed using Fusion 360 and KiCad.

Repositories & files

Repository for the firmware:
Repository for the hardware:

Calculeitor solid enclosureDownload

Virtual modular environment

Currently the best way to use this environment is in a host computer. The computer simulates a modular environment, where you can create and patch modules in a very fluid way.


This visualization works on a web browser. Polimod sends information about all the changes that take place in the environment to a socket, and these changes are reflected in the web client.

This visualization has been great to engage the audience, since it shows a bit of the inner workings of the performance in realtime.



Status: working
Stores all incoming events of note type, and plays them in the order of arrival. Upon events of note off type, it removes the events that match the same numbers 1 & 2


Status: working
Necessary only in the virtual Polimod. It allows connecting a module's output to the recording input of another module, hence causing a bouncing of events.


Status: working
Also useful only in the virtual Polimod. It is an event forwarder that gets automatically connected to every new module that needs clock. In this way, performing is more fluid.

Calculeitor Midi

Status: working
This module uses a calculeitor as MIDI interface. Whichever calculeitor is used to connect a module into this module, becomes the MIDI interface.
A thing to note, is that the output timing might lose precision if the same calculeitor is used for other things in the meantime. It is, thus, highly recommended to use a dedicated MIDI interface instead.


Status: working
This module copies events of the note type into more events with relatively spaced numbers. In other words, it lets you create chords out of single note events.

Clock Generator

Status: working*
Generates a clock message at regular intervals.
* This module is working correctly, but it takes time to change the BPM.

Delay ClockBased

Status: fully working
Stores whichever message is received, and propagates them to the output after receiving a certain amount of clock events.

Fix Note Length

Status: fully working
Sends a note off after a certain amount of clock messages, correlative to any note on that it has received. It effectively makes all the note lengths equal to a user defined value.


Status: working
Runs Conway's Game of Life algorithm. It clocks the algorithm using clock type messages, and outputs note events from 0 to 15 (or any other user defined root number) according to which cells are on or not.


Status: working
Modifies events of the note type so that they fit in a user-defined scale.
So far it works by "expanding" the range of notes, assuming that the input notes are diatonic grades. It is desired to add a mode in which the notes are "rounded" into the scale.

Multi Tape

Status: partially working
Possesses multiple sequencer memories that can be recorded, muted and sequenced independently.


Status: working
Similar to Game Of Life module in terms that, by running a clock-based algorithm, generates a note output based on the square number. The algorithm in this module, however, is much simpler and it consists on playing in order, whichever squares have been activated in the grid.


Status: working
Similar to Narp, but instead of triggering the grid events in order, it does so in random order. It also has a probability parameter so that events are generated only upon some clock event.

Note Sustainer

Retains events of the note-off type until a new note-on event is received, thus producing an effect of monophonic voice. It is possible to increase the number of voices too.


Status: working
Performs a simple arithmetic/ logic operation to the incoming events. It can be used to make simple operations to events, and also as a filter which forwards or discards events depending on the operation.

Piano Roll

Status: partially working
Intends to be the replacement of the Sequencer module. It allows sequencing and recording of events, with the ability to record sub-step shifted events.

Preset Kit

Status: working
Transforms events of note type into other events, according to user designation. It assigns each incoming note type event, and according to the event's first number, it triggers one user-defined event. Events can be defined individually, or defined as relative offsets from the first. Each preset can be muted as well.
This module is often used to create drum or percussion kits, making it easier to sequence rhythmic elements. The interface is inspired in the Korg Electribe 2 "trigger mode" and "mute mode".

Route Sequencer

Status: partially working
It has an internal 4-step * 4-events sequencer. Each of the four events represent an output. It is used to define by a sequence, when to forward the events to each output. In this way, it is possible to route messages through different paths in function of time.
It still needs to be improved to make sequences that are longer than 4 steps. In addition, it needs a way to know which output is which.


Status: working
A classic sequencer, with quantized memory. It has many interesting functions such as sequence folding (where the length is duplicated or halved, either copying or not copying the contained events), modulus composition (where the changes are applied to every n steps) compensated sequence shift, among others.

Technical details

The virtual Polimod environment is based in Node js. Although I haven't done this yet, it is possible to use other hardware controllers (than calculeitor) with the environment, without needing compilers and such.


Future vision

Explained in section 4.6 of the thesis.

Deluge style extended sequencer

Sp404 like Sampler

Fretboard/ keyboard isomorphic harmonizer

Dj style sampler

Kaoss-pad-like LFO sampler

Rack for micro-operators






This production thesis sets out to create a tool for live improvisation of music that allows musicians to create and modulate musical patterns in real-time and reduces the need for pre-recorded or pre-sequenced material. It starts by defining the scope of conventional electronic music and then explores the shortcomings of current tools in relation to the divergency of music making.

The project is based on the author's previous experiences in the live improvisation of conventional electronic music, and thus it starts by surveying the currently existing tools. After that, it focuses on the iterative design process of modular environment, taking the modular synthesizer as a conceptual starting point. These processes led to the development of composition devices which are expressed through a hardware user interface, in a modular environment.

This project finds that the shortcomings in divergency of current music improvisation tools come from the fact that musical modulations in an improvisation tool are inherently limited by the available procedures of any given system. While composition tools such as modular synthesizers lack this limitation they do not have the discrete musical abstractions required for conventional electronic music. The production project thus focuses on the design of a modular environment that could permit re-purposing of procedures that process discrete musical events. The outcome of this project is a new performance environment that can be used to generate more diverse improvisations of conventional electronic music.


Self hosted: thesis-odt


The thesis was produced using Pandoc and Citeproc. It was compiled to ODT and stylized using LibreOffice.