[ << Tutoriel Scheme ] | [Top][Contents][Index] | [ Interfaces pour programmeurs >> ] |
[ < Chaînes d’alist ] | [ Up : Scheme et LilyPond ] | [ Construction de fonctions complexes > ] |
1.2.8 Représentation interne de la musique
Dans les entrailles du programme, la musique se présente comme une liste Scheme. Cette liste comporte les différents éléments qui affecteront la sortie imprimable. L’analyse grammaticale (l’opération parsing) est le processus chargé de convertir la musique représentée par le code LilyPond en présentation interne Scheme.
L’analyse d’une expression musicale se traduit par un jeu d’objets musicaux en Scheme. Une objet musical est déterminé par le temps qu’il occupe, que l’on appelle durée. Les durées s’expriment par des nombres rationnels représentant la longueur d’un objet musical par rapport à la ronde.
Un objet musical dispose de trois types :
- un nom de musique : toute expression musicale a un nom. Par exemple, une
note amène à un NoteEvent, un
\simultaneous
à un SimultaneousMusic. Une liste exhaustive des différentes expressions est disponible dans la référence des propriétés internes, à la rubrique Music expressions. - un « type » ou interface : tout nom de musique dispose de plusieurs
types ou interfaces. Ainsi, une note est tout à la fois un
event
, unnote-event
, unrhythmic-event
et unmelodic-event
. Les différentes classes musicales sont répertoriées à la rubrique Music classes de la référence des propriétés internes. - un objet C++ : tout objet musical est représenté par un objet de la
classe C++
Music
.
L’information réelle d’une expression musicale est enregistrée sous
forme de propriétés. Par exemple, un NoteEvent dispose des
propriétés pitch
et duration
, respectivement chargées de
stocker la hauteur et la durée de cette note. Les différentes propriétés
sont répertoriées à la rubrique Music properties de la
référence des propriétés internes.
Une expression composite est un objet musical dont les propriétés
contiennent d’autres objets musicaux. S’il s’agit d’une liste d’objets,
elle sera stockée dans la propriété elements
d’un objet musical ;
s’il n’y a qu’un seul objet « enfant », il sera stocké dans la propriété
element
. Ainsi, par exemple, les enfants de
SequentialMusic iront dans elements
, alors que
l’argument unique de GraceMusic ira dans element
. De
même, le corps d’une répétition ira dans la propriété element
d’un RepeatedMusic, les alternatives quant à elles dans la
propriété elements
.
[ << Tutoriel Scheme ] | [Top][Contents][Index] | [ Interfaces pour programmeurs >> ] |
[ < Chaînes d’alist ] | [ Up : Scheme et LilyPond ] | [ Construction de fonctions complexes > ] |