probable music

How to use the KCS Omega to create algorithmic music

other things

Introduction

The KCS Omega is a powerful midi sequencer written for the Atari computer. Thanks to the STEEM Atari emulator this software can now be run on a pc, and I have just heard that there is also an Atari emulator available for Macs. I have written this article in response to discussions on the atari-midi group, and in response to email I have received about some of my other articles. At the time of writing it appears that there isn't anything similar to this information publicly available. At the end of this article there are relevant links to get you informed, set up and running, but to start with you might want to read the related articles on this site on algorithmic composition and also using Hubi's midi loopback alongside the STEEM Atari emulator and a softsynth on the same pc.

The purpose of the article you are now reading is to explain how to use the KCS Open mode to create algorithmic music. It assumes you have some basic knowledge of the KCS Omega, and midi in general. If not, then you might want to check out Tim Conrardy's site for help.

Getting Started

The default start up page of the KCS is the track page. This is where you do most of your midi recording. If you are using KCS as a 'bread & butter' sequencer you may well spend the majority of your time here, recording, playing back, muting and un-muting tracks and so on. There's a little box near the bottom left of the screen that takes you to the track edit screen. This screen shows the midi data displayed as a list of data. Towards the bottom right of the screen are a bunch of small squares which will either be empty, or contain the corresponding track number for any track which contains midi data. You can navigate from one track to another by left clicking on the appropriate box. At the bottom right of the screen there is an option to go to Tiger mode - a piano-roll type display, and also an option to go into Open mode.

We'll be spending a fair amount of time in Open mode, so lets take that option and really get down to business.

Opening Moves

OK, so by now you should have navigated yourself to Open mode, and hopefully taken at least some time to familiarise yourself with the overall KCS environment. If you haven't done this, I suggest you do so now because from here on in I'm assuming that you can read joined-up writing.

Random Sequences

This section will explain how to link three sequences together at random.

Tip: You may find that you want to stray from the actions outlined in this example, as you work your way through it. In order that you can get back to the state that you departed from, I suggest that you regularly save the work in progress as a .ALL file, so that you can return to the tutorial later.

1. If you aren't there already, go to Open mode.

Seeing as we are in Open mode it's an opportune moment to familiarise ourselves with nomenclature. In KCS, the piece you are working on is called a song, and is normally saved as a .ALL file. Songs consist of arrangements of tracks and/or sequences. A track is pretty much the same as a sequence, i.e. a collection of midi data. What is referred to as a 'track' in Track mode, is called a 'sequence' in Open mode. Depending on which mode you are in you can access options to convert a track to a sequence, or a sequence to a track, to facilitate sending data from one mode to another.

2. Go to File->New to clear everything in memory, and so start with a clean slate. Given that we're starting a new song there will be only one sequence at the moment, containing a single DE event.

DE means a deleted, or 'nothing' event. A DE event will not sound when a sequence or track is played.

If you look at the little sequence boxes at the bottom right of the screen there will be lots of empty boxes, with a '1' in the top left corner.

3. Click on the box immediately left to this.

You've just opened a new sequence. If you've done it correctly this will be sequence number 2. Rename this sequence 'Starter', by left-clicking by the Name label near the upper right of the screen.

4. Open up sequence 3, and rename it C2.

In the next step we're going to wrote in some music data to this sequence, but before we do so I'll go over some number stuff in order to give you a feel for how note durations are represented in text form.

When you start a new song in KCS, the default settings are 120 Bpm, 4/4 timing assumed, and 960 steps per bar. You can alter these settings in the Environment page if you so wish - but at the moment we don't want to do that.

The table below shows how many steps there are for a range of note durations.

Note Duration Number of Steps
1 bar 960
3/4 bar 720
1/2 bar 480
1/4 bar 240
1/8 bar 120
1/16 bar 60
1/32 bar 30

Table 1: Note durations expressed in steps at a 960 steps per bar setting.

If you are using a midi keyboard Tiger's piano-roll screen may well be a more attractive and intuitive way of editing note durations, but for the purposes of this article, we're concentrating on Open mode, so the above table will probably come in handy.

If you look at the main data display for the track sequence you'll see that the midi data is arranged in a series of columns.

KCS Open Mode

Screenshot 1: KCS Open Mode. The highlighted section contains the column headings, detailed below.

Each column is labeled thus:

MSR -BT: ST this as pretty much equivalent to the absolute midi location, expressed in measures, beats and steps.

EVNT Each entry in a sequence is consecutively numbered.

TIME The number of steps between the current event and the preceding one.

CH The midi channel on which the event occurs.

TYP The type of midi event. This can be ON for a midi note on message, or as will be seen later can be a range of proprietary midi types unique to KCS.

NOTE Normally a musical note.

VEL Normally the velocity of the note.

DUR Normally the duration of a note.

As will become clear because of the proprietary midi events unique to KCS the above is only a general guide and there are some variations to these general rules.

Don't worry if you don't understand this now, it will become clearer as you work through the example.

5. Left click under the TIME column, left of the DE event. You'll see that the data here is highlighted. This data is 0 at present, and we don't wish to change this, so just type in 0 until you move to the CH column, where we set the midi channel. Type in 1, then hit the space bar until you get to the TYP column. As we want to add a midi note on message, type in ON. Under the NOTE column, type in C2. Under the VEL column type in 100, and finally in the DUR column type in 60.

If all has gone well you should see this:

The work in progress

Screenshot 2: Our work in progress

What this means is that as soon as this sequence starts, a midi note C2 will play with a velocity of 100 for 1/16 bar.

6. Using the same technique as above, add a DE event 960 steps after the note on event.

This stage completes the work on sequence 3 for now. You've created a sequence, 1 bar in length with a single 1/16th note C2 at the start of the bar. Time to check out this masterwork.

7. Go to the Open mode play screen by left-clicking on the box next to the words Play Screen. You'll see a series of numbers, corresponding to the sequence numbers, next to which are the names of the sequences.

8. Press 3. Sequence 3 will start playing. You'll hear a single C2 repeat every bar. If you don't hear anything, check all your midi and audio settings until you do hear something.

9. Press 3. The sequence will stop. I'm sure you'll agree, it's the ultimate in minimalism. All the same, the ability to trigger off sequences at will from your QWERTY keyboard might suggest novel ways of performing music. Using the rather obscure align function, it's possible to get sequences to start bang on time...but that's beyond the scope of this article.

10. Left-clicking will get you back to Open mode edit page. Make sure you are back with sequence 3.

11. Left-click the clone sequence box. This brings up a dialogue with the default setting of cloning the present sequence to the lowest numbered available sequence, in this case sequence 4. Choose sequence 4, open up sequence 4, and rename it D2.

12. Using the edit procedure outlined above, edit sequence 4, changing the note C2 to D2. Don't change anything else.

When I'm writing in Open mode I often check my progress by listening to sequences in the play screen after each sequences has been completed. It saves a lot of debugging later if you try things out as you go along. I'll assume that you'll be doing this from this point onwards. If you try out sequence 4. you should hear a 1/16th note D2 play every bar.

In the next stages we're going to play with some of the unique KCS event types, and introduce the random features promised at the outset.

13. Go to the Starter sequence, i.e. sequence 2.

14. Replace the DE event with a RA event, then in the next column type in 2.

The RA event is a random event. It always has a value associated with it. The RA event chooses one event from a set number of following events. So in the above example, following the RA event, only one of the next 2 events will be chosen at random.

15. Underneath the random event, at zero time off set, insert an ST event, NOTE = 3, VEL = 0, and DUR = 1.

The ST event is used to start a sequence.

In the above example, sequence 3 is to be started, and it is set to play only once.

16. Under the previous event, at zero time offset, insert an ST event, NOTE = 4, VEL = 0, DUR = 1.

17. At TIME = 960, insert DE event. If everything has gone well you'll see:

The completed starter sequence

Screenshot 3: The Starter sequence in all its glory.

What this means is that each time sequence 2 plays, it will trigger off either sequence 3, or sequence 4 at random.

18. Try this out by using the Play screen, and pressing 2 once. OK, so it's hardly musical genius, but by now you should be getting a feeling for how the Open mode system works, and ways in which you could adapt these techniques.

It would be a good idea to save this work as a .ALL file now, as we'll work on this some more soon.

Taking Stock

What I suggest you do now is muck around with this file a bit.

For example:

Adjust the file so that you get a random note every 16th. (Hint - adjust the length of the Starter sequence.)

Adjust the starter sequence so that there is a 1 in 3 probability of C2 sounding, and a 2 in 3 probability of D3 sounding.

What about incorporating some sequences containing controller information to run concurrently with the note data?

If you've had a go at the examples, then you're well on the way to understanding the KCS system, so it's time to reveal all the proprietary commands.

Event Type Function
AC Accelerando
CU Wait until cue
DC Decellerando
DE A deleted, silent event
MS Mute sequence
PT Transpose sequence pitch
RA A random event
SM Steps per measure
ST Start a sequence - specify times to play in the DUR column. If you append the times to play with a W, then the triggering sequence will pause playing until the triggered sequence has played through the correct number of times.
TM Absolute tempo value
US Un-mute sequence
VT Velocity transpose
XL Sequence stop at end of loop
XX Sequence stop

Table 2: The special KCS control events

Up to now all the work we have done concerns calling up sequences at random. There is no particular relationship between the sequences, and so all we are getting is random notes. In the next section we'll create some algorithmic music which is a lot more musical. Hopefully this will give food for thought about a completely different approach to music. I'm going to assume that you've got a feel for how you type in and edit data, in order to cut down on the repetition. To save you a lot of time, I suggest you make plentiful use of the clone function.

The Ups and the Downs

In this example we're going to take the notes from the scale of C major, and rather than just have them play at random, we're going to impose some sort of order on them. The question I ask myself when starting a KCS algorithmic composition is 'what sort of system do I want to create?' The KCS is virtually unique in that it is very open-ended, unlike the vast majority of algorithmic aids, which have to be approached with the attitude 'what will it let me do?'

In this instance the simple requirement is that each note will be followed by a neighbouring note in the scale. Therefore this music will be generative in the sense that the past shapes the future. Alternatively, this level of composition is akin to micro-programming. The results of our simple exercise won't be the most exciting music ever heard, but using just the techniques outlined below, it is possible to create fully-fledged, complex pieces.

The Plan

In order to achieve the desired effect we're going to set up a sequence for each note in the scale. Once the note has sounded we're going to use the RA event in conjunction with the ST event to set another sequence, and hence note sounding, and so on. I've outlined the overall system below in table form, a practice that can be useful when you want to get an overview of the system As we are starting with the .ALL file obtained from the last example, we will be able to knock this one out very quickly.

Sequence Number Note Next seq. to play
3 C2 4
4 D2 3 or 5
5 E2 4 or 6
6 F2 5 or 7
7 G2 6 or 8
8 A2 7 or 9
9 B2 8 or A
A C3 9

Table 3: Outline scheme for Ups and Downs piece.

1. Go to sequence 3.

2. Amend the the last event (i.e. EVNT 3, the DE event), so that TIME = 60, TYP = ST, NOTE = 4, VEL = 0, and DUR = 1.

3. Go to sequence 4.

4. Amend the the last event (i.e. EVNT 3, the DE event), so that TIME = 60, TYP = RA, NOTE = 2.

5. Follow this event, at TIME = 0 with TYP = ST, NOTE = 3, VEL = 0, and DUR = 1.

6. Repeat step 5, replacing NOTE = 3 with NOTE = 5, in order for sequence 5 to be started.

So, up to this point we've amended the length of both sequences, so that they are reduced top 1/16 note length. In the case of sequence 4, once it has sounded the D2 note, it will then start off either sequence 3 or sequence 5.

7. Clone sequence 4 to sequence 5.

8. Rename sequence 5 E2.

9. Now edit this sequence so that it plays E2 rather than D2. After this amend the values following the ST commands, in order that either sequence 4 or 6 is played.

10. Continue with this cloning and editing procedure until you have assembled all the notes for the scale. Don't forget to try out your work in progress using the play screen as you go along.

It isn't possible to provide a meaningful screenshot of this piece, but if you would like to compare your version with my effort you can find the completed piece here.

Future Moves

This is as far as the step by step tutorial goes. This section will recap some of the work done, and give some hints for other techniques. By now you have seen how to use KCS on a 'macro' level, jumping between one sequence and another. Although in our example, each sequence only contained a single note, it could contain an entire musical phrase. This method can afford some repeatability, and seems particularly suited for drum programming, or sending lots of controller data.

The second example extended these techniques, delving in to a 'micro' level, whereby the relationship between notes (i.e. sequences), although probabilistic was constrained by rules that we designed into our composition.

When I first started using the KCS algorithmic features, I did not have a written tutorial to guide me through, and so had to figure out most of the features for myself, studying some example files lurking on an ST Format cover disc. Hopefully this article will put you at a head start. I'll finish with some general tips and pointers.

-As I've emphasised above, it is very useful to think about the overall design of a piece. Writing out what sequence goes where and what each sequence does makes writing the code a bit simpler, and means that you are less likely to lose your way.

-The two pieces worked on in this article are rhythmic, with sequences of the same length. As such, everything is working synchronously. For more free-floating pieces, you may want sequences of different lengths all running asynchronously. Whether a piece is synchronous or asynchronous has implications for its design. In an asynchronous piece, you can't rely on events happening at specific times, as sequences will be drifting relative to each other.

-A feature of the ON command is that if you set the DUR to zero, and the VEL to greater than zero, then a note will sound indefinitely, until another ON command is sent, with VEL zero. This ability to separate note on and note off information can be used to your advantage in compositions.

-When using the ST command to start a sequence, the W suffix that can follow the number of repeats can be a useful way to introduce rhythmic variety into a composition. For instance you could send a note on, of duration 0, then call up some 'rest' sequences at random in conjunction with the W suffix. The triggering sequence will thus pause until the rest sequence plays through. If you then place a note off message in this sequence you can thereby introduce notes of varying durations.

-With regards to harmonies in asynchronous designs, it can be useful to sound a note with one sequence, and to send a note off event in another sequence. If you precede a note on command with a series of note off commands, to silence any unwanted intervals, you can arrive at any required harmonic structure.

-As stated in the introduction, with the advent of Atari emulators, and midi loopback devices you can run the KCS alongside a softsynth on the same machine. The KCS would make a great partner to a controller-driven application like Audio Mulch. For instance you could set up custom LFO's or modulation envelopes, within KCS, combine these algorithmically, and then map them to the parameters within Audio Mulch.

Resources

Midi Tutorial at Beatnik http://www.beatnik.com/software/tutorials/midi/midi.html

Tutorial on MIDI and Music Synthesis http://home.earthlink.net/~mma/about-midi/tutorial/tutor.htm

Croatian MIDI pages. Excellent tutorials http://www.hr/music/midi/literatura/tutorials.html

TweakHeadz Lab. Rich's excellent MIDI site. http://www.tweakheadz.co

Atari matters. Tim Conrardy is a tireless Atari enthusiast, and runs an excellent site. http://tamw.atari-users.net

Hubi's midi loopback is a handy little application that facilitates running a sequencer alongside a seperate softsynth on the same machine. There are instructions on how to use this software in the articles section.

STEEM is an Atari emulator for your pc. Thanks to STEEM it is now possible to run hitherto unavailable software on a pc.

ST Format is where you'll find an archive of all the free software that appeared on the cover of the now defunct ST Format magazine. The software is already in a disc image format, so it will run seamlessly under STEEM, or on an Atari. This is where you will find the KCS Omega.

email me if you have any comments or questions about the article. I can send you .ALL files, and CDs of music too.

You'll find my music here.

This article written by Tim Wilson, 2001. http://www.stillspace.co.uk

 

 

More articles