Composing with Data Flow Programming - Euclidean Groove Box

DOM-E5074, 05.09.2016-16.09.2016, Otso Sorvettula


The aim of the project was to create a simple groove box with a few percussive, bass and melodic synthesizers that can be controlled with only a few potentiometers or rotary encoders. I thought it as a ‘happy accident machine’ where the performer could achieve interesting and satisfying sounds, patterns, harmonics and melodics with a very limited amount of controls. I enjoy the feeling of twisting and turning knobs as an interface rather than controlling a large matrix of buttons.

I started the project with trying to think ways to offer a lot of control for the user with only limited input. I started with ideas about gathering the input with a webcam, Kinect or an accelerometer but I eventually settled on knobs and euclidean sequences because of the precision and feeling of surprise. This was the first draft or idea about the possible interface:


The sequence for each instrument would be controlled with tree knobs: amount of notes in the sequence, length of the sequence and offset of the sequence. The tree potentiometers would control sound of each instruments, such as pitch, decay, cutoff etc. I also wanted to be able to record changes for the sound controls for each instrument. So for example the musician could record the cutoff for a hi-hat ranging from min to max and those control changes would then loop.


Here’s a short demonstration about messing around with the euclibox:

If you’re interested you can download the patch here:


I had some experience with Pure Data before the course, but I ran into a quite few problems with the controll and record features. I spent a lot of thime working on the controlls and used a lot of references for the sound synthesis itself. I stole a lot from Martin Brinkmann ( and used a lot of his work as a reference. The following patches in euclibox are from Brinkmann: abs_adsr2m, abs_delayline1filt, mixer5, oneosc2v synth snare synth, hh synth, beatdelay1.


The horisontal selector maps the controls to the selected instrument. The euclidean sequencer creates the pattern by dividing the selected number of notes evenly to the length of the pattern. The beginning of the pattern can be shifted with offset. The implementation is based on


Another obstacle was recording the sound controls. I wanted to be able to record the twists and turns of the knobs loop the control changes. After some trial and error the solution ended up looking like this:


Playing the euclibox

I hooked up a simple midi controller for playing the euclibox. Playing with the euclidean sequencer is fun and it is able to produce some unexpected and interesting patterns. For percussions the euclibox feels interesting and fun, all tough I found myself quite often aiming for specific numbers like 4/32 for the kick and 2/32/16 (notes/length/offset) for the snare. For the lead synths and bass the controls felt quite limited and clumsy.

The best use cases were discovering interesting patterns and using the knobs as a very primitive and simple interaction device as in “more hi-hats” or “less hi-hats”. The live compositions with the euclibox were fun and offered some interesting results. However the melodic instruments offered less satisfying and good sounding variation than the percussions.

Playing the euclibox with a midi controller that has potentiometer knobs also has its limitations. A controller with rotary encoders would allow to easily adjust the different parameters incrementally in relation to each control’s current value.

Considerations for future

The euclidean sequence was interesting for some percussive instruments. If I would work more on the idea of a groove box that is controlled with a limited number of buttons I would be interested in using a piezo for recording the sequences (tapping the controller and quantizing the input), accelerometer for different filters and predefined patterns that could be tweaked. It would also be interesting to use generative melodies and harmonies that are controlled with simple inputs.