In Computer Music Journal 22,2 (1998) page 63, Dutch composer Visser commented:
I think that the development of more and more visual stuff curtails the possibility of "thinking in your chair." Sometimes I develop grammars, not at the computer, but sitting with a pencil and paper. With programs [other than BP2] this is not possible: you must sit in front of the computer. The difference lies in the type of attention that each software environment demands on the part of the composer, and indeed reflects on the way s/he thinks about music.
The following is a presentation and discussion of some examples written on the Bol Processor by Harm Visser in 1998. All examples shown on this page are available in the sample set bp3-ctests-main.zip shared on GitHub. Follow the instructions on the Bol Processor ‘BP3’ and its PHP interface page to install BP3 and learn its basic operation. Download and install Csound from its distribution page.
Period notation
In the same way as it deals with superimposed sequences, the polymetric expansion algorithm computes equal symbolic durations between beat separators notated ‘•’ — namely, the period notation. A note sequence in period notation and the context-free grammar from which it is derived are shown below. In this example, the beats contain an increasing number of notes, resulting in an accelerating movement.
S --> _vel(60) A B _vel(65) C D _vel(70) E F _vel(75) G _vel(77) H _vel(80) I _vel(85) J _vel(87) K _vel(90) L
A --> E2 •
B --> D2 A
C --> B2 B
D --> G2 C
E --> F#2 D
F --> A#2 E
G --> C2 F
H --> G#2 G
I --> A2 H
J --> D#2 I
K --> C#2 J
L --> F2 K
The "_vel" operator is a velocity control that produces a gradually increasing volume of the piece. This grammar produces the following "score":
_vel(60) E2 • D2 E2 •_vel(65) B2 D2 E2 • G2 B2 D2 E2 • _vel(70) F#2 G2 B2 D2 E2 • A#2 F#2 G2 B2 D2 E2 • _vel(75) C2 A#2 F#2 G2 B2 D2 E2 • _vel(77) G#2 C2 A#2 F#2 G2 B2 D2 E2 • _vel(80) A2 G#2 C2 A#2 F#2 G2 B2 D2 E2 • _vel(85) D#2 A2 G#2 C2 A#2 F#2 G2 B2 D2 E2 • _vel(87) C#2 D#2 A2 G#2 C2 A#2 F#2 G2 B2 D2 E2 • _vel(90) F2 C#2 D#2 A2 G#2 C2 A#2 F#2 G2 B2 D2 E2 •
and the following piano-roll representation with the sound example on a Pianoteq synthesiser:
Serial tools
The following grammar produces a 10-minute piece of music with only 12 rules and 3 notes (C3, D4, F#3). It is an illustration of Visser's motto: "composing with a pencil and paper".
The rhythmic complexity is the result of the use of polymetric expressions: the superimposition of sequences listed between curly brackets {} and the resizing of "beats" thanks to the period marker '•'.
The length and complexity of the piece is achieved by using mutually recursive rules. For example, rule gram#2[2] produces "Mel1" which is rewritten by rule gram#2[1].
Three "serial tools" are used:
- _transpose(n) shifts the following sequence up by n semitones
- _rotate(x) rotates the following sequence by x units
- _keyxpand(basenote, ratio) multiplies melodic intervals by ratio relative to the basenote. For example, _keyxpand(C4, 2) would replace the sequence D4 E4 F4 with E4 G#4 Bb4. This tool is applied recursively to the fields of a polymetric expression.
Note that all the subgrammars are headed with "ORD", which means that the rules are applied in order rather than randomly. Thus, this grammar produces a unique piece of music, as is the case with all examples composed by Harm Visser. The only stochastic element in this piece is the velocity, which can vary between 60 and 100 due to the performance controls _vel(80) _rndvel(20).
The sound output was played on a Pianoteq synthesiser:
Trills
The following grammar produces trills that take advantage of tempo variations and continuous velocity variations:
Waves
Harm Visser had been asked to compose a piece à la Debussy with rubato rhythms giving the impression of waving movements. We had expected him to use the "_tempo()" tool with floating point values (or integer ratios) as arguments.
In fact he did not… In the following grammar, only the markers "1/2", "1/4" indicate regular speed changes applied to an entire section. The waving effect is produced by a clever use of (self-embedded) polymetric expressions. As the composer indicated: "It builds on the idea of embedding: {5, A B {3, A B {2, A B C D} C D} C D}."
The following is a rendering of the piece for solo piano on a Pianoteq synthesiser:
In the final version, the composer assigned parts to a different MIDI channel that controlled a physically modelled synthesised saxophone (which he had designed himself):
Fractals
Harm Visser sent this grammar with the following comment (1998):
It is completely based on a function that I have made in PatchWork. Take 3 notes and take their intervals to transpose. The result is a kind of 'autotranspose'. You get a 'fractal' - the idea of the famous Von Koch-curve. The next step is making a recursive loop, so that you can set the level of recursion. The number of notes grows exponential: 3 9 27 81 243 etc. Of course you can do the same with rhythm-values.
This grammar is a BP2-version of exactly the same idea. It has 4 recursion levels. (You might also say 'depth'. It is in fact a 'copy' of the PW-function). That's why S --> L4 (level 4) (number of notes 243).
The difference between BP2 and PW is that the function in PW is fixed, which is not the case in BP2. I can easy make subtle changes (deviations) in the process. I can 'break in', so to speak. In his grammar I have set a comma between M10 and M11 and set M11 on the sax. The result is a polymetric canon!
The following version is with piano solo on a Pianoteq synthesiser. The version with saxophone is unfortunately missing. It could be generated by playing the (type-1) MIDI file Visser8.mid on a synthesiser and assigning MIDI channel 9 to a saxophone sound.