Last november, while working on the sequencer feature of an upcoming Mutable Instruments, I ran into a very musically interesting class of “bugs”…
Given the memory constraints of the project, I was left with 64 bytes of RAM to code an interesting sequencer feature. What should I do with that? A single 64 step sequencer? Two 32-steps sequencer? Two 16-step sequencer with note value / velocity like on the Shruthi? I ended up following a very liberal approach and offered two step sequencers with up to 64 steps, and condensed/complete modes (simple note value on 1 byte vs note/velocity/CC on 2 bytes). I say “liberal” because there is a caveat: if you want it to do things that do not fit into the 64 bytes constraint, shit happens. For example, if you define sequence 1 to be 32 steps and sequence 2 to be 16 steps, everything is fine ; but if you define sequence 1 to be 34 steps and sequence 2 to be 32 steps, the last 2 steps of sequence 1 will share the same note data with the first 2 steps of sequence 2. Instead of trying to restrict such situations in software, I just let them happen, and there was all kind of interesting sequences coming out of this – weird polyrythms in which changing an element affects two tracks at the same time ; velocity data being interpreted as note data, or notes being turned into velocities.
I contacted Dan Nigrin, author of a few esoteric sequencers like the Klee or this take on the classic M185 from Roland. We brainstormed on the concept of a sequencer exploring this idea, a limited space of notes traversed by mini sequencers biting each other’s tail. Did you know that some demomakers are using a subset of a demo’s binary code as data for waveform generation, texture generation, or even camera motions? I like the idea of trying new ways of making the most of a limited set of notes… Composing a melody and then realizing that playing it at half the speed, shifted by one beat, gives an interesting rhythmic pattern for a bass drum.
This sequencer, called “CycliC” slowly took shape… As a programmer I’m daily dealing with modulo arithmetic, circular buffers, pointers wrapping around, and it never occurred to me that this sort of behavior has to be visualized. But Dan came up with the circle visualization to make it look more intuitive. How does it work? You define a set of 32 notes and on/off steps; and create up to 6 mini sequencers traversing subsets of it at different speeds. If only Steve Reich had that!