Polymetric expressions are the basic representation model of musical data in Bol Processor. The word is a mix of polyphony and polyrhythm, the former evoking superposed streams of musical events, and the latter a metric adjustment of their durations.
This page illustrates the syntax of simple expressions and their interpretation by the polymetric expansion algorithm exposed in paper Two algorithms for the instanciation of structures of musical objects (Bel 1992). This process may get extremely complex since a whole musical work — e.g. Beethoven’s Fugue in B flat major — is handled by Bol Processor as a single polymetric structure.
In this tutorial, simple notes (“C4″, “D4″ etc.) are used following the “English” convention. All time-setting processes could be illustrated with sound-objects or simple notes in alternate conventions: “Italian/Spanish/French” or “Indian”.
Symbolic versus physical duration
Music notation systems (for humans) make use of symbolic rather than physical durations. Their units are beats rather than (milli)seconds.

in western conventional music notation
In western conventional music notation, notes and rests are represented with particular signs indicating their relative durations.
For instance, if the time signature is 3/4, we will have 3 quarter-notes (crotchets) in a bar (see picture). A half-note (minim) lasts twice longer than a quarter-note in the same context. Other relative durations are expressed in the same manner.
To get the physical duration of a note we need an additional piece of information: the metronome value, for instance “mm = 100″ meaning 100 beats (quarter-notes) per minute.
A metronome value (by default 60 bpm) is declared in the settings file of a Grammar or Data page. With this setting, note “E4″ on a Bol Processor score represents a “E” of the 4th octave played in 1 beat with physical duration 1 second.
This convention extends to sound-objects labelled with arbitrary names whose default durations are set by the streams of MIDI events or sequences of Csound instructions they are made of. Mapping symbolic to physical time for the performance of structures of sound-objects (with their metric and topologic properties) is a sophisticated process accomplished by a time-setting algorithm. A practical example is discussed on page Interactive improvisation with sound-objects.
Polymetric expression
Typical forms of polymetric expressions are:
- field 1, field2 or {field 1, field2} indicating that field1 and field2 should be superposed and the total symbolic duration should be adjusted to that of field1;
- field1 • field2 or {field1 • field2} indicating that field1 and field2 should be in sequence and the symbolic duration of each field should be adjusted to that of field1;
- {expression} is equivalent to expression.
Curled brackets ‘{‘ and ’}’ are required to produce multilevel expressions.
➡ Periods notated as bullets ‘•’ on Data and Grammar windows are converted to plain periods before sending to the console, due to its rejection of some Unicode signs.
For instance, {C4 D4, E4 F4 G4, E5} yields the following time structure with a metronome set to 60 beats per minute:

Duration is 2 beats as set by the first field “C4 D4″
The use of the first field to set the total duration is highlighted by the following examples in which fields appear in a reverse order:

Duration 3 beats

Duration 2 beats
Rests (silences) may be notated “-” for single-unit rests, or with integer numbers and ratios. The following shows a single-unit rest and a more complex one lasting 2.5 beats:

Duration 3 beats

Duration 4.5 beats

Duration 2 beats
Polymetric structures can be multilevel, for instance:

{C4 D4, {E4 F4 G4, E5} B4}
The same rules of time-setting apply to sequences in which commas are replaced with periods. For instance:

Duration is set by that of the first field “F4 2 1/2 G4″
= 4.5 beats applied to the second field
Superpositions and sequences can be combined (even in multilevel expressions) such as:

Duration 9 beats = twice that of “F4 2 1/2 G4″
Undetermined rests
Undetermined rests are a powerful feature of polymetric expressions used to avoid uneasy calculations. The polymetric expansion algorithm calculates (symbolic) durations producing the least complex expression.
They may be notated “…” or “_rest” in Data or Grammars.
➡ Since the console does not recognize this Unicode symbol, it is rewritten as “_rest” by the PHP interface.
Let us start with a trivial example. In {C4 D4 E4, … F4 G4}, undetermined rest “…” will be replaced by a single-unit rest:

= {C4 D4 E4, _rest F4 G4}
This solution produces the simplest polymetric expression. The same simple case is that of {… C4 D4 E4, F4 G4}:

= {_rest C4 D4 E4, F4 G4}
If a field of the polymetric expression contains several undetermined rests, these are assigned equal durations — in such a way that the complexity of the structure remains minimal. Consider for instance {… C4 D4 … E4, A4 F4 G4}:

= {_rest C4 D4 _rest E4, A4 F4 G4}
An undetermined rest may even be assigned duration 0 in case this yields a simpler expression. For instance, in {… C4 D4 … E4, F4 G4} duration 0 yields a “three in two” polyrhythm whereas duration 1 would yield “five in two”. The criterion for evaluating complexity is getting the lowest common multiple (LCM) of the numbers of units in each field, in effect 6 against 10. Therefore the solution is:

Every field of a polymetric expression may contain undetermined rests. Consider for instance {… C4 D4 E4, A4 B4 F4 … G4}. Here, again, assigning duration zero to each undetermined rest yields the simplest structure since “four in three” (LCM = 12) is a better trade-off than “five in four” (LCM = 20).

A more complex structure is assigned to {C4 D4 E4, A4 B4 F4 … G4 A4, C5 … D5} with rests of 1 unit in the second and third fields. The LCM of 3 and 6 is 6, which is the lowest value achievable for this structure.

Note that there is an equivalent solution in terms of complexity: assigning duration 0 to the rest in the third field. When several solutions are valid, the algorithm selects in priority the one containing the fewest null-duration rests.
A similar case is {C4 D4 E4, A4 B4 F4 … G4 A4, C5 … D5 E5}:

Here, the first rest has been assigned 1 unit and the second one 3 units. This yields the LCM of 3 and 6 = 6. Another optimal (equivalent) solution would be to assign 0 to the second rest, but it has been discarded due to the heuristics of avoiding null-duration rests.
Replacing commas with periods yields the same structure in a sequential form:

= {C4 D4 E4 • A4 B4 F4 … G4 A4 • C5 … D5 E5}
Duration of the first field “C4 D4 E4″ is applied to the 2nd and 3d ones
which makes a final count of 3 x 3 = 9 beats
Tied notes, tied sound-objects
Sound-objects or simple notes can be concatenated (“tied”). Consider for instance:

and its variation with ties notated “&”:

The time interval of a tied note/sound-object may cross the limits of (tree-shaped) polymetric structures. For instance:


The challenge of handling tied events is discussed on page Tied notes.
Real music is “polymetric”
Rules and heuristics associated with polymetric expressions make sense when dealing with real musical items. Notably, they made it possible to import MusicXML scores and interpret them as Bol Processor data (read page).
Check for instance Mozart’s musical dice game, this “Charles Ames” example and Harm Visser’s demos.
Further reading
Bel, Bernard. Rationalizing musical time: syntactic and symbolic-numeric approaches. In Barlow, Clarence (ed.) The Ratio Book. Den Haag: Royal Conservatory - Institute of Sonology. 2001: 86-101.
Bol Processor shares a few features, with respect to pattern representation, with the TIDAL Pattern Language for the Live Encoding of Music (Alex McLean & Geraint Wiggins, 2010).
An Indian conception of time can be seen most clearly in the venerable Bol Processor system for algorithmic music, created by computer scientist Bernard Bel from work on notating tabla rhythms and developed over forty years. Drawing from Indian classical music, it includes an expressive approach to time setting that seems unique to the algorithmic music field, in which sound events are organized in terms of interrelationships before being mapped to physical time. Although not a live coding system itself, it has been heavily influential on the design of the TidalCycles system, particularly its embedded “mininotation” language for describing rhythm in the Bol Processor and more generally its representation of music based not on the duration of events (as in staff notation) but on the duration of cycles.
Alan Blackwell, Emma Cocker, Geoff Cox, Thor Magnusson, Alex McLean, Live Coding: A User’s Manual, MIT 2022, page 195.