GNU LilyPond – Extension des fonctionnalités: 1.3.1 Affichage d'expressions musicales

### 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.

#### LilyPond — Extension des fonctionnalités v2.22.2 (branche stable).