Bol Processor BP2 -- a 'QuickStart' 5. Non-stop improvisation 6. Interactive control Title Page Index Contents

5. Non-stop improvisation

5.1 "Random" isn't anything...

When producing items, BP2 made random decisions as to candidate rules in the grammar and the position of each derivation. These decisions may also be controlled in "step computation" (see §12).

Sequences of random numbers are predetermined in computers. This means that each time you run BP2 you get the same sequence. If you run an improvisation immediately after starting BP2 you get the same "random" performance... Of course, if the "Autorandomize" button is checked on the upper "Settings" dialog, every piece is likely to differ from tyhe preceding one, but this may not still not be the way you expect a machine to "improvise"!

There are two ways of avoiding this. First, you may want to instruct BP2 to produce anything you've never heard before. For this the random-sequence generator should be reseeded with an arbitrary number, for instance a number computed from the date/time information available inside the computer. Select "Randomize" in the "Misc" menu. You get the little "Randomize" dialog as shown Fig.23. The current random seed number is always 1 when you start BP2, therefore default random sequences are identical. The random seed is saved in the "-se" setting file automatically loaded with each project.

Clicking "Reset" will restart the random generator with the current seed number, thus producing again the same sequence of random numbers. Clicking "New seed" will take an arbitrary number as a new seed and recalculate the sequence accordingly. Now you get something really unpredictable.

Another way of playing with randomness is to type a seed and click "Reset". In this way you select manually one among more than 65,000 sequences (because the seed may be any number between 0 and 65535). If you get a remarkable result with a given value of the seed number, you should note it down carefully or save it along with the current settings (see the "File" menu).

There is no certitude that every future version of Macintosh® will produce the same random sequence starting from a given seed number. In addition, you must keep in mind that if you make changes in the grammar (modifying or moving rules) the sequence is likely to change. If you need more control on productions, either modify the grammar (see for instance "Programmed grammars", §11 infra, or control procedures, reference manual §8.1) or make decisions by hand as shown §12 infra.

5.2 A kind of cellular automaton playing a kind of Turkish music

Load "-gr.koto3" and type cmd-option space. Check "Non-stop improvize", "Use each substitution", and uncheck "Display items":



Fig.24 Controlling production -- The "Settings" dialogs


Now click "Produce items..." or type cmd-r. Since you selected "Use each substitution" you will see and hear all intermediate work strings produced by subgrammar #2. (See "SUB" grammars, §4.14 of the reference manual.)

All variables (like "X" and "Y") in the workstring are ignored when interpreting it as a musical item. Therefore, only terminal symbols such as 'a', 'b', 'c', 'chik'... will produce sound-objects.

While BP2 is improvising you may hold down the mouse-button to interrupt the process. This makes it possible, for instance, to uncheck "Show graphics" and check "Display items". Now all items played by BP2 are also written to the "Data" window.

Buttons appearing at the bottom of Fig.24 also belong to the "Settings" dialog:

Other buttons shown on top of Fig.24 have the following effects:

5.3 The "INIT" instruction

In case you wish to play "-gr.koto3" on a Roland D-50 or D-550 synthesizer, you might insert the following line top of the grammar:

INIT: Play _script(MIDI set basic channel to 15) Koto _script(MIDI Omni mode ON channel 15)

What does it mean? 'INIT:' indicates something that is done during the initialisation, that is, every time the grammar is requested to improvise. Here, the initialisation is a script instruction "Play any item" in which the item contains two performance controls "_script()" and a variable "Koto" (starting with an uppercase character).

Instruction "MIDI set basic channel to 15" tells BP2 that MIDI program changes should be sent on channel 15. These program changes are performed by the glossary when rewriting variable "Koto". The effect depends on the glossary which contains the proper program number setting a patch named "Koto". Then, "MIDI Omni mode ON..." will set the synthesiser to OMNI OFF, so that messages may be received and played even if they are not sent on channel 15.

Initialisation is performed before playing the first item produced by the grammar. If it contains a "Play" instruction, BP2 first produces the item, performs the initialisation, and then immediately plays the item. Otherwise it performs the initialisation before producing the item.

An example will make it clear. If the initialisation is

INIT: Wait for space

then BP2 will prompt you for hitting the space bar just after compiling the grammar, before producing an item. If it is

INIT: Play _script(Wait for space)

then it will prompt you just before playing the first item the grammar has produced. This is a good way of synchronising the beginning of an improvisation. You may even want to be notified by a beep:

INIT: Play _script(Beep) _script(Wait for space)

The specificity of the "INIT" instruction should be made clear. You could as well insert the preceding instructions as performance controls into the item produced. For instance, the first rule in the "-gr.koto3" grammar could be:

S --> _script(Beep) _script(Wait for space) _vel(127) _volume(40) X X X X Y X X X X Y X X X X

However, in this case, the beep and wait would be performed each time a new item is produced, which is not convenient in the "Non-stop improvize" mode.

You may also use the "INIT" instruction to execute any script stored on the disk, e.g.:

INIT: Run script "MyInitScript"

5.4 Mozart's musical dice game

You may not like the so-called Turkish music improvised on a so-called Koto... I would recommend listening to the marvellous CD "Masters of Turkish Music" (Rounder CD 1051) and apologise to Turkish music lovers and lovely Koto players for such a joke.

How about some unknown pieces (presumably) composed by Wolfgang Amadeus Mozart? Select "Load project" in the "File" menu (cmd-l) and load
"-gr.Mozart".

This grammar uses "simple notes", i.e. the predefined alphabet of French notes. This convention has been automatically selected when settings "-se.Mozart" were loaded.

Now produce items (cmd-r)...

In the current set-up (mm = 220 ticks/min) the duration of any variation is about 26 seconds, slightly more than computation time on a Mac II-ci. Therefore, Mac II-ci and faster machines are able to string variations without break. You may also save time by unchecking "Show messages" in the "Settings" dialog.

Weights of some rules in the grammar are controlled by <K1>, <K2>, etc., and may be changed by MIDI controllers (see §6.5). Since controllers are not used here, these parameters are assigned the constant values defined in the first grammar. These actually reflect the probabilities of getting 2, 3, 4,..., 12, out of a two-dice throw. An explanation of weights may be found in the reference manual, §4.6.

The last subgrammar has instruction "SUB1", a faster version of "SUB" when substitutions are to be performed only once.

You may select polymetric expressions in the last subgrammar and play them (cmd-p) in order to listen to the various units defined by the composer. If the selection contains a variable it is used as a start string by the grammar. Try for instance to play "A1 A2 A3".

To select an expression with balanced curled brackets {}, click anywhere inside the expression and type cmd-b ('balance'). Repeat typing to extend the selection.

How was this grammar created? Subgrammars 1 to 17 have been directly typed from Mozart's tables. Subgrammar 18 contains the "terminals" of the "dice grammar": musical segments taken from Mozart's score in conventional music notation. Selecting "Type from MIDI" in the "Misc" menu, or typing cmd-j allowed BP2 to capture notes from a MIDI keyboard, and prolongations '_' with the "hold" pedal.

If you are not yet familiar with polymetric structures, this grammar can teach you the essential: select structures, play them and compare polymetric expressions with their "scores" appearing on the "Graphic" window.


Bol Processor BP2 -- a 'QuickStart' 5. Non-stop improvisation 6. Interactive control Title Page Index Contents