| 2001-10-22 - Représentation Hiérarchique de la
musique
Un des aspects majeurs du langage compo est que sa structure hiérarchique
permet de factoriser toute structure présente de manière
récurrente dans une pièce, et ce, en tenant compte
d'éventuelles modulations mélodiques ou augmentations
ou diminutions rhythmiques. Voir l'exemple de canon populaire de
la présentation pour une
illustration de cet aspect.
Cette faculté de structuration hiérarchique présente
également un avantage pratique immédiat, lorsqu'il
s'agit de transcrire une partition existante. En effet, elle permet
souvent d'économiser une partie non négligeable de
ce travail fastidieux. Supposons qu'il s'agisse de transcrire la
phrase suivante :

En premier lieu, il convient d'exploiter le registre centré
sur la cinquième octave de la mélodie supérieure.
En écrivant toute cette mélodie à l'intérieur
d'une structure englobante comportant la hauteur :do5,
il ne sera pas nécessaire d'indiquer l'octave de chacune
des notes :
(note :sync
(:treble :do5 (:do)(:mi)...)
(:bass ...))
De même, la rafale de doubles croches de cette même
voix peut être incluse dans une sous-structure comportant
une indication rhythmique de double croche, en évitant ainsi
la répétition de cette indication au niveau de chaque
note :
(note :sync
(:treble :do5 (:do)(:mi) (:dc
(:sol)(:fa)(:mi)(:fa)(:sol)(:sib)(:la)(:sol)(:fa#)(:la)(:sol)(:fa#)(:sol)(:la)(:sol)(:fa))(:re
:b))
(:bass ...))
En ce qui concerne la basse, la redondance à éliminer
est d'un autre ordre. Il est possible d'économiser l'écriture
manuelle de chacune des octaves harmoniques en abstrayant cette
structure de la façon suivante :
(note :sync
(:treble :do5 (:do)(:mi) (:dc (:sol)(:fa)(:mi)(:fa)(:sol)(:sib)(:la)(:sol)(:fa#)(:la)(:sol)(:fa#)(:sol)(:la)(:sol)(:fa))(:re
:b))
(:bass x=(:chord (:do)(:do5)) ...))
Il suffit alors d'instancier ce modèle x en créant
autant de structures que nécessaire le contenant, chacune
affectée de la hauteur désirée :
(note :sync
(:treble :do5 (:do)(:mi) (:dc (:sol)(:fa)(:mi)(:fa)(:sol)(:sib)(:la)(:sol)(:fa#)(:la)(:sol)(:fa#)(:sol)(:la)(:sol)(:fa))(:re
:b))
(:bass x=(:chord (:do)(:do5)) (:do2 (:do
x)(:si3 x)(:do x)(:re x)(:mi x)(:do x)(:re :b x))))
Notons que l'ensemble a également été inclus
dans une structure de hauteur globale :do2 permettant
l'abaissement de deux octaves vers le bas.
A titre de comparaison, une écriture de l'ensemble sans
tenir compte de ces possibilités de factorisation aurait
nécessité l'écriture du code suivant :
(note :sync
(:treble (:do5)(:mi5)(:sol5 :dc)(:fa5 :dc)(:mi5
:dc)(:fa5 :dc)(:sol5 :dc)(:sib5 :dc)(:la5 :dc)(:sol5 :dc)(:fa#5
:dc)(:la5 :dc)(:sol5 :dc)(:fa#5 :dc)(:sol5 :dc)(:la5 :dc)(:sol5
:dc)(:fa5 :dc)(:re5 :b))
(:bass (:chord (:do2)(:do3))(:chord (:si1)(:si2))(:chord
(:do2)(:do3))(:chord (:re2)(:re3))(:chord (:mi2)(:mi3))(:chord (:do2)(:do3))(:chord
:b (:re2)(:re3))))
Ce qui est, dans le cas de pièces de taille conséquente,
non seulement plus fastidieux à écrire, mais également
moins lisible.
|