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:
- Start Numerology.
- Open the file Intervals.ns.
- Start SimpleSynth.
- Set the MIDI Source of SimpleSynth to "Numerology Out 1".
- Hit the rewind button on the Numerology transport, this will trigger a program
change on SimpleSynth to program 5 (E.Piano1).
- Start the Numerology transport.
- Change presets to hear the different example patterns.
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.