B.3.4 Funciones de sustitución intermedias
Las funciones de sustitución intermedias contienen una mezcla de código de Scheme y de LilyPond dentro de la expresión musical que se devuelve.
Algunas instrucciones \override
requieren un argumento que
consiste en una pareja de números (llamada una célula cons en
Scheme).
La pareja se puede pasar directamente dentro de la función musical,
usando una variable pair?
:
barraManual = #(define-music-function (parser location principio-final) (pair?) #{ \once \override Beam.positions = #principio-final #}) \relative c' { \barraManual #'(3 . 6) c8 d e f }
De forma alternativa, los números que componen la pareja se pueden pasar como argumentos separados, y el código de Scheme que se ha usado para crear la pareja se puede incluir dentro de la expresión musical:
manualBeam = #(define-music-function (parser location beg end) (number? number?) #{ \once \override Beam.positions = #(cons beg end) #}) \relative c' { \manualBeam #3 #6 c8 d e f }
Las propiedades se mantienen conceptualmente utilizando una pila
por cada propiedad, por cada grob y por cada contexto. Las
funciones musicales pueden requerir la sobreescritura de una o
varias propiedades durante el tiempo de duración de la función,
restaurándolas a sus valores previos antes de salir. Sin embargo,
las sobreescrituras normales extraen y descartan la cima de la
pila de propiedades actual antes de introducir un valor en ella,
de manera que el valor anterior de la propiedad se pierde cuando
se sobreescribe. Si se quiere preservar el valor anterior, hay
que preceder la instrucción \override
con la palabra clave
\temporary
, así:
\temporary \override …
El uso de \temporary
hace que se borre la propiedad
(normalmente fijada a un cierto valor) pop-first
de la
sobreescritura, de forma que el valor anterior no se extrae de la
pila de propiedades antes de poner en ella el valor nuevo. Cuando
una instrucción \revert
posterior extrae el avlor
sobreescrito temporalmente, volverá a emerger el valor anterior.
En otras palabras, una llamada a \temporary \override
y a
continuación otra a \revert
sobre la misma propiedad, tiene
un valor neto que es nulo. De forma similar, la combinación en
secuencia de \temporary
y \undo
sobre la misma
música que contiene las sobreescrituras, tiene un efecto neto
nulo.
He aquí un ejemplo de una función musical que utiliza lo expuesto
anteriormente. El uso de \temporary
asegura que los
valores de las propiedades cross-staff
y style
se
restauran a la salida a los valores que tenían cuando se llamó a
la función crossStaff
. Sin \temporary
, a la salida
se habrían fijado los valores predeterminados.
crossStaff = #(define-music-function (parser location notes) (ly:music?) (_i "Create cross-staff stems") #{ \temporary \override Stem.cross-staff = #cross-staff-connect \temporary \override Flag.style = #'no-flag #notes \revert Stem.cross-staff \revert Flag.style #})
Otros idiomas: English, deutsch, français.
Acerca de la selección automática del idioma.