MIDI SEQUENCE GENERATOR V4.0



1. Introduction



Hello and welcome to the MIDI SEQUENCE GENERATOR (MSG). Since you probably 
received it as 'algorithmic composing' or 'compositon tool' program, I would 
like to give you some information about what MSG *really* is.



It is a tool. To be more precise, it is a tool that is able to perform 
operations other music programs do not provide. As it has grown over the last 
several years, it is now a collection of modules which I found useful (and I 
wanted for my own use). To allow flexibility, some modules have a lot of 
options and therefore are complex.



An important point is: you *can* keep it simple. You do not have to dive into 
the complexities of MSG. You can start the program and with a few mouse 
clicks you have generated your sequences. On the other hand, you stretch and 
bend and twist sequences (nearly) as much as you like. You can load Standard 
MIDI Files, and you can do it to them as well.



If you like to fool around with music, you will like MSG - of that I am sure. 
But I would like to remind you that MSG is not a realtime program - no 
sequencer, no arranger or what else. Okay, you *can* replay any sequence, but 
unfortunately the timing is not convincing - I did not want to invest time in 
programming something that already exists in much better form.



There is another reason for that - the ideas of MSG. Basically, there are two 
of them.

1) To generate a lot of different sequences in quite short a time. After 
loading them into your sequencer, you select *there* what appears most 
interesting to you. That can be a fragment of one sequence, or the coupling 
of several whole sequences, or anything between. To point it out: you 
generate much more material than you need and then pick out the best.

2) To perform a special task you cannot perform with your sequencer program. 
Try to transform a long solo from d minor to phrygian scale in f flat - with 
MSG you need about 30 seconds for that. Or try to generate an accelerating 
sequence while the drums beat steadily on 120 bpm - again no problem with 
MSG.

You will find both examples as parameter and midi files in the MANUAL\CH01 
folder.



For these purposes, you need not necessarily hear the sequences 
*immediately*. While following idea 1), you know you will select later, while 
following idea 2) you exactly know what you want.

Do not get me wrong - I do not say that you do not need to hear the 
sequences. You must to create good music. But not urgently during your 
session with MSG.





2. Getting started



You should find the following files coming with MSG:

   MSG4.PRG     the program

   MSG.RSC      the resource file

   MSG.INF      the data file

   MSG.GBL      the file to store global information

   MENGLISH.TXT english manual, this file

   MDEUTSCH.TXT german manual

and the folder

   MSG4         that contains a collection of parameter files.



Simply click on MSG4.PRG, and the program starts.





2.1 A brief session with MSG v4.0



After the start, the screen displays the MAKE module. A lot of parameters are 
adjustable and several submenus accessible, but never mind. Just hit RETURN 
(not ENTER), and MSG generates your first events. You can see it in the lower 
right corner: the display changed from 'SEQUENCE: 0 of xxxx' to 'SEQUENCE: 32 
of xxxx.' xxxx is the maximum number of events for your computer memory (I do 
not know which number will be actually displayed, for that depends on the RAM 
of your ST and the accessories running).



You want to see how the sequence looks like? Very well. Try and hit F1. The 
screen changes to the EDITOR module. On the left there is a grid, on the 
right a numeric display. If you think it resembles the good old Steinberg 
Twenty-Four editor screen, you are right. I think you easily recognize what 
is going on - the event number, position, pitch, velocity, length, channel, 
and layer are displayed. On the bottom is the aforementionend replay routine, 
and the input tool as well. Yes, you can input notes from your keyboard - 
but, please, this is a step editor. I do not know what will happen if you 
play too many notes at once, or too quickly... but this is one of the things 
a sequencer does better than MSG.



Like to have a different look? Ok, hit F2. This is the DISPLAY. You 
will see position and pitch. Now click on the AXIS DISPLAY button. A dialog 
appears, and now you can select any form of display you like, as all 
components are accessible. This flexibility will come in handy when we come 
to the point of selecting events to process them.



To conclude your first session with MSG, hit Control-F. The sequence will be 
saved as Standard MIDI File. After saving, quit MSG with Alternate-Q, start 
your sequencer program, load your just generated Standard MIDI File, and 
then... well, you know what to do now, do you?

Oh - you could not save your sequence as Standard MIDI File? Then you 'only' 
have the demo version. There are some MIDI files I generated with MSG in the 
MSG folder, to show how it works. Just test the program - all options except 
MIDI LOAD/SAVE will work. If you like MSG, contact me and buy it (DM 89).



So much for the briefest of sessions.



Let us now go into the details of MSG. For many modules you will find 
examples in the folders of MANUAL with parameter, MSG-own (*.SQC) and midi 
standard files.





2.2 General handling



I am sure you are well acquainted with the Atari menus. If a short cut for an 
entry is available, you can look it up here.

Several different menus will be accessible, depending on the module. From all 
modules, you can switch on the screen saver, or display the 'About' screen.

There are the 'open' modules with menu titles 'Process' and 'Seq/Para'. They 
allow to branch in all the GENERATE, VIEW/SELECT and MODIFY modules (Process 
menu). The Seq/Para menu provides you with load/save options for the sequence 
(EDITOR, DISPLAY) or the parameters of the module (all others). Moreover, you 
can printout the sequence or delete events, or save it as Standard Midi File. 
Last not least are the CLIPBOARD functions, and the GLOBAL options.

The other menus provide you with fewer options. Most common are the load, 
save, and initialize options. For the probability tables, random or rotate 
options may be available.



The mouse handling is perhaps a bit different. If you are going to change the 
value of any parameter, there are the following options:

1) Click left. Normally, the value is increased by 1. Non-numeral parameters 
are increased. A wrap mode is implemented, so that the value will switch to 
the minimum if the largest value is exceeded. If the value is a note position 
or a note length, a box appears and you will have to enter the desired value 
directly.

2) Click right. This is similar to a click left, only that the values will be 
decreased instead of increased.

3) Click both buttons. If you want larger increment or decrement steps, press 
the other button, too.

4) Click any button while CONTROL is pressed. When available, a box appears 
which let you enter the value directly. This is available for numerical 
values, for pitch values and for modes and keys.



A simple UNDO function is implemented. If you want to UNDO the last 
operation, press UNDO (I did not want to lay that function on the HELP or 
BACKSPACE key, ha ha...). The 'old' sequence and a text UNDO appear. Press 
UNDO again to return to the 'new' sequence. If you perform an operation with 
the 'old' sequence, the 'new' sequence is lost.





3. Modules



3.1 Events, sequences and modules



MSG generates, modifies and handles EVENTS. An event is - currently - a 
single note, which consists of the components PITCH, VELOCITY, POSITION, 
LENGTH, CHANNEL, and LAYER. The first five components are used by every MIDI 
music program. LAYER indicates different runs of generation. You can generate 
some events first, then some more and merge them to the others. In that case, 
the events of the next generations have another LAYER value.

All events in all layers make up the whole SEQUENCE. You can see how this may 
look like when you take at the look at the folder MANUAL\LAYER. There is a 
Midi file that contains drums, bass, two arpeggios, and a solo. Your 
sequencer should load these parts to different tracks. If you look at the 
whole sequence in the EDITOR of MSG, you can see by the LAYER column which 
event belong to which layer. If you select any single layer with SELECT 
EVENT, you can see it graphically in DISPLAY as well.



The operational part of MSG consists of modules, some of them allowing access 
to submodules. All of them belong to the GENERATE group, the VIEW/SELECT 
group, or the MODIFY group. Just check the entries of the PROCESS menu. You 
find all currently implemented modules there.



With the GENERATE modules, you fill the memory of MSG with events, even if 
you 'only' load data from a Standard MIDI file.

The VIEW/SELECT modules make the events visible and selectable.

The MODIFY modules will modify events. IMPORTANT: all modify functions are 
only applied to SELECTED events. When displayed in the EDITOR, a selected 
event has a checkmark in the rightmost numeric column, and is filled in the 
DISPLAY.



Once again: if there are no events marked as SELECTED, no MODIFY operations 
can be applied.



As mentionend before, you can generate many event layers - as long as the 
maximum number of events is not exceeded. If you try to generate events when 
others are in memory, MSG will prompt you to decide how to continue: you can 
append the new layer to the old, you can delete the old events or you can 
merge or insert the new layer to any point. Every run gets a new LAYER 
number. Hence, subsequent layers can easily be identified.







3.1 GENERATE MODULES



3.1.1 MAKE



You already know the MAKE module, as it is displayed when you start the 
program. It allows you to generate sequences 'out of nothing', but gives you 
a lot of control as well. This module allows to create any event components 
completely independent of each other.

There are three rows for PITCH, VELOCITY, and LENGTH.



There are the following parameters for PITCH. VELOCITY and LENGTH have fewer 
parameters, but they do the same as described for PITCH.

* GENERATE/SKIP. You can select whether or not PITCH values will be 
generated. At first sight, this seems useless, but there is an idea. Imagine 
you have a sequence with PITCH values you want to keep. However, you want to 
change VELOCITY and LENGTH (and POSITION, see end of this section). Then it 
is simple: you set GENERATE NOTES to the length of the sequence and in the 
PITCH row you change to SKIP. Then hit RETURN and select DELETE OLD SEQUENCE.

As you do not generate new PITCH values, the old ones remain.

* LOWER and UPPER limit are clear - no PITCH value will appear which is 
outside of these limits.

* MODE and KEY should be clear as well - inside the limits, only the PITCH 
values belonging to the selected combination of MODE and KEY are allowed. 
They are displayed directly below.

* EDIT PROBAB. TABLE. A click on this button accesses a sub module. There, 
you have more control over the possible appearance of every PITCH value (see 
ch. 4).

* FUNCTION. There are a lot of functions for the generation available. Among 
them are e.g. random, mathematical, fractal, and arpeggio functions. Click on 
the small button right of the word FUNCTION to step through the sub groups, 
and the large below to select a function. The functions are described in 
detail in ch. 5.

* PARAMETERS A-I. Many functions need up to nine parameters which are of 
course adjustable. The parameters used for the selected function are 
displayed in the box below. A click on this box generates random values for 
all nine parameters.

* ENVELOPE UPPER/LOWER MODE, EDIT ENVELOPE. The concept of the UPPER and 
LOWER limit is insufficient if a sequence with gradually changing limits is 
to be generated. ENVELOPE is a sub module for that purpose. The four 
different envelope modes for the UPPER and LOWER envelope can be changed in 
the main module. The edit parameters of the sub module are described in ch. 
4.



On the bottom you can change the number of events in the box GENERATE xx 
EVENTS, and set two values for the MIDI channel. If these two values are 
different, the first event of the layer will have the left CHANNEL value. For 
the next value, the CHANNEL value will be incremented. If it is higher than 
the right value, it will be set to the left. If the left value is higher than 
the right, the CHANNEL values between will be excluded. This is something 
like the ALTERNATE MODE of my YAMAHA TX81Z synth.



To generate an(other) event layer, hit RETURN. Ah, I nearly forgot - the 
events are generated legato, so their POSITION depend on the LENGTHs of the 
events before. It follows that these event layers are monophonic.

Perhaps you wonder why there are no limits for LENGTH in this module. This 
proved impractical - it is simpler to use the probability table (ch. 4) to 
switch note lengths on and off.





3.1.2 RHYTHMN



This module generates polyphonic sequences, well suited for the combination 
with drum sounds. Eight different 'instruments' can be generated 
simultaneously. The parameters for these eight instruments are as follows.

* INSTRUMENT. This is the uppermost, big button. Click left means that it 
will be switched on (black) or off (white). Click right accesses the sub menu 
where PITCH number and name can be edited (cf. ch.4).

* CHAN. This is the MIDI channel for the instrument.

* MEASR. The measure which is the base for the calculation of the instrument, 
important for the velocities below.

* HI VEL, MD VEL, LO VEL. The velocities for stressed, medium stressed, and 
not stressed positions in the measure, respectively.

* MESH A. The distance between two possible events of this instrument.

* OFFS A. An offset can be specified. An example: you want 1/8 notes, but not 
on 0/8,1/8,1/4 etc but on 1/16, 3/16, 5/16 etc. In that case, you enter for 
MESH 1/8 and for OFFSET 1/16.

* DENS A. The DENSITY means how often an event will appear out of 100 times. 
Hence, if set to 0: never; if set to 100: always, if set to 30: 30 times yes, 
70 times: no etc. A click on the small coloured pad left sets the value to 0.

* MESH B, OFFS B, DENS B. There are two MESHes for each instrument. They are 
additive.

* LOOP 1/8. Each instrument can be looped individually. A click on the small 
pad left sets the value to that showed below under GENERATE xx HALF NOTES. 
This is very useful to generate variable drum loops. When I use this module, 
I always enter for the bass drum two or four bars, for the snare the double 
length, and for the hihat an odd value, e.g. 19/8. Then bassdrum and snare 
will be tight to 4/4 and the hihat will shift gradually.



The global parameters are:

* REPEAT LOOPS. If an individual loop is shorter than the whole length, you 
can decide whether you want the instrument to be repeated until GENERATE xx 
HALF NOTES or not.

* GENERATE xx HALF NOTES. Determines the maximum length of the layer. The 
actual length of the layer can be shorter, if all individual loops are 
shorter and REPEAT LOOPS is NO.



Again, generation starts on pressing RETURN. The length of each note is set 
to 12 ticks (1/64).





3.1.3 DRAW



Here is another unusual way to 'play' a sequence. When you select this 
module, a grid and four parameter boxes appear. The idea is to mouse click in 
the grid. An Event will then be appended. PITCH, VELOCITY and LENGTH (and 
POSITION through it) are set according to the parameters, which are as 
follows.



* DRAW MODE. Describes the axis display. PITCH can be coupled with VELOCITY 
or LENGTH.

The PITCH and VELOCITY values are the same as currently set in the MAKE 
module.

* LENGTH. An event LENGTH between 1/16T and 1/2. can be edited.



Naturally, the grid displays only PITCH and on the other axis either VELOCITY 
*or* LENGTH. When the combination is PITCH/VELOCITY, the length according to 
the selected LENGTH boxes is used. When the combination is PITCH/LENGTH, the 
LOWER LIMIT of the VELOCITY is used.



Here is an example of the usage of this module. You select a DRAW MODE: 
'Pitch on Y, Velo on X' and click on the '1/8' LENGTH box. Then you click 
somewhere on the grid. For a moment, the rectangle below the mouse turns 
black. That means that you have appended one event. The box below the DRAW 
MODE box now changes: there is one event more, and the next insert position 
is displayed. The parameters of this event are: PITCH and VELOCITY according 
to the grid, LENGTH according to the LENGTH box. Then you click again on the 
grid, somewhere else, an you have another 1/8 note with another PITCH and 
VELOCITY value. And so on until you leave the module.





3.1.4 LOAD MIDI



This module is easy to understand. In fact, it consists only of one file 
selector box. You select a Standard MIDI File, and MSG opens it and extracts 
the note events. Then you can MODIFY these events.





3.1.5 MORSE



This module allows to turn a text file (in fact MSG will accept any file) 
into a MORSE sequence. To remind you: the morse alphabet converts every 
letter of the normal alphabet into a sequence of short and long pulses, 
originally on the same pitch. In MSG, you can assign a different pitch to any 
letter. This table is displayed in the upper half of the MORSE module. It is, 
as you probably suspect, editable. You can click on the PITCH values to edit 
them manually, or you can use the functions of the FILE menu.

* LOAD/SAVE. Loads or saves the MORSE table and all the parameters below.

* INVERT NOTE POSITIONS. Reverses the positions of PITCH values. First 
becomes last, second becomes next-to-last etc.

* INVERT PROB. VALUES. Inverts the PITCH values. Highest becomes lowest etc.

* ROL PROB. VALUES. Rotates the positions of PITCH values once. First becomes 
last, second becomes first etc.

* ROR PROB. VALUES. The same as before, only rotating into the other 
direction.

* RND PROB. VALUES. Randomizes the position of PITCH values.



The other parameters, displayed in the lower half, are as follows.

* FILE TO EXTRACT DATA. You have to select a file which contains the text you 
want to transfer into a morse sequence. Click on the name to select. The 
length of the selected file is displayed in the box above.

* BYTES TO READ. This is the number of characters MSG will transfer. Values 
that not appear in the table will be skipped.

* BYTES TO SKIP. If you want MSG to start the transformation not at the 
beginning of the file, enter here the number characters you want to skip 
over. Of course it is more practical to use a word processor to extract a 
short phrase out of a text and store it separately before you make a MORSE 
sequence of it.

* LENGTH OF SHORT NOTE. As morse signs consist of either a short or a long 
note, you have to specify the length of the short note. the long note 
automatically has the double length. Characters are separated by a short 
pause, words by a long pause.





3.1.6 GRAPHIC



Modern music is often noted graphically, so why not go the other way and 
listen how any graphic sounds? That the idea of this module.

Basically, it works as follows. You specify a file that is stored on your 
(hard) disk(s). It need not necessarily be a graphic file, for MSG will eat 
anything. MSG displays the file on the screen, and you mark a rectangle which 
is interesting. THEN MSG will transform the pixel information into a 
sequence.



Well, that sounds easy, but I would like to give you some more informations 
about what happens. As you surely know, many graphic programs store pictures 
in a compressed form to save disk space. MSG will not recognize these formats 
but display them as if they were not compressed. MSG recognizes ONLY the 
uncompressed monochrome formats, which have file lengths of 32000 byte 
(normally *.PIC) or 32034 (DEGAS files, normally *.DEG). Therefore, you have 
to use your graphic programs to convert compressed files into PIC or DEG. 
Colour graphics will not be read properly. 

As I said before, MSG will read any file. I recommend to try library or data 
files of any program - portions that appear relatively 'empty' and/or 
'regular' can be very interesting.



Probably you guess that GRAPHIC comes along with some parameters. Here they 
are.

* FILE TO EXTRACT DATA. You have to specify a file, for MSG has no graphic 
tools of its own (again I did not want to invent the wheel once more). The 
length of the selected file is displayed in the box above.

* MARK COORDINATES. When you click on this button, MSG reads the file into 
memory (if you have not selected one so far, it prompts you to do so). Long 
files will not fit to one screen, so MSG reads into several, up to 100. Then 
MSG switches through the screens, asking you if you want to use this screen 
or the next. After the last screen, the first appears again. Once you 
selected a screen, use the mouse (click on one corner, hold the button and 
select a rectangle, release the button) to define an area. MSG prompts you to 
confirm, and when you press 'YES', the generation starts.



The following six parameters describe the selected portion of the file 
(target).

* SCREEN WIDTH. MSG can vary the width of the display for more flexibility. 
For technical reasons, the step width is eight.

* SCREEN NR. If files are splitted into more than one screen, this contains 
the screen number of the target area.

* SCREEN X/Y/W/H. These are the coordinates (X and Y) and the Width and 
Height (H) of the target area.



Finally, there are six parameters that decribe the process of the 
transformation.

* PITCH TO PIXEL TRANSFORM. There are two ways of looking at a scale. Either 
you look at the valid notes only (for c minor c-d-d#-f-g-g#-a#) or all 
(c-[c#]-d-d#-[e]-f-[f#]-g-g#-[a]-a#-[b]). This is what this parameter does. 
If you choose CONTINUOUSLY, the former case is applied: all rows of pixels 
are taken ito account. On the other hand, if you choose BLEND OUT, the latter 
case is used: a pixel row is 'blended out' when there is an invalid note (c#, 
e, f# etc in the example). Finally, if you choose RANDOM, it resembles 
CONTINUOUSLY, but the pixel rows are randomly accessed to the PITCH values.

* PITCH PRIORITY. This is a parameter that accesses the pitch values to the 
pixel rows. If you choose LOW ON BOTTOM/LEFT, the lowest note is accessed to 
the lowest/leftmost pixel row and the highest note to the highest/rightmost 
pixel row.

* PITCH TIME ORIENTATION. You can choose whether the x-axis displays time and 
the y-axis displays pitch or otherwise.

* ANALYZE DIRECTION. I think the two possible values FORWARD and BACKWARD 
explain all you want to know. This parameter describes what happens to the 
time axis as PITCH PROIRITY describes what happens to the pitch axis.

* REVERSE SCREENS. Describes if all the screens should be displayed with 
reverse colours.

* VELOCITY. As there is no axis left to generate VELOCITY values, you can 
specify a value here.





3.2 VIEW/SELECT modules



These modules subject the display and (de-) selection of events. Currently 
there are three modules.



3.2.1 EDITOR



This module resembles the good old Steinberg 24-track editor. The events are 
displayed either graphically as bars (upper left) and as text (upper right). 
You can edit PITCH, VELOCITY, POSITION, LENGTH, CHANNEL, and LAYER in the 
text display: click on the event you want to edit to activate it and then 
click on the component to change it. In the rightmost column, you select or 
deselect any event. In the leftmost column (event numbers), you can mute or 
demute any event with a click left. Muted notes are omitted if you replay the 
sequence (see below). With a click right on the event number, you may delete 
the whole event. For mute and select, there is a simple possibility to (de-) 
mute/select or toggle all events. Click lift on the word MUTE or SEL to (de-) 
mute or select, click right to toggle.



The lower part of the module displays the MIDI input and replay options. As 
mentioned before, you can enter events via your MIDI keyboard. To do so, you 
have to select an input mode different from OFF. The point at which the note 
you play next will appear is then displayed in the INPUT AT box. There are 
three input modes apart from OFF.

* APPEND. The events you play will be appended legato to the sequence. PITCH 
and VELOCITY are recognized, LENGTH will be the length selected under 
AVAILABLE NIOTE LENGTHS.

* REPLACE. This will replace PITCH and VELOCITY values of the currently 
active event.

* INSERT. This will insert an event at the currently active position. The 
following events are being shifted. PITCH and VELOCITY are recognized, LENGTH 
is set as selected under AVAILABLE NOTE LENGTHS.



Below is a box DISPLAY xx QUARTER NOTES. A click on the xx button will change 
the display. Possible values are: 8, 16, 32, 64 quarter notes.



If you want to hear the sequence, click on the PLAY button in the lower right 
box. As this feature is only for test purposes, all events except the muted 
will be played on the same MIDI channel. It is adjustable below. You can vary 
the tempo in eight steps between 31 and 250 bpm. As I want to point out 
again, this option is implemented for test purposes. It is not 
synchronizable. The timing is not professional; chords will probably be 
slightly arpeggiated - but remember the introduction. It is not urgent to 
hear everything during the session with MSG. Generate now, select later.



It is fairly understandable if you are disappointed when you use the PLAY 
option of MSG. What you hear when you replay the sequence with MSG is NOT 
what you will hear when you replay it in your sequencer program. Just save 
your sequence as Standard MIDI File and load it into your sequencer, what is 
the normal approach. There are three sequences coming with the demo version, 
each in its SQC and MID version. Load the SQC files into MSG and PLAY them, 
and load the MID files into your sequencer. Do you see (no, hear) what I 
mean?



Please do not be confused about the 'tempo' of the sequence. All the 
sequences you create or modify with MSG do NOT have a set tempo. This depends 
ONLY on the tempo you set in your sequencer program! You can use ANY sequence 
at ANY tempo you like.





3.2.2 DISPLAY



As its name says, this modules displays the events graphically. You have a 
x-axis (horizontally) and a y-axis (vertically). Each displays one component 
of the event. By clicking on AXIS DISPLAY, a dialog box appears and you can 
choose any combination you like. The most common combinations are those with 
POSITION on the x-axis.



All events are displayed as circles, and - if one axis is POSITION - with a 
line attached that displays the LENGTH as well. If an event is selected, the 
circle is filled, otherwise not.



You can (de-) select events in this module. Click right on a circle to toggle 
the selection flag. With the left button, you can define a rectangle for the 
(de-) selection as well.





3.2.3 SELECT EVENTS



This module allows complex selection of events. Any component of an event can 
be used to perform a selection, and you can choose if you want to make a NEW 
selection, or if you want to ADD the events, or if you want to REMOVE them. 
TOGGLE switches all events in the limits to the other state: selected events 
become unselected and vice versa.



An example: You have generated three event layers with the MAKE module. Now 
you would like to modify all events in the second sublayer with velocities 
greater than 100, if they have a pitch higher than C5. To accomplish this, 
you click on LAYER to activate it. Then you enter '2' as upper and lower 
limit for LAYER, select INSIDE and hit '#' (or click on NEW) for a new 
selection. Then you activate PITCH, select INSIDE again and enter as limits 
'C-2' and 'C5' and hit '-' (or click on REMOVE). Finally, you activate 
VELOCITY, enter '0' as lower and '100' as upper limits, select INSIDE and hit 
REMOVE again. The number of selected events is displayed in the box in the 
lower right.





3.3 MODIFY modules



Before you modify events, you will have to tell MSG which of them. Therefore 
the fuss with the selection and deselection of events - ONLY the selected 
events will be modified, THE OTHERS NOT.



3.3.1 DRUMMING



This module picks up the selected events, repeats and gradually alters their 
PITCH - like in Steve Reich's 'Drumming', who actually invented this 
procedure.

The original 'Drumming' consists of basically three phases.

1) Start phase. It begins with playing one of the events, and then - one 
after another - in each loop the other events are introduced. When all events 
of the sequence are introduced, the middle phase begins.

2) Middle phase. The sequence is repeated several times. At the beginning of 
every repeat, one PITCH of the sequence is altered.

3) End phase. This phase is similar to the start phase, but in reverse mode. 
One event after another will be skipped.



The MSG module follows the description. The parameters are as follows.

* REPEAT LAYER. Describes how often the layer is repeated before the next 
event is included/excluded or PITCH is changed.

* CREATE MULTIPLE LAYERS. If YES is selected, different LAYER values will be 
used for start phase, every PITCH change in the middle phase, and end phase.

* CREATE START/MIDDLE/END PHASE. Selects which phases will be generated.

* CHANGE TIMES. Describes how often the PITCH values are changed in the 
middle phase.

* CHANGE EVENTS. Describes how many events will be changed in each loop of 
the middle phase.



The resulting length of the DRUMMING sequence depends on the number of 
selected events, and the parameters. It is displayed on of the upper right 
boxes. If the length of the DRUMMING sequence exceeds the maximum length, MSG 
will generate as far as possible, then display a warning message and cancel 
the further generation.





3.3.2 MODIFY I



This module is a collection of some functions that have 'a mathematical reek' 
to them. You can apply any of the functions to any of the event components.



* PITCH, VELOCITY, POSIITON, LENGTH, LAYER, CHANNEL. Switches the 
application to the components on or off.

* FUNCTION. Selects the function that will be applied to the component. 
Currently available are the following functions.

   - REVERSE. Reverses the order of the event component. Last becomes first, 
first becomes last etc. This function has no value.

   - ROTATE LEFT/RIGHT. Rotates the event components VALUE times to the right 
or the left. Example for rotating left once: first component becomes last, 
second becomes first, third becomes second etc. The value describes how often 
the components will be ROTATEd.

   - RANDOM ORDER. Randomizes the order. This function has no parameter.

   - MIRROR. The component values are recalculated with VALUE as center. 
Example: VELOCITY mirror VALUE is set to 100. Then, 100 stays 100, 99 becomes 
100, 101 becomes 99 etc.

   - EXCLUSIVE OR. Performs an operation often used by computers. VALUE and 
component values are regarded as string of bits. Then each bit of the 
component value is combined with the corresponding bit of VALUE, giving 
musically unpredictable results.

   - MULTIPLY. Multiplies component value with VALUE.

   - ADD. Adds VALUE.

   - SORT UP/DOWN. Sorts the components by their values. UP: lowest comes 
first, DOWN: highest comes first. This function has no VALUE.

   - SET. Sets the component value to VALUE.

* VALUE. This is the argument some of the functions need.

* RESULT. By applying some functions, it may appear that the possible range 
of the event compound is exceeded. This parameters describes how to proceed 
in that case. If it is set to MIN/MAX, higher values than the maximum will be 
set to the maximum, lower values than minimum to minimum. If AND xxx is 
chosen, the value will be transformed into the possible range. Example: 
Allowed range for VELOCITY is 0..127. If you multiply the VELOCITY by four. 
all VELOCITY values greater than 31 will exceed 127 after the multiplication. 
If RESULT is set to MIN/MAX, those VELOCITY values are set to 127. If AND 127 
is chosen, a VELOCITY of e.g. 68 will be shifted to 16, because 68*4=272, 
then subtracting 128 until the value is 127 or lower: 272-128=144, 
144-128=16. Apart from MIN/MAX, different values of RESULT are selectable.



If MIRROR, EXCLUSIVE OR, MULTIPLY, or ADD are applied to PITCH, the resulting 
values normally will no longer match the original mode and key.



As you see, these functions allow to modify one event component in rather 
flexible fashion.



There is another operation that requires two event components.



* RING MODULATION. Performs a ring modulation of SOURCE 1 and SOURCE 2. This 
works as follows. SOURCE1 is replaced by the sum of the former SOURCE 1 and 
SOURCE 2, while SOURCE 2 is replaced by the difference of the former SOURCE 1 
and SOURCE 2. SOURCE 1 and 2 can be any of the event components. Note that if 
SOURCE 1 and 2 are identical, the resulting component values will be zero.



As you can select among two different operations, the RETURN key does not 
work here. Press instead M for MODIFY or R for ring modulation. Of course you 
can click on the buttons as well.



3.3.3 MODIFY II



In  contrast to MODFY I, some more musical functions are collected here. 
Moreover, these functions will be applied to the whole event: if you sort the 
events by PITCH, then VELOCITY, CHANNEL etc will be sorted - in contrast to 
MODIFY I - as well.



* FORCE LEGATO. If there are 'gaps' in your sequence, you can close them with 
this function. Most sequencer programs provide it as well, you say? Yes, but 
not with all these parameters.

   - KEEP LENGTH, KEEP POSITIONS. MSG lets you choose the base for the LEGATO 
operation. You can keep the length and change the position, or you can keep 
the position and change the length (this is what the sequencer programs do).

   - KEEP CHORDS. If there are chords in your sequence, you can either keep 
them together or 'arpeggiate' them. Naturally this has an effect only if KEEP 
EVENT LENGTH is selected.

One useful application of this function is as follows. You have a sequence 
with 1/4 and 1/8 notes and decide now that you would like to have only 1/8 
notes, and no gaps please. A sequencer program will have you correct each 
position manually... MSG does the job effortlessly, and quicker. With MODIFY 
I, you set LENGTH to 1/8 note. Then, in MODIFY II, you select KEEP LENGTH and 
hit 'L' or FORCE LEAGTO, and ready it is.



* SORT EVENTS. Sorts the events according to PITCH, VELOCITY, and LENGTH. You 
can choose any priority combination of the three. P stands for PITCH, V for 
VELOCITY, and L for LENGTH, naturally.

   - KEEP POSITIONS/LEGATO. Again MSG lets you choose. Primarily, SORT 
affects the *order* of the events. *All* event components except POSITION 
will be sorted. If you chose KEEP POSITIONS, then MSG will do nothing to the 
positions. In the case of LEGATO, MSG will adjust POSITIONs accordingly.

   - SORT UP/DOWN. Sort priority. UP: lowest comes first; DOWN: highest comes 
first.



* HARMONIC SHIFT. This function allows you to change MODE and KEY of any 
sequence. The box FROM displays the source MODE and KEY, the box TO 
destination. Note that MSG will take the source settings regardless of MODE 
and KEY the sequence *really* stands in.

   - CONVERT MATCHING. You can select if any PITCH matching source KEY and 
MODE will be converted to MATCHING or NON-MATCHING PITCH values.

   - CONVERT NON-MATCHING. The same as before, only for NON-MATCHING PITCH 
values.

These options are implemented for a specific reason. If you want to convert a 
solo, it perhaps contains notes that do not belong to KEY and MODE, to 
enhance tension for example. In such a case you of course want to keep that 
tension. In other cases you just need to correct all PITCH values. The 
possibility that you can 'kick out' the matching PITCH values to non-matching 
ones is there to 'fool around', or (more seriously put) to get 'interesting 
results'. You will find those options throughout MSG, as you probably noticed 
yet.





3.3.4 TRANSFORM



This module allows rather complex modifications of the selected events, of 
which the MULTIPLY function in MODIFY I is a special case. A transformation 
matrix is key to the modification of PITCH, VELOCITY, POSITION, and LENGTH.



As the TRANSFORMation is a very complex operation, I will try to explain what 
happens. The matrix you see when you first enter this module is the neutral 
one. It is called the 'unity matrix'. All of its elements are zero, except 
those in the main diagonal, which are 1. If you apply this matrix to events, 
nothing will be changed. Starting from this matrix, you can - for example - 
multiply the LENGTH by two, if you change the '1' of the fourth row and 
fourth column of the matrix to '2'. If you only change the values of the main 
diagonal, it will affect only one of the event components. In the next step 
you change one of the other values. If you set - again as example - the value 
of the second line, fourth column to a different value than zero, VELOCITY 
will affect LENGTH as well. One can say that the line component has an effect 
on the column component.



There are of course some parameters to adjust.

* The TRANSFORMATION MATRIX itself. There are sixteen parameters to adjust.

* RND. Randomizes the sixteen parameters of the matrix. You can select 
maximum and minimum values.

* INIT. You can reset the matrix to the unity matrix (button on the right) or 
only one line or column (small init buttons above and right of the matrix).

* SWAP ROWS/COLS. Two rows or columns are randomly selected and their values 
swapped.



* PITCH, VELOCITY, POSITION, LENGTH. Switches the modification of the 
component on or off.

* RANGE. The range to which the result is being transformed. In case of PITCH 
and VELOCITY TABLE, the tables defined in the MAKE module are used.

* UPPER, LOWER. The limits of the RANGE.

* QUANTIZE. You can quantize POSITION and LENGTH to maintain timing.





3.3.5 BATCH



This module contains a collection of functions which do smaller operations 
repeatedly.



* ROTATE IN N-TUPLETS. This function rotates the component values in groups 
(tuplets) of adjustable length. An example: You have an eight-note arpeggio. 
Now you would like to perform the following operation:



EVENT # 1  2  3  4  5  6  7  8  9  10 11 12

PITCH   c3 d3 e3 f3 g3 a3 b3 c4 d4 e4 f4 g4

         -> ->    -> ->    -> ->    -> ->

         <---     <----    <----    <----

to yield

EVENT # 1  2  3  4  5  6  7  8  9  10 11 12

PITCH   e3 c3 d3 a3 f3 g3 d4 b3 c4 g4 e4 f4



This is easy: set N-TUPLET to '3', DIRECTION to 'RIGHT', and hit 'R' to 
rotate.



* SORT IN N-TUPLETS. This function sorts the component values in groups 
(tuplets). An example: create a random sequence and sort PITCH in 8-tuplets 
to yield uncommon arpeggios.



* MULTI-COPY. This creates multiple copies of the selected events while 
transposing them if you want to. Note that the MODE and KEY of the MAKE 
module are kept. The following two parameters are available.

   - SHIFT/STEP. The width by which each copy is transposed in PITCH, 
VELOCITY, and CHANNEL.

   - COPIES. The number of copies.

   - MULTIPLE LAYERS. If set to YES, each copy will get another LAYER value.





3.4 COPY options



You probably use other programs like a word processor on your ST as well. 
Then you know the commands to copy, paste, and insert from and to the 
clipboard as they all are almost standard. Only one reason to implement them 
in MSG. However, only an internal clipboard is used. You cannot exchange it 
with other applications. You find these options in all 'open' modules in the 
menu 'Params'.



* COPY. This copies the selected events into the clipboard.

* PASTE. This copies the selected events and deletes them form the sequence, 
leaving a gap.

* PASTE AND MOVE. A non standard command that is similar to PASTE but leaves 
no gap.

* INSERT. Inserts the clipboard. You can freely choose the insert point 
because the MERGE dialog box is called.





3.5 DELETE options



If you select DELETE in the PARAMS menu, this dialog box appears. You can 
delete all, or selected, or unselected, or muted, or unmuted events.

With TRIM SEQ. you can delete any space before the first event.





4. SUB MODULES



There are sub modules accessible, one from the RHYTHMN and several from the 
MAKE module. The sub modules are mostly tables.



4.1 RHYTHMN TABLE



You access this sub module by right clicking on the instrument button in the 
RHYTHMN module. This is the table from which you choose the RHYTHMN 
instruments. It consists of 88 PITCH values that can be named. The PITCH 
value and name of the instrument in the RHYTHMN module are marked. You can 
change it by clicking left on any other name. You can change the name by 
clicking right on it.

Whole tables can be SAVEd and LOADed.





4.2 PROBABILITY TABLES



The probability tables of the MAKE module prove very useful if you need 
sequences where certain PITCH (or VELOCITY, or LENGTH) values appear more 
frequently than others. Another application is to define tables that let MAKE 
generate monophonic drum layers (e.g. a hihat layer).



Of course you can edit these tables manually by clicking on the probability 
values. On the other hand, MSG provides various function to define or compute 
a table in the sub menus ASCII, AMI, and MATH (see below).



Before I describe the tables and functions in more detail, I shall explain 
how it works.

If you remember your very first session with MSG, you simply started it and 
generated a sequence immediately. The result was a sequence where PITCH, 
VELOCITY, and LENGTH were generated randomly. But how does 'randomly' work? A 
simple example. You want to have ten random numbers between one and six. 
Instead of throwing a dice ten times, you take six spheres and write the 
numbers '1' to '6' on them. Put them in a bag and mix. Draw one sphere, write 
down the number, then put it back into the bag. Repeat this nine times. 
Understood? If you draw spheres and put them back often enough, you will 
realize that all numbers are drawn equally often.

Now take two more spheres and write '1' on both of them. Put them in the bag 
to the other spheres. If you repeat the described procedure now, you will see 
that '1' comes three times out of eight while the other numbers come once out 
of eight. Again this should be easy to understand.



Well, this is exactly what a probability table does. The value describes how 
many spheres with the same value you put in the bag to draw from. Now you 
will realize how easy it is to generate random sequences but emphasize 
certain values, for example the octaves. This means also that a probability 
value of zero excludes the component value from generation.



4.2.1 PITCH & VELOCITY



This sub module displays the PITCH or VELOCITY table. According to limits and 
MODE and KEY set in the MAIN module, some values are omitted.



4.2.2 LENGTH



This sub module is different from the PITCH and VELOCITY sub modules. The 
LENGTHs are grouped.

* 1/16T to 1/2.

   - PROBABILITY. The probability value.

   - COMBINE. You can select if you can force MSG to generate two (or thre in 
the case of triols) events with the same LENGTH to keep the rhythmn steady. 
If this option is selected eg. with 1/8T, an 1/8T will ALWAYS come up in 
threes. If not, the sequence may sound odd if one 1/8T is followed by 1/4 or 
1/8 or ... LENGTHs.

* 1/2 to 8/1.

   - PROBABILITY. The probability value.

   - ALLOWED/NOT ALLOWED. You can switch the LENGTHs of this group on or off 
without setting their probabilities to zero.



the other box contains LENGTHs between 1/2. and 8/1. It can be switched on 
and off separately.



Then there is the paramter GENERAL RANGE. You can select from several 
options. QUANTIZED means that the groups above are used. UNQUANTIZED means 
that all possible values in the specified range will appear with equal 
probability, or, in other words, the probability table is disabled.



As for PITCH and VELOCITY, you may calculate the probabilities in the sub 
menus.



4.2.3 ASCII



This sub menu of a sub menu calculates the probability table according to the 
contents of a file. I shall explain what that means. Each computer file 
consists of bytes that have values between 0 and 255. If you now specify a 
file, MSG opens it and counts *how often* any byte appears. This number is 
taken as probability value.



The display shows the 256 boxes representing the bytes 0..255. In the upper 
left of each box you see the byte number (0..255), in the upper right the 
probability. In the lower part of the box there are the PITCH, VELOCITY, or 
LENGTH values. The number of allowed values for PITCH, VELOCITY, and LENGTH 
is in every case lower than 256, so the allowed values are repeated.



If any byte does not appear in the file, the box stays white and you cannot 
edit it - it is omitted because its probability value is 0.

If it appears at least once in the file, you can edit it. You can change the 
PITCH, VELOCITY, or LENGTH value to which to byte is mapped by clicking on 
the lower part of the box, and you can switch the byte on or off by clicking 
on the upper part.



There are three parameters.

* NEW FILE. Selects a new file.

* READ BYTES, SKIP BYTES. Depicts how many bytes shoud be SKIPped before the 
analysis of READ bytes begins.



When you confirm the table with 'take it', MSG calculates the probabilities 
and displays them in the PITCH, VELOCITY, or LENGTH table module.



4.2.4 AMI



Another interesting way to calculate probabilities. It originated in the PD 
program AMI, but now with some features more.

The idea is to pick sixteen values for PITCH, VELOCITY, or LENGTH and 
organize them in a table (yes, another one). Now start to edit.



You can - as always - edit the table manually. The two boxes on the left, 
EVENTS and PROBAB., do the following.

* SORT UP. Sorts the components or probabilities, lowest comes first.

* REVERSE. Reverses the order of events or probabilities.

* RANDOM. Randomizes the order of events or randomizes the value of the 
probabilities.

* ROTATE LEFT/RIGHT. Rotates the probabilities.



On the right, you find another two boxes. The lower shows the probabilities 
of the events graphically. It is automatically updated. The other box allows 
you to calculate continuous values of the probabilities. They will be 
calculated according to the probability values of the first and last event.

* PROBABILITY OF EVENT 1,16: The maximum and minimum probability values. If 
value 1 is lower than value 16, the function will be ascending, else 
descending.

* FUNCTION. You can choose among LINEAR, QUADRATICAL, SQUARE ROOT, 
EXPONENTIAL, LOGARITHMICAL, MORE->LESS, LESS->MORE.



To apply the function to the table, click on CALCULATE PROBABS.



4.2.5 MATH



Implements two mathematical and two statistical functions to calculate a 
table.



The mathematical functions are easy. You can MULTIPLY the table with a value 
between 0 and 99, or ADD a value between -999 and 999.

 and 999.



The first of the statistical functions is the Gauss distribution, which is 
often found in statistics. It has its maximum in a 'center', at a so called 
'mean value'. Depending on the 'mean deviation', the decrease to lesser and 
greater values than the mean value is more or less strong. The function never 
reaches zero. There are four parameters.



* CENTER. The center or mean value with the highest value.

* DEVIATION. The amount of decrease.

* OFFSET. Minimum value for the probability.

* STRETCH. A factor that affects the difference between highest and lowest 
value.

MSG calculates GAUSS values between 0 and 1, depending on CENTER and 
DEVIATION. These values are then multiplied with STRETCH, then OFFSET is 
added, so any distribution is possible.



The second 'statistical' function is Pascal's Triangle. The calulation works 
as follows. You start with three 1s in a triangle:

  1

1   1

and then add more lines like this:

    1

  1   1

1   2   1

and

       1

      1   1

    1   2   1

  1   3   3   1

1   4   6   4   1

and so on. The values 'inside' the triangle are the sum of two numbers left 
and right above.



MSG uses this by first calculating how many numbers it needs, then 
calculating the line of the Pascal Triangle. If MSG needed six numbers, it 
would yield 1, 5, 10, 12, 10, 5, and 1 as that is the next line of the last 
triangle above. Then MSG divides by the maximum value and, finally, stretches 
and offsets the values like it does with GAUSS. The parameters are:

* OFFSET, STRETCH. The same as described with GAUSS.

* RANGE LOWER, UPPER. Defines a range. If the complete values (100%) were 
again 1,5,10,12,10,5,1 then a lower range of 28% and an upper of 86% means 
the values 10,12,10,5 will be used for the table.



4.3 CONDITIONAL



This is special table only available to PITCH. The idea is that any PITCH 
that is generated depends on the PITCH before. An example: The last generated 
PITCH is G3. For the next PITCH, MSG looks up in the CONDITIONAL table for 
possible successors and chooses randomly among them.

When you enter this sub menu, MSG displays the 61 possible PITCH values in a 
circle. Then you can draw lines. Click on any PITCH, release the button and 
click again on the desired successor. The other possibility is to press 
CONTROL and the click on any PITCH. Another box opens that display all 
'source' and 'target' values of that PITCH which can be edited.



When you confirm the table with 'take it', MSG will evaluate if the table is 
complete, since any PITCH that is destination must be source as well. If the 
table is not complete, MSG will give you information about what is missing.





4.4 ENVELOPE



The MAKE module itself uses a range for PITCH and VELOCITY with allowed 
values. However, sometimes a constant range is not desired. In that cases the 
ENVELOPE will come in handy.

You access this sub module by clicking on EDIT ENVELOPE in the MAKE module. 
On entering you will actually see two envelopes, as there is an envelope for 
the lower limit and on for the higher limits.



Each envelope consists of four points. The first point is always the start 
point, the last the end point. The points are connected depending on the 
MODE.



If you choose CONSTANT mode, only the first point (which is in fact the UPPER 
or LOWER limit of the MAKE module) is used. In other words, the envelope is 
switched off.

In the LINEAR mode, the first point is connected with the last. The two 
middle points are not used. The limit varies linearly from event to event.

The SHARP mode connects all four point with lines. The limit varies 
accordingly.

Last not least, the SMOOTH mode. The limit varies smoothly, no sharp breaks 
occur.



To edit the points you can either do it by entering the numbers in the right 
box or do it graphically. To do so, click on on of the eight points to shift 
it. Click again when ready.

You can drag even the middle points into the grey areas above and below. The 
grey areas depict invalid values for PITCH or VELOCITY, but had to be 
included for the SMOOTH envelopes.



If the lower envelope is actually higher than the upper, MSG will swap the 
values automatically.





5. FUNCTIONS



This is the description of the functions available in the MAKE module.



5.1 RANDOM



These functions use one, two, or three different random numbers in different 
combinations.



1  rnd. The probability is the same for all numbers, like throwing one dice.

2  rnd+rnd. Probability is highest in the middle. Like throwing two dice.

3  rnd*rnd. Lower values are more probable than higher.

4  rnd+rnd+rnd. Probability is highest in the middle. Like throwing three 
dice.

5  rnd*rnd+rnd. Highest a bit left of the middle.

6  rnd*rnd+rnd*rnd. Highest more to the left than the previous function.

7  rnd*rnd+rnd*rnd+rnd. Steeper than the previous function.

8  rnd*rnd+rnd*rnd+rnd*rnd. Even more steeper.

9  rnd-rnd. Continually decreasing.

10 rnd*(rnd-rnd). Strongly decreasing.

11 sqr(rnd). Continually increasing (sqr=square root).

12 sqr(rnd)+sqr(rnd). Highest right of the middle.



5.2 LISSAJOUS



These functions are the implementation of Lissajous figures (after L.A. 
Lissajous, 1822-1880, french physicist). They are the combination of three 
sine functions:



X = SIN ( A * t + E )

Y = SIN ( B * t + F )

Z = SIN ( C * t + G )



Parameters A, B, and C are the 'period' of the function, E, F, and G the 
start point (precisely: phase).

MSG combines x, y, and z dfepending on the function. An example: the function 
is X*Y+Z, then



value = sin (At+E) * sin (Bt+F) + sin (Ct+G)



Wow. That seems complex and in fact is. But one can say in general that these 
functions are periodically rising and falling. When you choose greater values 
for the period, the functions will lose their smoothness and become erratic, 
if still periodic. In fact, this is aliasing!

If you vary the phase, you do not start 'in the middle' of the function. 
Please note that phase is calculated in radians, hence phase=2*pi (6.283) 
gives is the same as phase=0. For a cosine wave, enter phase=0.7854.



I recommend to play with the parameters and functions to see what happens, 
starting by setting A, B, and C to 1 and E, F, and G to 0. Then vary the 
functions, then the parameters. You will see quickly what is going on.



5.3 MELODY



These are functions that have a start value (in MSG: D), are being calculated 
to yield another value that is subjected to a modulo division (only the rest 
counts). This value is the 'new' start value for the next calculation.



These functions tend to be periodically as well, when certain parameter 
combinations ar used. The parameters of course affect the result, but also 
the range of allowed PITCH, VELOCITY, and LENGTH values.



Again I recommend to experiment with the parameters.





5.4 MATH



Calculates the mathematical functions according to their parameters. Argument 
is always the event number.





5.5 ARPEGGIO



Ah, this sound familiar to you? The functions are clear. Now what about the 
parameters?



* PARAMETER A. The minimum number of events in the arpeggios.

* PARAMETER B. The maximum number of events in the arpeggios.

* PARAMETER C. The step width in the arpeggio. The normal value is 1 to step 
through all event values. If you select 2, for example, then every second 
event value will be skipped.

* PARAMETER D. You can change the start point of the subsequent arpeggios 
with this parameter. With zero, all arpeggios start on the same value. With 
any negative value, the start point is selected randomly.

* PARAMETER E. Allows arpeggios of quantized length. If you choose A=2, B=8, 
E=3, then the arpeggios will consist of 2, 5, or 8 events.





5.6 FRACTAL



These functions are recursive and - no wonder - fractal. The parameters have 
different meanings with the different functions.



5.6.1 POINCARE



It has the formula



z = B * z * ( 1 - z )



Adjustable is parameter B, which should be between 2 and 4. Parameter E 
describes the number of iteration prior to generation, to improve 
periodicity.



5.6.2 PICKOVER X, Y, Z



It is a system of functions:



x = SIN ( A + x ) - z * COS ( B + x )

y = z * SIN ( C + x ) - COS ( D + y )

z = SIN ( x )



Depending on the function, X, Y, or z will be used as value for the 
generation.. Parameter E describes the number of iteration prior to 
generation, to improve periodicity.



5.6.3 LINE, HAT, PARABLE, SAWTOOTH



These function base on a graphical iteration. A LINE, HAT, PARABLE, or 
SAWTOOTH is drawn into a normal x-y coordinate system. Then you select a 
point on the y=x line, go up or down to the function line/curve, the 
horizontally to the y=x lin to yield the next function value, then again up 
or down to the function line/curve and so on.



5.6.4 NODE



Simulates small neuronal nets. Nodes are interconnected with weighted lines. 
The parameters are the weights of the single lines.



* S-2-2-D. The source node S influences two nodes which in turn affect two 
other nodes. The latter determine the end value.



* S-3-D. Th source node S influences three different nodes which have an 
effect on the end value.



If a REC appears in the function name, it is recursive. In that case, 
parameter A gives the start value for the first iteration. The end value will 
be the start value for the next iteration.

The event number will be start value for the other cases.



If a MOD appears in the function name, the end value is modulo diveded (only 
the rest of the division remains).



5.6.5 DYNAMIC SYSTEM



Implements sets of differential equations.



#1. A simple hunter-prey system (Y: hunter, X: prey).





6 GLOBAL



There are some parameters that will be loaded each time you start MSG. They 
are stored in MSG.GBL. To make your seletions permanent, you have to save 
them from this module.



* DATA PATH. You can select a path where MSG stores your parameter files, 
sequences, and MID files by default.

Please note that the files necessary to run the program must have to stay in 
the same directory. These files are MSG4.PRG, MSG.RSC, MSG.INF, and MSG.GBL, 
if you use one.



* SCREEN SAVER ON/OFF. Switches the built-in screen saver on/off.

* SCREEN SAVER TIME. Determines after how many seconds - in ten second steps 
- the screen saver will be activated. Any action of mouse or keyboard restore 
the screen.



* SELECT ON GENERATION. If switched on, all newly generated events will 
automatically be selected.

* SELECT ON MIDI LOAD. The same as before, only for events extracted from a 
Standard Midi File.

* SELECT ON MIDI INPUT. The same as before, only for events you entered on 
your Midi keyboard.



* MAXIMAL EVENT NUMBER. Normally, MSG allocates all free memory for events. 
It is then possible that files to process with GRAPHIC may not be read 
completely. Moreover, the lesser the maximum event number is, the quicker are 
some operations. With this parameter, you can set the maximal event number 
you want or need. If you enter zero, all memory will be allocated for events.

