[ < ] [ > ]   [ << ] [ Su ] [ >> ]         [Inizio] [Contenuti] [Indice] [ ? ]

5.6 Uso delle funzioni musicali

@translationof Using music functions

Quando le modifiche devono essere riusate con diverse espressioni musicali, è spesso conveniente fare in modo che la modifica faccia parte di una funzione musicale. In questa sezione, trattiamo soltanto le funzioni di sostituzione, dove l’obiettivo è sostituire una variabile in un punto del codice di input di LilyPond. Altre funzioni più complesse sono descritte in (extending)Music functions section ‘Music functions’ in Estendere.


[ < ] [ > ]   [ << ] [ Su ] [ >> ]         [Inizio] [Contenuti] [Indice] [ ? ]

5.6.1 Sintassi della funzione di sostituzione

@translationof Substitution function syntax

Creare una funzione che sostituisca una variabile presente nel codice LilyPond è semplice. La forma generica di queste funzioni è:

 
funzione =
#(define-music-function
     (arg1 arg2 …)
     (tipo1? tipo2? …)
   #{
     …musica…
   #})

dove

argNnesimo argomento
tipoN?un tipo di predicato Scheme per il quale argN deve ritornare #t.
…musica…il normale input LilyPond, usando $ (nei punti in cui sono consentiti solo i costrutti LilyPond) o # (per usarlo come un valore Scheme o come argomento di una funzione musicale o come musica all’interno di liste di musica) per riferirsi agli argomenti (es: ‘#arg1’).

La lista del tipo di predicati è obbligatoria. Alcuni dei tipi di predicati più comuni usati nelle funzioni musicali sono:

 
boolean?
cheap-list?  (usarlo al posto di ‘list?’ per un'elaborazione più veloce)
ly:duration?
ly:music?
ly:pitch?
markup?
number?
pair?
string?
symbol?

Un elenco dei tipi di predicati disponibili si trova in Tipi di predicati predefiniti. Sono consentiti anche tipi di predicati definiti dagli utenti.

Vedi anche

Guida alla notazione: Tipi di predicati predefiniti.

Estendere LilyPond: (extending)Music functions section ‘Music functions’ in Estendere.

File installati: ‘lily/music-scheme.cc’, ‘scm/c++.scm’, ‘scm/lily.scm’.


[ < ] [ > ]   [ << ] [ Su ] [ >> ]         [Inizio] [Contenuti] [Indice] [ ? ]

5.6.2 Esempi della funzione di sostituzione

@translationof Substitution function examples

Questa sezione presenta alcuni esempi di funzione di sostituzione. L’obiettivo non è fornire un elenco esaustivo, ma mostrare soltanto alcune delle possibilità di semplici funzioni di sostituzione.

Nel primo esempio, viene definita una funzione che semplifica il padding di un oggetto TextScript:

 
padText =
#(define-music-function
     (padding)
     (number?)
   #{
     \once \override TextScript.padding = #padding
   #})

\relative {
  c''4^"più mosso" b a b
  \padText #1.8
  c4^"più mosso" b a b
  \padText #2.6
  c4^"più mosso" b a b
}

[image of music]

Oltre ai numeri, si possono usare come argomenti delle funzioni musicali anche le espressioni musicali, come le note:

 
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]

Entrambe queste funzioni sono semplici espressioni singole dove manca soltanto l’ultimo elemento di una chiamata di una funzione o di una sovrascrittura. Per queste particolari definizioni di funzione, esiste una sintassi alternativa più semplice, che consiste nello scrivere interamente la parte costante dell’espressione e sostituire il suo elemento finale mancante con \etc:

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

\relative {
  c''4^"più mosso" b a b
  \padText #1.8
  c4^"più mosso" b a b
  \padText #2.6
  c4^"più 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]

Si possono definire funzioni di sostituzione con molteplici argomenti:

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

\relative {
  \tempo \markup { "Tempo basso" }
  c''4 d e f g1
  \tempoPadded #4.0 "Tempo alto"
  g4 f e d c1
}

[image of music]


[ < ] [ > ]   [ << ] [ Su ] [ >> ]

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

Altre lingue: English, català, deutsch, español, français, 日本語.
A proposito della selezione automatica della lingua.