[ < ] [ > ]   [ << ] [ Subir ] [ >> ]         [Arriba] [Índice general] [Índice] [ ? ]

B.3 Funciones musicales

@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] [ ? ]

B.3.1 Definiciones de funciones musicales

@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.

Véase tambié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] [ ? ]

B.3.2 Uso de las funciones musicales

@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.

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] [ ? ]

B.3.3 Funciones de sustitución sencillas

@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] [ ? ]

B.3.4 Funciones de sustitución intermedias

@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
}

[image of music]

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] [ ? ]

B.3.5 Matemáticas dentro de las funciones

@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
}

[image of music]

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
}

[image of music]


[ < ] [ > ]   [ << ] [ Subir ] [ >> ]         [Arriba] [Índice general] [Índice] [ ? ]

B.3.6 Funciones sin argumentos

@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] [ ? ]

B.3.7 Funciones musicales vacías

@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.