Numerology Techniques #1


Sequencing with Intervals : The Why and How of Numerology
by James Coker 3/10/03


I: Background

Just about two years ago, I started performing live electronic music shows with Eric Williamson (a.k.a. Suit and Tie Guy) of Peoria IL. These shows were all-improvised affairs that lasted from two to three hours. Our approach to composition followed a model used by Tangerine Dream in the 70's: we decided on a tempo and a key, and sometimes whether a piece would be ambient or beat based, then everything else was improvised. My rig consisted of a Korg ER-1 drum machine, a combined keyboard/guitar soloing rig (PRS Custom 22, Korg Z1, TC Electronics Fireworx and Line 6 Pod), a small modular analog synthesizer, a digital synthesizer of some sort (at different times: a Korg Triton, NI Pro-52, an a Waldorf Micro-Q) and a MOTU 828 audio interface feeding a powerbook running Digital Performer for audio processing and MIDI sequencing. Eric's rig is similarly diverse.

Audio-wise, everything was just hunky dory —between the two of us, we had plenty of sound generation options. We also found the live, improvised environment to be a highly motivational and productive environment. The problem was, it usually took quite a while to develop our ideas from the first few notes into something that could be considered complete. Eric was programming melodic lines on the arpeggiator of his Z1, while I was using the drum editor of Digital Performer. Each of us used our ER-1's for drum programming.

Our jams would usually start with some sort of ambient loop, develop through layers of drum parts added one by one as they were programmed, continuing on with bass lines and other melodic elements. Then there would be instrument solos, a variety pattern mutes and breakdowns and sonic chaos introduced by heavy effects processing. Finally we would wind back down to an ambient loop. All in all, it typically took 25 or 30 minutes or more. Post-session examination would usually reveal that once each piece was appropriately edited, each consisted of about 7 to 10 minutes worth of "keeper" material.

Most experienced gigging musicians would perhaps suggest that we prepare our sequenced lines ahead of time, so that they could be brought in at will. But that essentially removes the creative tension that makes the whole process worthwhile. Digital Performer is a great application for recording, editing and mixing, but was not intended for this purpose. With an appropriate amount of basic setup, I could certainly throw together some patterns quickly in the drum sequence editor. And the process of programming a synthesizer line note-by-note in front of an audience was quite exciting. But once the pattern was there, it was difficult to make useful changes. In order to get a simple chord progression going, I would actually select all the notes in the one or two bar pattern, and drag them around with the mouse. In the studio on a slow afternoon, no big deal, in front of an audience, it was high-risk behavior. Even the ER-1, a very interactive beast overall, has some quirks that make it non-optimal for live sequencing.


II: The Problem

What I needed was a sequencer truly designed for real-time interaction. It had to be more than just a quick and simple step sequencer; it had to allow me to take a sequence and manipulate it in meaningful ways. Back in the 70's, performers like Tangerine Dream and Klaus Schulze used banks of analog sequencers to create patterns for their improvised live sets. These large and expensive analog sequencers, though less common, are still highly valued for the highly interactive musical experience they provide. However, I did not have the means to purchase and manage the several thousand dollars worth of heavy analog equipment I would need to meet my sequencing goals. Certainly, in todays world of software studios I could find a solution that combined the economy of software with the usability and flexibility of twenty year old hardware.

Years before, I had started two attempts to build custom sequencers, one using a well-known "graphical music construction toolkit", the other in a hybrid of Java and C. Both times I had to stop short of a finished product. In the first case I ran into unresolvable technical issues, in the second I ran out of time. In both cases, however, I was trying to find a solution to a problem I had not clearly defined. I knew I wanted a sequencer that was more interactive that what was on offer, but as I wasn't performing with a sequencer in any real capacity, I didn't have a clear understanding of what was really needed.

This time around, I had a clearly defined problem, and once again took the development plunge. This time with another well-known music software toolkit. I experimented by building a multiple step-sequencer environment, a kind of virtual version of the old analog equipment. It offered great promise: There were 3 step sequencers, one for base pitches, a second (running at a slower rate) for chord changes, and a third that could be used for further pitch variation. The user interface was right on: I could easily edit each step directly, without worrying about mousing errors, I could change sequence length, clock division, gate settings and so on. But there were problems: It was very time consuming to set up and maintain. There were (again) low-level execution issues that could not easily be resolved. Proponents of these types of programs would probably write this off as a neophyte user in way over his head. But with a masters degree in computer science and 10+ years of programming experience in more than a dozen different languages, I would doubt it.

On top of those issues, the resulting patch was surprisingly CPU intensive. My seemingly simple construction consumed 10% of the CPU on a 500Mhz G3 powerbook. Examination of other solutions available yielded no better results: One option was a one of the many "virtual beat boxes", that often have snazzy graphics, but don't offer a musically satisfying range of features. The other options were to use one of the high-end audio/MIDI sequencing apps, or try yet another low-level toolkit with needless complication and overhead. There had to be a middle way.


III: Solution and Consequences

Through some general scheduling serendipity, I found myself in the summer of 2002 with a sequencing itch, some time off from work-related duties, and an urge to use Mac OS X for something interesting. I decided to try a proof of concept: Write a simple MIDI sequencing app for OS X using Cocoa, the famously-productive programming environment that Apple got along with the NextStep operating system when they purchased NeXT. At the very least I had a good chance of getting something that would be great to use for live shows, and possibly even something other musicians would be interested in.

The initial prototype was very basic. It was not modular. It did not have a custom user interface, or a mixer page, or any fancy sequencing operations like skip steps. What it did have was the kernel of the Numerology method for sequencing: Intervals.

The concept is very simple, perhaps misleadingly so: Instead of representing the pitch portion of a melody using a series of notes: C, F, E, G, etc. one represents it in semitone intervals: 0, 5, 4, 6, and so on. The pitches become abstracted away from a particular key, and thus become free to be associated with any key -- simply by adding in the appropriate base note (such as Eb4). Furthermore, by adding in a second sequence of slowly-moving pitch intervals, the melody is then transposed through a series of key changes. Quantize the pitches to a scalar mode matching the base key (eg. B-Minor), and the key changes become chord progressions.

Some of the opportunities of this abstracted approach to pitch representation become wildly apparent once one starts to modify the transposing sequence:

  • Changing the length of the transposing sequence changes the length of the progression.
  • Editing any part of the chord/key progression becomes as simple as changing the value of the transposing sequence at the desired step.
  • By increasing the rate of the transposing sequence to something near that of the main sequences, the progression is perceived as melodic variation.
  • By changing the length of the variation sequence relative to the base sequence, the variation itself changes from bar to bar.
  • Using wide pitch ratios in the variation sequence allows a single line to voice two separate parts, as long as the overall sequence moves quickly enough.

A quick side note: Many musicians prefer traditional notation for musical intervals: Major 3rd, Minor 2nd, and so on. They thus find Numerology's semitone orientation a bit cumbersome to use at first. A feature will be added to the 1.01 release to make it easier to do pitch programing using tradition interval notation.


IV: Demo: Sequencing with Intervals

Several of the techniques discussed above are explored in the Numerology demo session: Intervals. The session consists of a very basic Numerology sequencing setup:

  • A program change module, set for the E.Piano patch in SimpleSynth.
  • A pair of control sequencers, one for the base arpeggio, a second for note 'progression'.
  • A gate sequence that is used merely to trigger notes on a regular basis.
  • A note output module.
  • Both control sequencers are patched as pitch inputs to the note output module.
  • The gate sequencer is patched in to the note output module as its gate input.
  • The note output module is unmuted, and its MIDI output is set to 'Numerology Out 1'.
  • The first pitch sequencer is programmed for a simple 5-note up-down arpeggio.

Here is a screenshot of the modules.

To play the demo file, you will need SimpleSynth, or some other synthesizer set to listen to the MIDI output of the sequence. Here are the instructions for running the demo with SimpleSynth:

The first preset of the demo plays a basic 5 note up-down arpeggio. The following 3 presets modify it with some basic chord progressions. Presets 5 through 24 use the 'Progression' pitch sequence to introduce a variety of melodic variations. Each of the variations was produced in order by making simple changes to the progression sequence. Sometimes just the length or clock division of the sequence is changed. In some cases, the steps of the progression sequence are programmed to perform a specific effect. Once you are familiar with their behavior, these kinds of variations can be produced extremely quickly. Note that the base arpeggio is not modified at any time, so you can always return to it by programming each step of the progression sequence to 0. Thus using a secondary offset sequence can provide ways to both to introduce variation, and to remove it in a controlled fashion.

Here is an MP3 file with short recordings of all the presets. It was made by using the Numerology tracks sequencer to change presets every four bars (except for preset 3 which is 12 bars). There is also a two bar break between the last progression-based preset (#4) and the first melodic variation preset (#5). The original pattern is repeated for four bars at the end.


V: Next Steps

Jumping back to the early development of Numerology: The result of my initial experiments in building sequences by intervals was that by abstracting one step away, I was able to quickly move many steps forward. I began to ponder the question: If this sort of abstraction could be so powerfully applied to a single concept, a sequence of pitches, where else could it be applied? Next up: Subatomic sequencing: Using discrete patterns for pitch, gate, and velocity.