LilyPond erweitern: 1.3.1 Musikalische Funktionen darstellen

### 1.3.1 Musikalische Funktionen darstellen

Wenn man eine musikalische Funktion erstellt, ist es oft hilfreich sich anzuschauen, wie musikalische Funktionen intern gespeichert werden. Das kann mit der Funktion `\displayMusic` erreicht werden:

>     {
>       \displayMusic { c'4\f }
>     }

zeigt:

>     (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))))

Normalerweise gibt LilyPond diese Ausgabe auf der Konsole mit allen anderen Nachrichten aus. Um die wichtigen Nachrichten in einer Datei zu speichern, kann die Ausgabe in eine Datei umgeleitet werden:

>     lilypond file.ly >display.txt

Mit LilyPond- und Scheme-Magie kann man LilyPond anweisen, genau diese Ausgabe an eine eigene Datei zu senden:

>     {
>       #(with-output-to-file "display.txt"
>           (lambda () #{ \displayMusic { c'4\f } #}))
>     }

Mit etwas Umformatierung ist die gleiche Information sehr viel einfacher zu lesen:

>     (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))))

Eine musikalische `{ ... }`-Sequenz hat die Bezeichnung `SequentialMusic` und ihre inneren Ausdrücke werden als Liste in seiner `'elements`-Eigenschaft gespeichert. Eine Note ist als als ein `EventChord`-Objekt dargestellt (welches Dauer und Tonhöhe speichert) und zusätzliche Information enthält (in diesem Fall ein `AbsoluteDynamicEvent` mit einer `"f"`-Text-Eigenschaft).

`\displayMusic` gibt die Noten aus, die dargestellt werden, sodass sie sowohl angezeigt als auch ausgewertet werden. Um die Auswertung zu vermeiden, kann `\void` vor `\displayMusic` geschrieben werden.

#### LilyPond – Extending v2.22.2 (stabiler Zweig).