B.1 Bloques de código de LilyPond

La creación de expresiones musicales en Scheme puede ser una tarea tediosa porque a veces presentan muchos niveles de profundidad de anidamiento y el código resultante es grande. Para algunas tareas sencillas, esto puede evitarse utilizando bloques de código de LilyPond, que permiten usar la sintaxis ordinaria de LilyPond dentro de Scheme.

Los bloques de código de LilyPond tienen el siguiente aspecto:

  #{ código de LilyPond #}

He aquí un ejemplo trivial:

ritpp = #(define-event-function () ()
  #{ ^"rit." \pp #}
)

{ c'4 e'4\ritpp g'2 }

[image of music]

Los bloques de código de LilyPond se pueden usar en cualquier lugar en el que se pueda escribir código de Scheme. El lector de Scheme en efecto se modifica para que pueda incorporar bloques de código de LilyPond y pueda ocuparse de las expresiones de Scheme incrustadas que comienzan por $#.

El lector extrae el bloque de código de LilyPond y genera una llamada en tiempo de ejecución al analizador sintáctico para que interprete el código de LilyPond. Las expresiones de Scheme incrustadas en el código de LilyPond se evalúan dentro del entorno léxico del bloque de código de LilyPond, de manera que puede accederse a todas las variables locales y los parámetros de función que están disponibles en el punto en que se escribe el bloque de código de LilyPond. Las variables definidas en otros módulos de Scheme, como los módulos que contienen bloques \header y \layout, no están accesibles como variables de Scheme, es decir, precedidas de #, pero se puede acceder a ellas como variables de LilyPond, es decir, precedidas de \.

Toda la música generada dentro del bloque de código tiene su ‘origin’ establecido a la localización actual del puntero de entrada.

Un bloque de código de LilyPond puede contener cualquier cosa que podríamos utilizar en la parte derecha de una asignación. Además, un bloque de LilyPond vacío corresponde a una expresión musical vacía, y un bloque de LilyPond que contiene varios eventos musicales se convierte en una expresión de música secuencial.


Extender LilyPond v2.25.22 (development-branch).