I was drawn to the work of Mark Fell this past fall when I was exploring rhythmic pattern generation and FM synthesis. In particular, I was blown away by Fell’s collaboration with Gábor Lázár from 2015 called The Neurobiology of Moral Decision Making.
I wanted to know how Fell and Lázár made these rhythms and sounds. A Google search landed me on this thread in the lines forum where I learned that Fell completed a PhD thesis in 2013 called Works in Sound and Pattern Synthesis. It turns out this thesis provides detailed discussions of Fell’s rhythmic pattern and synthesis algorithms. I decided to implement Fell’s ideas in Csound just like I did with James Tenney’s ideas.
So far I’ve only focused on the ideas Fell explores on his album Multistability from 2010. Specifically, I’ve implemented some of his rhythmic pattern algorithms, which I’ll cover in this post. In my next post I’ll cover his FM synthesis algorithms.
Fell’s basic approach to rhythm on Multistability is to avoid clearly defined tempos or meters. Instead of setting a tempo and generating rhythmic patterns based on equal subdivisions of the beat, he essentially changes the tempo from one beat to the next. In other words, he defines the time in milliseconds between each beat for a sequence of beats and then cycles through that sequence. This might sound confusing, so let me illustrate the idea by showing you the “rhythmic pattern generator” I coded in Csound and Cabbage.
Let’s first look at the top box called “Rhythm”. The six columns in the middle each represent a beat (or multiple beats depending on the Repetition value) in the rhythmic sequence. The rhythmic sequence is cycled through over and over. Here’s what the different fields mean.
Now let’s look at the three boxes below the Rhythm box. These are the individual drum parts. Here’s what the widgets do.
The ideas here are a combination of Mark Fell’s and mine. Fell wrote about the duration, multiplier, repetition, and amplitude sequence ideas in his thesis. I added more interactivity in the Cabbage interface and the ability to layer more drum parts. That’s the fun of studying other people’s ideas. You immediately start taking them in directions that are interesting to you.
Here are some improvisations I recorded with this instrument. In each case I started with a pre-made rhythmic pattern and quickly began altering the pattern. Note that these are not the most compelling pieces of music on their own. To bring these pieces to life I’ll need to add synthesizer accompaniment, which I’ll cover in the next post.
This instrument is an example of how a few simple elements (i.e. duration, multiplier, repetition, and amplitude sequence) can interact to create complex and surprising patterns. Playing it is very different from playing a traditional drum machine where each drum part is independent and fully controllable. Instead, in this instrument the drum parts are interconnected. It takes some getting used to.
You can make metrical rhythms that sound pretty traditional with this instrument, but it’s an uphill battle. This instrument is better for creating awkward, knotty rhythms, and that was Fell’s intention. Your best bet is to embrace the awkwardness and let the rhythms get weird.
The Csound code for this instrument is pretty similar to the code for the drum machine I made. The code reads the various widget values into arrays, cycles through the active rows and columns, and triggers the drum samples which are played with the
The main difference is that this instrument changes the value of the
metro opcode every time it moves to the next rhythm column. In other words, it continuously cycles through different tempos, whereas the traditional drum machine maintains a constant tempo as it cycles through the drum patterns.