concatenativish music tracker

Brent Kerby — 2001-04-29 02:47:44

Hi, all concatenative people... Manfred, Billy, John, and others who may be
lurking... I know I haven't posted anything here for quite awhile, but I'm
still here and have been reading most of the posts.

I'm really happy to see ye all working on the new system.

Anyway, I just wanted to let you know about a project I'm starting work on:
a music tracker. You may have heard of trackers such Impulse Tracker or Buzz
Tracker. These are cool, but they're quite tedious to write music for. The
goal of this project is ultimately, I hope, to produce a tracker that is so
speedy and easy to write with that live improvision is even practical.

Here are some ideas of how to achieve that goal:
- allow patterns to trigger other patterns, just like patterns trigger
samples. Thus patterns could be reused without resort to tedious
cut-and-paste.
- encourage a style in which patterns are simple, defined usually in a
single line, a la FORTH. thus there should not be mostly blank volume,
instrument, and effects columns and blank rows wasting space.

If patterns are going to be written in a single line, we need a compact
notation. Here's an idea...
We use the letters "a" through "y" to start notes (this is a two octave
span, if we're using the chromatic scale). But before you can play a note,
you must have a number on the stack telling which instrument (or pattern) to
use.

Wait, why have a stack of instrument numbers, instead of just a single
current instrument?
Well, a stack is useful so that we can write a pattern that may be played
several times
using different instruments. In order to use such a pattern, one would have
to have two items on the stack: the number of real instrument making the
sound, and on top of that, the number of the generic pattern. Also, one
could conceivably make generic patterns taking two instruments; then, one
would probably need combinators to fiddle with them: "swap", "dup", "zap",
etc. (i propose "zap" as a cooler name for "drop" or "pop")

What about rhythm? we do not want blank spaces everywhere. so we do this:
have all notes by default take up note beat before moving to the next (at
which point the previous note is cut off, or terminated gracefully). So we
introduce some symbols:

"." holds a note for an extra beat (may be used repeated times, for real
long notes)
";" cuts the length of a beat in half, for making eighth notes.
"," cuts the length of a beat in three, for making triplets.
"'" cuts the length of a beat in four, for sixteenth notes.
"-" doubles the length of a beat, for restoring a beat that was cut in half,
or if many long notes are coming.
"=" triples the length of a beat.
"/" quadruples the length of a beat.

Except for ".", all of these cause a permanent change in the tempo. Here's
how the melody of Twinkle Twinkle would look (by convention, "m" is used as
the tonic note, i.e., the main note that the song would like to resolve to):

mmttvvt.rrqqoom.ttrrqqo.ttrrqqo.mmttvvt.rrqqoom.

Too bad its so simple that we didn't have to use any of the special rhythm
devices. Okay, how about the Alphabet song, based on the same melody (hope
you're reading with a fixed width font):

mmttvvt. rrqq;oooo-m. ttr.qqo. ;ttt.-r.qqo. (...)
lyrics: abcdefg hijk lmno p qrs tuv w x y&z

Well, i've probably bored you all to death, if you're not musically
oriented. but if you happen to have suggestions or questions, feel free...

there is some slightly working source code, available at
http://www.tunes.org/~iepos/kt-0.0.tar.gz, but it's not very good and needs
to be rewritten.

there is no real working volume control or combinators yet. also, to play
two notes or patterns simultaneously, enclose them in "[]"s... but i doubt
this is the most elegant way this could be done.

cheers.
- Brent Kerby