By Ludo Smissaert
Seeking for a different way of using the text based Csound score, I wanted to create an orchestra that allows you to type the rhythm of the piece in independently wrapping ftables, in stead of using one i-statement for every note. The duration of notes and also of overlapping notes can be specified completely independently from the table holding the onsets of the notes.
Based on Hans Mikelsons drummach I started with a simple instrument that uses its ftables for storing notes instead of in the vertical oriented Csound score:
reinit.csd or listen: (mp3)
Finally I came to a logic short horizontal notation "language".
In stead of writing start times and durations in the vertical oriented Csound score, you can write successive note durations in one ftable (say f100). When a note overlaps another note the duration of the overlapping note (the first note) will be in a second ftable (say f200), but the first ftable still holds the time between the start of the overlapping note (first note) and the start of the next note. For both tables are independent you can elaborate first your rhythm and elaborate independently "the rhythm of the overlaps", like accents with percussion. This is different from p2/p3 notation in csound score. Both the tables should not necessarily be filled up until the next power of two. They wrap automatically as soon as they detect the wrap sign, which is just an unusual value.
In the first durations table a rest can be written as a duration with a minus. -100 is the wrap sign.
Example 1:
This can be translated as:
f100 0 64 2 1 1 2 -2 -100
Example 2:
This can be written as:
f100 0 64 2 1 1 2 -2 -100 f200 0 64 2 0 5 0 -200
Now the second note has a total duration of a whole note, plus a half note and a half rest (to stop at the end of the rest). But the rhythm has not changed: the notes start still at the same time.
Note the difference in meaning of the two tables:
In
f100: a 2 == 1/2, in f200: 5 == 1 + 2 + |-2|
Also note the zero's in f200. They are there for making the two tables equal in length. A rest (-2 in this case) don't need a zero to line up.
Example 3:
Can be written as:
f100 0 64 2 1 1 2 -2 -100 f200 0 64 2 0 5 0 0 3 0 -200
Example 4:
Can simply be written like this:
f100 0 64 2 1 1 2 -2 -100 f200 0 64 2 6 3 -200
All the notes will overlap, but first with the duration of two whole notes and two halves, then with the duration of whole note and a half. Then it wraps. This is because there are no zero's in f200.
The table need not be filled at equal length. This is interesting because you can make many patterns in this way, if you fill tables at unequal length.
After you got the rhythm right you can start filling your pitch table:
f300 0 64 2 400 709 -300
This will repeat cpspch(4.00), cpspch(7.09) constantly over the notes given in the rhythm table. You can also give more pitches then you have notes in the rhythm table. In that case the first note of your rhythm table will start with a different value at the first wrap.
Example 5:
Can be translated like this:
f100 0 64 2 1 0 0 0 -100 f300 0 64 2 800 807 900 907 -300
Example 6:
Can be translated like:
f100 0 64 2 1 0 0 0 -100 f200 0 64 2 0 4 2 3 -200 f300 0 64 2 800 807 900 907 -300
Now only the first note of the chord does not overlap, all other notes overlap, all with different values.
Below is the instrument. In the score I have written the first 30 bars of Piano Sonata Opus 7 "Der Graefin Babette von Keglevics gewidmet" from Beethoven, using the system described above.
Note: this only works on WinCsound and Canonical Csound for Macintosh