As you may have noticed, I’ve spent a lot of time recently thinking about step sequencers.
I expect that an image of a particular step sequencer pops into the head of everyone who utters the phrase “step sequencer” out loud (Go on… try it!): Your very first step sequencer. The step sequencer you’re wondering about perhaps porting to Max/MSP. The last step sequencer variation you saw popping up on maxforlive.com. That step sequencer named after Euclid. The step sequencer that’s in your Eurorack setup right now. The step sequencer you wish you could afford….
You get the picture, I hope. While I wrote Step by Step with the somewhat abstract goal of trying to communicate how Max users think about large-scale projects and think with Max, the choice of the kind of project to approach was easy - everybody loves step sequencers. Since the book’s appearance, I’ve gotten all kinds of questions about things I didn’t put in the book, too (that’s what follow-up books are for, after all). But there’s one thing I really didn’t put in the book that I’d like to talk about here: examples of really cool approaches to sequencing that are a bit off the beaten track.
I’d like to introduce you to one of those sequencers that definitely fell into the “sequencer I wish I could afford” category for me, and turn you on to a beautiful Max standalone application implementation of it: The Klee Sequencer.
Romeo Fahl built a version of this shift register sequencer and named it the "Klee Sequencer", using the word "Klee" as a play on words combining my reference to programming the thing being like "molding clay" with the similarity of its innate abstraction to the work of the artist Paul Klee (which is, of course, pronounced "clay").
And yeah - if you know Paul Klee's work, it's an inspired bit of naming, indeed.
So what makes the Klee Sequencer different? As Scott Stites describes in his introductory guide to the device, the difference has to do with an insight that’s straight-ahead to someone with a background in electronics (or programming), but maybe less so to the rest of us:
Instead of thinking of a step sequencer as a counter, think of it as a pattern of ones and zeros that correspond to individual steps. Instead of counting through the sequence, you trigger it by taking that pattern and rotating it to the right (or left) and using the pattern to select which event to trigger.
Here’s a simple pair of Max patches that demonstrate that difference. The left-hand example cycles through a set of steps to generate a note offset to create a sequence, while the right-hand example creates the same output by cycling through a pattern of ones and zeros to generate the note offsets.
Hardware and software engineers use the term “shift register” to describe that principle, and that’s what’s basically at the heart of the Klee sequencer. The crucial insight behind the sequencer lies in the idea that you can use the shift register technique to generate more than one event at a time by modifying the pattern of ones and zeros, and then sum the offsets associated with each step in the sequence to create interesting and complex sequences.
Note: Lots of Max programmers use the Max bucket object when they work with shift registers (and I'm sure that lots of them could share versions of the above patch that are bucket-centric with you. I invite them to do so, in fact). I use the zl rot object instead because it lets me do two things that aren't that easy with the bucket object: I can rotate my register backward (by setting the step for the zl rot object to a negative number), and I can also "count" through the register by different numbers than 1 (again, by setting the step value for the zl rot object to something other than 1).
Here’s a Max patch that demonstrates how it works:
Cool, huh? Of course, this simple example is working with note offsets rather than the control voltages associated with the Klee hardware sequencer. And one of the other reasons for the Klee sequencer's fabled status is that there are a myriad of wonderful variations that can be generated by building out from this simple example. If you'd like to get a sense of what those features are now that you've got the basic idea, here's a great video that covers some of the sequencer's features:
If you’re like me, you probably finished that video and started wondering about spending a little quality patching time.
You’re not alone. In fact, someone’s already done all the heavy lifting: Dan Nigrin has - in cooperation with the Klee sequencer’s designer - created a kick-ass standalone version of the Klee which is not only faithful to the original, but also extends it in some interesting new directions.
A little judicious clicking around on Dan’s website would suggest that he’s just as interested in variations on the traditional step sequencer as we are. In addition to his standalone version of the Klee sequencer, you’ll also find Max-based versions of RYK’s M185 Step Sequencer, along with CycliC, a really fascinating sequencer developed in collaboration with Mutable Instruments’ Olivier Gillet.
Here’s what Dan had to say about his experience with the Klee sequencer:
When I first stumbled onto the Klee, I was thoroughly fascinated by it, in reading all the documentation I could find, watching online videos, etc... - but I found that I kept asking myself how I would effectively use it in my studio. The hardware Klee sequencer works with control voltages, and I only had a few voltage controlled synths that I could use with it. That would have been fine, but I kept thinking about clock sync with other MIDI gear, etc... - in short, although I was sure it would have made a great addition to my studio as a control voltage-based unit, I kept coming back to the fact that I needed a MIDI version of it, both MIDI sync-able as well as MIDI note transmitting. I read through a few posts in the Electro-music.com forum about these issues, and saw that some people had created the ability to integrate MIDI into the Klee (or at least ideas for such). But then it dawned on me that I could reproduce most of the Klee's functions in software, which would allow me to get that MIDI integration I wanted! Although there was mention of some software-based Klee sequencers on the forum, none were available in a format that worked for me; they were built for a Nord Modular G2, for a ComputerVoltageSource module, for the Numerology program, or for the ChucK programming language. No regular old Mac or Windows applications that I could use with the rest of my MIDI gear. So I decided to build it myself.
The result is Dan's implementation of the Klee sequencer. It's an impressive piece of work - a well-documented standalone version of the Klee (updated to version 2.3 just this week, with some nice new features added) available as a tire-kicker's demo, supported by video tutorials covering topics from basic functionality and new Klee features specific to the Max implementation, to more practical matters like syncing the Klee to Ableton Live. It's well done, and well worth your attention, either as an addition to your software toolset, or as a source of ideas and inspiration. Check it out!