[ < ] [ > ]   [ << ] [ Amunt ] [ >> ]         [Part superior] [Continguts] [Índex] [ ? ]

5.6 Ús de les funcions musicals

@translationof Using music functions

Sempre que calgui reutilitzar ajustaments amb diferents expressions musicals, freqüentment convé fer que l’ajustament formi part d’una funció musical. En aquesta secció estudiarem sols les funcions de substitució, en les quals l’objecte es substitueix una variable dins d’un fragment de codi d’entrada del LilyPond. Es descriuen altres funcions més complexes a (extending)Music functions section ‘Funcions musicals’ in Extensions.


[ < ] [ > ]   [ << ] [ Amunt ] [ >> ]         [Part superior] [Continguts] [Índex] [ ? ]

5.6.1 Sintaxi de les funcions de substitució

@translationof Substitution function syntax

És fàcil fer una funció que substitueixi una variable dins de codi del LilyPond. La forma general d’aquestes funcions és

 
funcion =
#(define-music-function
     (arg1 arg2 …)
     (type1? type2? …)
   #{
     …música…
   #})

donde

argNn-èssim argument
typeN?predicat de tipus de l’Scheme per al qual argN ha de retornar #t.
…música…codi d’entrada normal del LilyPond, que utilitza $ (en els llocs en els quals sols es permeten construccions del LilyPond) o # (per usar-ho com un valor de l’Scheme o un argument de funció musical o música dins de llistes de música) per referenciar arguments (per exemple ‘#arg1’).

Cal la llista de predicats de tipus. Alguns dels predicats de tipus més comuns que es fan servir en les funcions musicals són:

 
boolean?
cheap-list?  (utilitzar en lloc de ‘list?’ per processar-ho més ràpid)
ly:duration?
ly:music?
ly:pitch?
markup?
number?
pair?
string?
symbol?

Per veure una llista dels predicats de tipus disponibles consulteu Predicats de tipus predefinits. També es permeten els predicats de tipus definits per l’usuari.

Vegeu també

Referència de la notació: Predicats de tipus predefinits.

Expansió del LilyPond: (extending)Music functions section ‘Funcions musicals’ in Extensions.

Fitxers instal·lats: ‘lily/music-scheme.cc’, ‘scm/c++.scm’, ‘scm/lily.scm’.


[ < ] [ > ]   [ << ] [ Amunt ] [ >> ]         [Part superior] [Continguts] [Índex] [ ? ]

5.6.2 Exemples de funcions de substitució

@translationof Substitution function examples

Aquesta secció presenta alguns exemples de funcions de substitució. No pretenen ésser exhaustives, sinó demostrar algunes de les possibilitats de les funcions de substitució senzilles.

En el primer exemple es defineix una funció que simplifica l’ajustament del farcit d’un element d’inscripció de text TextScript:

 
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
}

[image of music]

A més de nombre, podem usar expressions musicals, com notes, per als arguments de les funcions musicals:

 
custosNote =
#(define-music-function
     (note)
     (ly:music?)
   #{
     \tweak NoteHead.stencil #ly:text-interface::print
     \tweak NoteHead.text
        \markup \musicglyph "custodes.mensural.u0"
     \tweak Stem.stencil ##f
     #note
   #})

\relative { c'4 d e f \custosNote g }

[image of music]

Ambdues funcions són expressions úniques senzilles en les quals sols falta l’últim element d’una crida de funció o sobreescriptura. Per a aquestes definicions de funció en particular, hi ha una sintaxi alternativa més simple que consisteix simplement a escriure la part constant de l’expressió i substituir l’element final que falta per \etc:

 
padText =
  \once \override TextScript.padding = \etc

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

[image of music]

 
custosNote =
  \tweak NoteHead.stencil #ly:text-interface::print
  \tweak NoteHead.text
     \markup \musicglyph "custodes.mensural.u0"
  \tweak Stem.stencil ##f
  \etc

\relative { c'4 d e f \custosNote g }

[image of music]

Es poden definir funcions de substitució amb més d’un argument:

 
tempoPadded =
#(define-music-function
     (padding tempotext)
     (number? markup?)
   #{
     \once \override Score.MetronomeMark.padding = #padding
     \tempo \markup { \bold #tempotext }
   #})

\relative {
  \tempo \markup { "Low tempo" }
  c''4 d e f g1
  \tempoPadded #4.0 "High tempo"
  g4 f e d c1
}

[image of music]


[ < ] [ > ]   [ << ] [ Amunt ] [ >> ]

This document was generated by gub on Juliol 13, 2020 using texi2html 1.82.

Altres idiomes: English, deutsch, español, français, italiano, 日本語.
Quant a la selecció automàtica de la llengua.