1.3.1 Affichage d’expressions musicales
Lorsque l’on veut écrire une fonction musicale, il est intéressant
d’examiner comment une expression musicale est représentée en interne.
Vous disposez à cet effet de la fonction musicale \displayMusic
.
{ \displayMusic { c'4\f } }
affichera
(make-music 'SequentialMusic 'elements (list (make-music 'NoteEvent 'articulations (list (make-music 'AbsoluteDynamicEvent 'text "f")) 'duration (ly:make-duration 2 0 1/1) 'pitch (ly:make-pitch 0 0 0))))
Par défaut, LilyPond affichera ces messages sur la console, parmi toutes
les autres informations. Vous pouvez, afin de les isoler et de garder
le résultat des commandes \display{TRUC}
, spécifier un
port optionnel à utiliser pour la sortie :
{ \displayMusic #(open-output-file "display.txt") { c'4\f } }
Ceci aura pour effet d’écraser tout fichier précédemment généré. Lorsque plusieurs expressions doivent être retranscrites, il suffit de faire appel à une variable pour le port puis de la réutiliser :
{ port = #(open-output-file "display.txt") \displayMusic \port { c'4\f } \displayMusic \port { d'4 } #(close-output-port port) }
La documentation de Guile fournit une description détaillée des ports. Clôturer un port n’est requis que si vous désirez consulter le fichier avant que LilyPond n’ait fini, ce dont nous ne nous sommes pas préoccupé dans le premier exemple.
L’information sera encore plus lisible après un peu de mise en forme :
(make-music 'SequentialMusic 'elements (list (make-music 'NoteEvent 'articulations (list (make-music 'AbsoluteDynamicEvent 'text "f")) 'duration (ly:make-duration 2 0 1/1) 'pitch (ly:make-pitch 0 0 0))))
Une séquence musicale { … }
se voit attribuer le nom de
SequentialMusic
, et les expressions qu’elle contient sont
enregistrées en tant que liste dans sa propriété 'elements
. Une
note est représentée par un objet NoteEvent
– contenant les
propriétés de durée et hauteur – ainsi que l’information qui lui est
attachée – en l’occurrence un AbsoluteDynamicEvent
ayant une
propriété text
de valeur "f"
– et stockée dans sa
propriété articulations
.
La fonction \displayMusic
renvoie la musique qu’elle
affiche ; celle-ci sera donc aussi interprétée. L’insertion d’une
commande \void
avant le \displayMusic
permet de
s’affranchir de la phase d’interprétation.