| [ < ] | [ > ] | [ << ] | [ Subir ] | [ >> ] | [Arriba] | [Índice general] | [Índice] | [ ? ] |
@translationof Music functions
Las funciones musicales son procedimientos de Scheme que pueden crear automáticamente expresiones musicales, y se pueden usar para simplificar enormemente el archivo de entrada.
| [ < ] | [ > ] | [ << ] | [ Subir ] | [ >> ] | [Arriba] | [Índice general] | [Índice] | [ ? ] |
@translationof Music function definitions
La forma general para definir funciones musicales es:
funcion =
#(define-music-function
(arg1 arg2 …)
(tipo1? tipo2? …)
cuerpo)
|
de forma bastante análoga a Definición de funciones de Scheme. Lo más probable es que el cuerpo sea un bloque de código de LilyPond.
Para ver una lista de los predicados de tipo disponibles, consulte (notation)Predicados de tipo predefinidos sección ‘Predicados de tipo predefinidos’ en Referencia de la Notación.
Referencia de la notación: (notation)Predicados de tipo predefinidos sección ‘Predicados de tipo predefinidos’ en Referencia de la Notación.
Archivos de inicio: ‘lily/music-scheme.cc’, ‘scm/c++.scm’, ‘scm/lily.scm’.
| [ < ] | [ > ] | [ << ] | [ Subir ] | [ >> ] | [Arriba] | [Índice general] | [Índice] | [ ? ] |
@translationof Music function usage
Una ‘función musical’ debe devolver una expresión que se
corresponda con el predicado ly:music?. Esto hace que las
llamadas a funciones musicales sean aproopiadas como argumentos
del tipo ly:music? para otra llamada a una función
musical.
Si se usa una llamada a función musical dentro de otros contextos, el contexto puede aplicar restricciones semánticas adicionales.
-, ^, y _) para poder integrar
adecuadamente el post-evento producido por la llamada a la
función musical dentro de la expresión circundante.
rhythmic-event, probablemente un NoteEvent.
Se pueden aplicar funciones ‘polimórficas’, como \tweak,
a los post-eventos, componentes de acordes y expresiones
musicales del nivel superior.
| [ < ] | [ > ] | [ << ] | [ Subir ] | [ >> ] | [Arriba] | [Índice general] | [Índice] | [ ? ] |
@translationof Simple substitution functions
Una función de sustitución sencilla es una función musical cuya expresión musical de salida está escrita en código de LilyPond y contiene argumentos de la función en la expresión de salida. Están descritas en (notation)Ejemplos de funciones de sustitución sección ‘Ejemplos de funciones de sustitución’ en Referencia de la Notación.
| [ < ] | [ > ] | [ << ] | [ Subir ] | [ >> ] | [Arriba] | [Índice general] | [Índice] | [ ? ] |
@translationof Intermediate substitution functions
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
(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 (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 valor
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 (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
#})
|
| [ < ] | [ > ] | [ << ] | [ Subir ] | [ >> ] | [Arriba] | [Índice general] | [Índice] | [ ? ] |
@translationof Mathematics in functions
Las funciones musicales pueden contar con programación de Scheme además de la simple sustitución:
AltOn = #(define-music-function (mag) (number?) #{ \override Stem.length = #(* 7.0 mag) \override NoteHead.font-size = #(inexact->exact (* (/ 6.0 (log 2.0)) (log mag))) #}) AltOff = { \revert Stem.length \revert NoteHead.font-size } \relative { c'2 \AltOn #0.5 c4 c \AltOn #1.5 c c \AltOff c2 }
Este ejemplo se puede reescribir de forma que pase expresiones musicales:
withAlt = #(define-music-function (mag music) (number? ly:music?) #{ \override Stem.length = #(* 7.0 mag) \override NoteHead.font-size = #(inexact->exact (* (/ 6.0 (log 2.0)) (log mag))) #music \revert Stem.length \revert NoteHead.font-size #}) \relative { c'2 \withAlt #0.5 { c4 c } \withAlt #1.5 { c c } c2 }
| [ < ] | [ > ] | [ << ] | [ Subir ] | [ >> ] | [Arriba] | [Índice general] | [Índice] | [ ? ] |
@translationof Functions without arguments
En casi todos los casos, una función sin argumentos se debe escribir con una variable:
dolce = \markup{ \italic \bold dolce }
|
Sin embargo, en raras ocasiones puede ser de utilidad crear una función musical sin argumentos:
mostrarNumeroDeCompas =
#(define-music-function
()
()
(if (eq? #t (ly:get-option 'display-bar-numbers))
#{ \once \override Score.BarNumber.break-visibility = ##f #}
#{#}))
|
Para la impresión real de los números de compás donde se llama a
esta función, invoque a lilypond con
lilypond -d display-bar-numbers ARCHIVO.ly |
| [ < ] | [ > ] | [ << ] | [ Subir ] | [ >> ] | [Arriba] | [Índice general] | [Índice] | [ ? ] |
@translationof Void music functions
Una función musical debe devolver una expresión musical. Si
quiere ejecutar una función exclusivamente por sus efectos
secundarios, debería usar define-void-function. Pero
puede haber casos en los que a veces queremos producir una
expresión musical, y a veces no (como en el ejemplo anterior).
Devolver una expresión musical void (vacía) por medio de
#{ #} lo hace posible.
| [ < ] | [ > ] | [ << ] | [ Subir ] | [ >> ] |
Este documento ha sido generado por gub el el 13 julio 2020 utilizando texi2html 1.82.
Otros idiomas: English, deutsch, français.
Acerca de la selección automática del idioma.