Sound-objects, simple notes, homomorphisms

Simple notes are predefined sound-objects containing only a NoteOn/NoteOff pair of messages in the MIDI environment. BP2 allows the combined use of simple notes and sound-objects in the same project.

If the Csound output is active, simple notes are converted to Csound events using the current instrument specifications and default channel-to-instrument mappings (see §17.3).

The labels of simple notes and sound-objects are terminal symbols of the grammar. Whereas the labels of simple notes are predefined, the names of sound-objects must be declared in the "Alphabet" window (which is saved as a "-ho.<filename> " file).

The alphabet may also be used to define mappings of terminal symbols -- both sound-objects and simple notes. Project "-gr.tryhomomorphism" is a simple grammar illustrating the use of a such a mapping -- more precisely, a homomorphism.

The grammar reads:

S --> a b c (=X) * (:X)
X --> do4 c mi4 fa4

The use of brackets (= )(: ) and the asterisk will be explained in a minute. Let us first look at the "-ho.tryhomomorphism" alphabet:

-mi.abc
*
a --> b
do4 --> re4
c --> fa4 --> d
sync a' b' c' d' e e' f f' g g' h h' i i' j j' k k' l l' m m' n n' o o' p p' q q' r r' s s' t t' u u' v v' w w' x x' y y' z z'

Sound-objects are named 'a', 'b', 'c', 'd', 'sync', etc. Their detailed specifications are found in the file "-mi.abc". The asterisk is not a terminal symbol. BP2 recognises it as the label of an homomorphism. It does so because it finds arrows in the following list of terminal symbols. Thus, an expression like

a --> b

means that 'b' is the image of 'a' through the homomorphism notated '*'. We will see later how this mapping is used. Similarly, the alphabet indicates that 're4'(a simple note) is the image of 'do4', 'fa4'the image of 'c', and 'd' the image of 'fa4'. Sound-objects can be mapped to simple notes and conversely.

Every terminal symbol (sound-object or simple note) that is not explicitly mapped to another one is mapped to itself. Thus, the image of 'b' is 'b', etc.

Since this mapping is a homomorphism, strings of terminals are also mapped in a straightforward manner. Thus, "b re4" is the image of "a do4" since 'b' is the image of 'a' and 're4'the image of 'do4'. To complete the scene, the image of an empty string is an empty string.

Several homomorphisms may be defined on the same alphabet. Their descriptions should be separated with lines of hyphens, and the labels of homomorphisms should appear on top of each section. If a section contains at least an arrow, BP2 understands that the first line contains the label of a homomorphism, otherwise it will pick it up as a new terminal symbol.

Let us now see how this simple homomorphism is used.

When running the grammar (cmd-r) a single musical item is produced

a b c (= do4 c mi4 fa4) * (: re4 c mi4 d)

which is actually printed without brackets:

a b c do4 c mi4 fa4 re4 c mi4 d

The leftmost bracket (marked with '=') is a 'master' expression while the rightmost one (marked with ':') is its 'slave'. The slave bracket reproduces exactly the content of the master bracket it is attached to. Exactly? Not here: since the slave bracket is preceded by '*' its content is replaced with a mapping of the master bracket through homomorphism '*'.

You do not need to understand everything about homomorphisms to go on with BP2. (More information is available in the reference manual §4.1, and publications, notably Kippen & Bel 1992.) The idea came from the need of a general syntactic model coping with repetitions and pseudo-repetitions in music. The first homomorphism we ever used was a transformation known to North Indian tabla players: when repeating patterns they often change voiced sounds such as 'dha', 'ge' to their unvoiced counterparts 'ta', 'ke'... (See "-gr.dhin--" for instance.)

Projects "-gr.Ruwet" and "-gr.cloches1" are illustrations of homomorphisms used to modify tonal and modal patterns.