Step-time Composition on the Model 64
Who needs SCI? Billy Cowie has come up with some simple software that enables the Model 64 Sequencer to be programmed in step-time.
A short program that enables SCI's MIDI sequencer to be programmed in step-time.
First of all, a couple of amendments to the earlier Editing on the Model 64 article, published in E&MM June. A few errors crept in to the piece since it left me (Sorry - Ed), the most serious of which was the omission of Figures 2 and 3: these are reproduced below for anyone who's interested, though it should still have been possible to make the program work without them. There were also some syntax errors that should perhaps be cleared up to save further embarrassment - these are as follows. 'Refer to the patches' should read 'refer to the pitches'; 'A "D" dynamic' should be 'A "O" dynamic'; 'beginning at "D"' should be 'beginning at "O'"; and lastly 'Input "B"' should in fact read 'Input "3"'.
Now to this month's program.
The normal mode of operation of SCI's Commodore 64 Sequencer is in real-time. This means you play your sequence on a MIDI keyboard instrument (such as the Yamaha DX7) and the sequencer reproduces it exactly as you played it. You can of course speed the sequence up, overlay it with another and also correct it time-wise to a drum machine rhythm. However, other sequencers work in a different way, where the notes and rhythms are entered numerically in what is known as step-time. This technique has certain advantages over real-time composition: the music can be created by someone with no keyboard ability, sequences of great complexity and subtlety - which would be almost impossible to play manually - can be recorded without trouble, certain types of music that require extreme precision (modern dance music is one example) can be easily written, and lastly, the technique is usually faster and easier to correct. Of course, some musical forms, notably classical music, are not suited to step-time composition, depending as they do on nuances of performance. The musician must choose whichever method is suitable for his or her style of composition.
MIDI systems are ideally suited to steptime composition, and because the Model 64 sequencer is based around an accessible microprocessor, programs can be created which are not only user-friendly but also tailor-made to the requirements of the user. Thus, instead of being faced with a series of numbers to remember (as in some systems), the player can design software that is intelligent: one program may be designed for simple monophonic sequences and be extremely simple to use, while another might be more complex, to include polyphonic sequences with pitch bend, voice changes, and so on.
The sample program printed here is complex enough to give the user some idea of the possibilities available, but obviously concise enough to fit into a magazine article. It enables the production of fully polyphonic sequences with a considerable dynamic range, incorporating note durations from semiquaver to semibreve and also rests.
In the Editing article referred to above, we saw how it was possible to retrieve the stored information for an existing sequence, doctor it, and then return it to tape or disk so that it may be used in its new form. This time we must start from scratch and create a completely new data file that matches the normal ones. When it's fed into the sequencer, the machine will be unable to tell the 'counterfeit' file from a real one.
The data in the files is in two parts: a central core of information regarding the pitches, duration and dynamics of the notes (arranged in groups of eight numbers per note) and a surrounding shell of numbers that contains general information on the sequence, its length, name and formats.
After the input of a new filename (n$) and the length of the sequence, the program moves to a subroutine to get the hard information regarding the sequences (nos. 1000 to 1300). After a prompt to remind you of the codes, the sequences are fed in very easily. The note is put in first by its letter name (B, F, C etc.) followed by its duration (C for crotchet, S for semiquaver etc.). Notes outside the octave range above middle C are prefixed by either H (for octave higher) or L (for octave lower) or any number of these: LLC is the bottom note of the DX7 while HHC is the top. A prefix of > (louder) or < (softer) or any number of these raises the dynamic level of that note. A prefix of # raises the note by a semitone and the prefix of a D before the duration value adds half again to the duration. An input could be A C (crotchet A, normal dynamic) or >>>H#F DS (a dotted semiquaver F sharp an octave above middle C and three steps louder than normal!). A rest may be fed in by inputting R followed by its duration in the normal way.
The music is fed in in a linear fashion, ie. the top melody line, then perhaps the bass line, then the individual harmony lines. At the end of each complete line, an X input draws a string of **** on the screen and the next line can then be started. In order to make the whole process clearer, as the notes are fed in they are printed with their duration on the screen in letters. After all the notes are fed in, the £ input tells the computer the sequence is complete and it moves on to the next stage in the process.
The program itself uses GET statements to obtain the information and converts the letters into the corresponding numbers. The pitch conversion is straightforward, and the dynamics take a neutral 75 and add or subtract ten for every > or < before the note. Timing conversions are slightly more complex, because the computer must convert a duration into a start and stop time, which it does by summing from zero at the beginning of each new line. A fifth placing number (which is actually the first in the array) is used in the sort process. An interesting point is that no key pressed needs to be shifted (eg. the # sign is stood in for by 3, its lower case companion) thus making the input of information much faster.
The computer must now do a few sums, which may take up to 30 seconds (for a complex polyphonic sequence) to complete. What it's doing is sorting out the starts and stops of each note into their logical positions. If, say, a long note is held right through the sequence, its start-up command might be the first information the computer needs, while its stop time might be the last. A simple sort (1320 to 2000) does the trick, and we return to the beginning of the program.
Nos. 30 to 410 create an array (B) and fill it with the correct numbers. Of particular interest are 80 to 94, the numbers which we already input; 175 to 205, the name of the sequence; and 240 to 260, 15 noughts which are actually the spaces where the overdubs would go. Having completed the array, the computer first prints it onto the screen and then inputs it into a storage device (in this case a disk).
Once the new sequence is safely stored, the Sequential Circuits cartridge can be inserted (once again, switch off first) and the sequence loaded normally. The sequences may be overdubbed as with any normal realtime sequence.
Further refinements precluded by space here are an error command that enables the user to correct any mistakes while inputting the sequence, pitch controls, program changes, and so on. The easiest way to find out how to control these aspects is by running trial sequences on June's Edit program and examining the data.
Gear in this article:
Feature by Billy Cowie
Previous article in this issue:
mu:zines is the result of thousands of hours of effort, and will require many thousands more going forward to reach our goals of getting all this content online.
If you value this resource, you can support this project - it really helps!