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:

"Use MIDI in/out" allows BP2 to send data to MIDI devices (including QuickTime music, if you are using Opcode OMS) and to receive messages from external MIDI devices (including the Inter-Application Communication bus, if OMS is installed). If this option is not set, then at least either "Write Csound scores" or "Write MIDI files" should be checked.
"Synchronize start" keeps BP2 waiting for either a NoteOn message, a "Start" or "Continue" MIDI message, or a mouse click, before playing any item. It will wait for a NoteOn if and only if the key and channel are defined in the "-in.abc1" interaction file (see §6).
"Compute while playing" tells BP2 that it may go on computing items while the current one is being played. This is a good way to ensure continuous output, but remember that interactive commands do not affect items already queuing in the MIDI buffer. For instance, a "repeat" instruction will often not repeat the item currently being heard, but the one being computes.
If this option is off in continuous improvisation, BP2 keeps a minimum number of items in the queue. For this, it remembers the maximum computation time of items already produced. Let tmax be that time. While the item is being played, BP2 will wait until the duration of the part still remaining to be played is a little more than tmax. Then it proceeds with a new item, thus hoping that it will just be ready to play it when the preceding item has been played entirely (see "-gr.Mozart" §5.4).
"Interactive" sets the interactive mode on. The "-in.abc1" file is loaded and the MIDI input is used for controlling BP2 (see §6).
"Reset rule weights" is meaningful only if there are dynamic weight assignments in grammars, e.g. a weight written <100-20> in a rule that takes decreasing values 100, 80, 60,... every time the rule is used. (See reference manual §4.7) If it is on (default setting) then weights are set to their initial values each time a new item is computed from the start string.
"Reset flags" is meaningful in the context of programmed subgrammars (see §11). Normally it is necessary to delete all existing flags before generating a new item, but the opposite option may sometimes be useful.
• When "Ignore constraints" is on, the time setting algorithm does not take topological properties of sound-objects into consideration (see Bel 1990b,1991,1992, or reference manual §3-5).
"Write MIDI files" gives the option to save items as MIDI files after playing them (see §14.1).
"Write Csound scores" gives the option to save items as Csound scores after playing them (see §17).
Other buttons shown on top of Fig.24 have the following effects:
"Cyclic play" produces a single item and plays it forever.
"Use each substitution": this flag is used in "SUB" subgrammars (see §4.14 of the reference manual). If it is on, the current work string is played on the MIDI output after each substitution. Polymetric structures are evaluated and variables are ignored. If it off then only final items are played.
"Time setting display", "Time setting trace" and "Time setting step" are optional controls of the time setting algorithm. These have been used, for instance, in example "-da.checkTimeset" (see §2.2 and §13);
"Trace Csound", when checked, displays the Csound score on the "Trace" window while it is being recorded to a file.