[ < ] [ > ]   [ << ] [ Nach oben ] [ >> ]         [Anfang] [Inhalt] [Index] [ ? ]

5.6 Musikfunktionen benutzen

@translationof Using music functions

Wenn Optimierungen von unterschiedlichen musikalischen Ausdrücken wiederverwendet werden sollen, bietet es sich oft an, den „Optimierungsanteil“ einer musikalischen Funktion zu erstellen. In diesem Abschnitt sollen nur Ersetzungen erklärt werden, wo es darum geht, eine Variable mit einem Stück LilyPond-Code zu ersetzen. Andere komplexere Funktionen werden beschrieben in (extending)Musikalische Funktionen in Abschnitt ‘Musikalische Funktionen’ in Extending.


[ < ] [ > ]   [ << ] [ Nach oben ] [ >> ]         [Anfang] [Inhalt] [Index] [ ? ]

5.6.1 Syntax der Ersetzungsfunktion

@translationof Substitution function syntax

Es ist einfach eine Funktion zu erstellen, die eine Variable in LilyPond-Code umwandelt. Die generelle Form dieser Funktionen ist:

 
Funktion =
#(define-music-function
     (Arg1 Arg2 …)
     (Typ1? Typ2? …)
   #{
     …Noten…
   #})

wobei

ArgNntes Argument
TypN?ein Scheme Typenprädikat, für das ArgN den Wert #t ausgibt.
…Noten…normale LilyPond-Eingabe, wobei $ (wenn nur LilyPond-Konstruktionen erlaubt sind) oder # (um es als Scheme-Wert oder Argument einer musikalischen Funktionen oder als Noten innerhalb von Notenlisten einzusetzen) benutzt wird, um Argumente zu referenzieren (etwa ‘$Arg1’).

Die parser und location-Argumente sind zwingend und werden in einigen fortgeschrittenen Situationen benutzt, wie sie im „Erweitern“-Handbuch beschrieben werden (siehe (extending)Musikalische Funktionen in Abschnitt ‘Musikalische Funktionen’ in Extending). In Ersetzungsfunktionen gehen Sie einfach sicher, dass sie die beiden Wörter auch mit aufnehmen.

Die Liste der Typenprädikate ist auch notwendig. Einige der häufigsten Typenprädikate, die in musikalischen Funktionen benutzt werden, sind:

 
boolean?
cheap-list?  (benutze anstelle von ‚list?‘ für schnelleres Kompilieren)
ly:duration?
ly:music?
ly:pitch?
markup?
number?
pair?
string?
symbol?

Eine Liste aller Typprädikate findet sich unter Vordefinierte Typprädikate. Eigene Typprädikate sind auch erlaubt.

Siehe auch

Notationsreferenz: Vordefinierte Typprädikate.

Erweitern: (extending)Musikalische Funktionen in Abschnitt ‘Musikalische Funktionen’ in Extending.

Installierte Dateien: ‘lily/music-scheme.cc’, ‘scm/c++.scm’, ‘scm/lily.scm’.


[ < ] [ > ]   [ << ] [ Nach oben ] [ >> ]         [Anfang] [Inhalt] [Index] [ ? ]

5.6.2 Beispiele der Ersetzungsfunktionen

@translationof Substitution function examples

Dieser Abschnitt zeigt einige Beispiele von Ersetzungsfunktionen. Sie sind nicht vollständig, sondern sollen einige der Möglichkeiten von einfachen Ersetzungsfunktionen aufzeigen.

Im ersten Beispiel wird eine Funktione definiert, die das Verschieben von TextScript erleichtert:

 
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" d e f
  \padText #2.6
  c4^"piu mosso" fis a g
}

[image of music]

Neben Zahlen können auch musikalische Ausdrücke wie Noten als Argumente für musikalische Funktionen eingesetzt werden:

 
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]

Ersetzungsfunktionen mit mehrfachen Argumenten können definiert werden:

 
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]


[ < ] [ > ]   [ << ] [ Nach oben ] [ >> ]

Dieses Dokument wurde erzeugt von gub am 13. Juli 2020 durch texi2html 1.82.

Andere Sprachen: English, català, español, français, italiano, 日本語.
Über die automatische Sprachauswahl.