A.3.1 Presentación de las expresiones musicales
Si se está escribiendo una función musical, puede ser muy
instructivo examinar cómo se almacena internamente una expresión
musical. Esto se puede hacer con la función musical
\displayMusic
.
{ \displayMusic { c'4\f } }
imprime lo siguiente:
(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))))
De forma predeterminada, LilyPond imprime estos mensajes sobre la
consola junto al resto de los mensajes. Para separar estos
mensajes y guardar el resultado de \display{LOQUESEA}
,
puede especificar que se use un puerto de salida opcional:
{ \displayMusic #(open-output-file "display.txt") { c'4\f } }
Esto sobreescribe el archivo de salida anterior cada vez ques e llama; si necesitamos escribir más de una expresión, debemos usar una variable para el puerto y reutilizarla:
{ port = #(open-output-file "display.txt") \displayMusic \port { c'4\f } \displayMusic \port { d'4 } #(close-output-port port) }
El manual de Guile describe los puertos detalladamente. Solo es realmente necesario cerrar el puerto si necesitamos leer el archivo antes de que LilyPond termine; en el primer ejemplo, no nos hemos molestado en hacerlo.
Un poco de reformateo hace a la información anterior más fácil de leer:
(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))))
Una secuencia musical { … }
tiene el nombre
SequentialMusic
, y sus expresiones internas se almacenan
coma una lista dentro de su propiedad 'elements
. Una nota
se representa como un objeto NoteEvent
(que almacena las
propiedades de duración y altura) con información adjunta (en este
caso, un evento AbsoluteDynamicEvent
con una propiedad
"f"
de texto) almacenada en su propiedad
articulations
.
\displayMusic
devuelve la música que imprime en la consola,
y por ello se interpretará al tiempo que se imprime en la consola.
Para evitar la interpretación, escriba \void
antes de
\displayMusic
.