A beginner's tutorial

By Harm Visser, 2007

Let us take a look to the ideas and his­tor­i­cal back­ground of BP2. At the end of the fifties the lin­guis­tic sci­en­tist Noam Chomsky wrote his famous book 'Syntactic Structures'. It was an attempt to gen­er­al­ize the struc­ture of lan­guage in a sys­tem of rewrite-rules, so called 'gram­mars':

Sentence --> NP + VP
NP --> T + N
VP --> Verb + NP
T --> The
N --> man, ball..
Verb -> hit, took…

When we com­put­er­ize such a gram­mar and we give the com­mand 'derive' we should see that Sentence became NP + VP, NP became T + N, VP became Verb + NP etc. At the end we see that N became 'man' and Verb became 'hit'. No fur­ther deriva­tion is pos­si­ble. The words 'man', 'hit' are there­fore called 'ter­mi­nal symbols'.

After deriva­tion of Sentence we should read: the man hit… (or what­ev­er). Such a Chomsky 'gram­mar' can be seen as a set of rules to gen­er­ate well-formed English sentences.

You can read a rule as 'X --> Y'. It gives the 'instruc­tion' to rewrite X as Y (X becomes Y). Maybe you can imag­ine already that such a grammar-system can also apply to musi­cal syntax.

Let us there­fore com­pare the Chomsky-example with this BP2-example:

S(entence) --> X Y
X --> Motif1
Y --> Motif2
Motif1 --> C3
Motif2 --> D3

After deriva­tion we should hear the ter­mi­nal sym­bols C3 D3.

The main dif­fer­ence between the 'Chomsky-grammar' and a BP2-grammar is that a BP2-grammar is exclu­sive. It is a for­mal­i­sa­tion of one par­tic­u­lar piece of music. Chomsky-grammars try to gen­er­al­ize lan­guage as a whole.

At the oth­er hand you can in BP2 'for­mal­ize' the sonata-form:

S --> Sonata
Sonata --> Theme1 Theme2 Development Coda
Theme1 --> Notes1
Theme2 --> Notes2
Development VariateNotes1 VariateNotes2
Coda --> HalfTheme1 HalfTheme2

When we derive the Sonata, we shall hear noth­ing, because there are no ter­mi­nal sym­bols i.c. 'real notes', like C3, D2, etc. So let's fin­ish the Sonata:

S --> Sonata
Sonata --> Theme1 Theme2 Development Coda
Theme1 --> Notes1
Theme2 --> Notes2
Development --> VariateNotes1 VariateNotes2
Coda --> HalfTheme1 HalfTheme2
Notes1 --> A3 B3 A3 G3
Notes2 --> D3 E3 F3 A3
VariateNotes1 --> _transpose(2) Notes1
VariateNotes2 --> _retro Notes2
HalfTheme1 --> A3 B3
HalfTheme2 --> D3 E3

Note that we use for VariateNotes1 and VariateNotes2 the tools _transpose(2) and _retro.

_transpose(x) trans­pos­es up or down at a giv­en inter­val: _transpose(2) (two semi­tone up), _transpose(6) (six semi­tones up) _transpose(-7) (sev­en semi­tones down). You can also use val­ues like _transpose(0.2).

The _retro tool stands of course for 'ret­ro­grade'. It turns the sym­bols back­wards. You can read com­mands like _transpose and _retro as 'trans­form­ers'.

Well, let's lis­ten to this Sonata! Select S and 'Play selection':

A3 B3 A3 G3 D3 E3 F3 A3 _transpose(2) A3 B3 A3 G3 E3 D3 B3 A3 A3 F3 E3 D3

A piano-roll dis­play of the Sonata

There are two impor­tant things to remember

  1. When you write a vari­able like Theme1 or VariateNotes2 or Sonata (yes, these are vari­ables until you give them a 'con­tent'), start the vari­able with a cap­i­tal and don't use emp­ty spaces between sym­bols. So Not 'sonata', but 'Sonata'. Not 'n1', but 'N1', not 'my piece', but 'Mypiece'.
  2. You can lis­ten to every stage or lev­el of your piece at every moment. So, instead select­ing S, you can select Notes1 or Development, or G3… In oth­er words, you can lis­ten to every com­pos­i­to­r­i­al detail! Try to make your own Sonata now!

Note that the example-Sonata is also a descrip­tion of the actu­al piece. That is to say that the first half is the descrip­tion, the sec­ond half is the 'real­i­sa­tion' of the descrip­tion. This approach means that a descrip­tion can also have a 'sub­de­scrip­tion', while the sub­de­scrip­tion can have… indeed, a sub­sub­de­crip­tion. So BP2 is the per­fect tool for hier­ar­chi­cal descrip­tions of musi­cal structures.


Leave a Reply

Your email address will not be published. Required fields are marked *