| [ << Tutorial de Scheme ] | [Top][Contents][Index] | [ Interfaces para programadores >> ] |
| [ < Una primera aproximación (ejemplo) ] | [ Up: Construir funciones complicadas ] | [ Propiedades musicales > ] |
A.3.2 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.
| [ << Tutorial de Scheme ] | [Top][Contents][Index] | [ Interfaces para programadores >> ] |
| [ < Una primera aproximación (ejemplo) ] | [ Up: Construir funciones complicadas ] | [ Propiedades musicales > ] |