[ << Conceptos fundamentales ] | [Top][Contents][Index] | [ Trucar la salida >> ] |
[ < Crear una partitura partiendo de cero ] | [ Up : Extender las plantillas ] | [ Partituras y particellas > ] |
4.4.4 Ahorrar tecleo mediante variables y funciones
Llegado a este punto, usted ha visto cosas de este tipo:
hornNotes = \relative { c''4 b dis c } \score { { \hornNotes } }
Incluso se dará cuenta de que esto puede ser útil en música minimalista:
fragmentA = \relative { a'4 a8. b16 } fragmentB = \relative { a'8. gis16 ees4 } violin = \new Staff { \fragmentA \fragmentA | \fragmentB \fragmentA | } \score { { \violin } }
Sin embargo también puede usar estos identificadores (que también se conocen como variables, macros o instrucciones definidas por el usuario) para hacer trucos:
dolce = \markup { \italic \bold dolce } centerText = { \once \override TextScript.self-alignment-X = #CENTER } fthenp =_\markup { \dynamic f \italic \small { 2nd } \hspace #0.1 \dynamic p } violin = \relative { \repeat volta 2 { c''4._\dolce b8 a8 g a b | \centerText c4.^"hi there!" d8 e f g d | c4.\fthenp b8 c4 c-. | } } \score { { \violin } }
Obviamente estos identificadores son útiles para ahorrar tecleo. Pero son dignos de tener en cuenta incluso si se van a utilizar una sola vez: reducen la complejidad. Examinemos el ejemplo anterior reescrito sin ningún identificador. Encontrará que es mucho más difícil de leer, sobre todo la última línea.
violin = \relative { \repeat volta 2 { c''4._\markup { \italic \bold dolce } b8 a8 g a b | \once \override TextScript.self-alignment-X = #CENTER c4.^"hi there!" d8 e f g d | c4._\markup { \dynamic f \italic \small { 2nd } \hspace #0.1 \dynamic p } b8 c4 c-. | } }
¿Se acuerda de los ‘post-eventos’? Las articulaciones, digitaciones, y cualquier cosa que se deba añadir después de una nota (véase Estructura de un elemento de nota), con frecuencia precedido de un guion o un modificador de dirección. De hecho, incluso estos eventos se pueden almacenar en una variable (en cuyo caso no se requieren las llaves curvas acostumbradas, ya que no las usaríamos tampoco entre una nota y sus articulaciones).
Si la mencionada definición incluye un prefijo, entonces la variable se peude usar directamente después de la nota, a no ser que queramos cambiar la dirección, en cuyo caso podemos insertar un modificador que tendrá la prevalencia:
articulationVar = -^-! artEsprVar = \articulationVar ^\espressivo \relative c' { c\articulationVar d e2^\articulationVar d2\artEsprVar c_\artEsprVar }
Hasta ahora hemos contemplado la sustitución estática: cuando
LilyPond se encuentra con \centerText
, lo sustituye con
aquello que hemos definido que sea (es decir, todo lo que está a
la derecha de centerText=
).
LilyPond también puede manejar sustituciones no estáticas (piense en ellas como en funciones).
padText = #(define-music-function (padding) (number?) #{ \once \override TextScript.padding = #padding #}) \relative { c''4^"piu mosso" b a b \padText #1.8 c4^"piu mosso" b a b \padText #2.6 c4^"piu mosso" b a b }
La utilización de identificadores también es una buena forma de
reducir el trabajo si la sintaxis de entrada de LilyPond cambia
(véase Actualizar ficheros con convert-ly). Si tiene
una sola definición (como p.ej. \dolce
) para todos sus
archivos (ver Hojas de estilo), y después la sintaxis se
modifica, sólo tendrá que actualizar su definición \dolce
única, en lugar de tener que hacer cambios en cada uno de los
archivos .ly.
[ << Conceptos fundamentales ] | [Top][Contents][Index] | [ Trucar la salida >> ] |
[ < Crear una partitura partiendo de cero ] | [ Up : Extender las plantillas ] | [ Partituras y particellas > ] |