| [ < ] | [ > ] | [ << ] | [ Nach oben ] | [ >> ] | [Anfang] | [Inhalt] | [Index] | [ ? ] |
@translationof Music functions
Musikalische Funktionen sind Scheme-Prozeduren, die musikalische Ausdrücke automatisch erstellen können und dadurch die Eingabedatei maßgeblich vereinfachen können.
| [ < ] | [ > ] | [ << ] | [ Nach oben ] | [ >> ] | [Anfang] | [Inhalt] | [Index] | [ ? ] |
@translationof Music function definitions
Die allgemeine Form zur Definition musikalischer Funktionen ist:
function =
#(define-music-function
(Arg1 Arg2 …)
(Typ1? Typ2? …)
body)
|
analot zu Scheme-Funktionen, siehe Definition von Scheme-Funktionen. In der Mehrzahl der Fälle ist body ein LilyPond-Codeabschnitt (siehe LilyPond-Codeabschnitte.
Eine Liste der möglichen Typenprädikate findet sich in (notation)Vordefinierte Typprädikate in Abschnitt ‘Vordefinierte Typprädikate’ in Notationsreferenz.
Notationsreferenz: (notation)Vordefinierte Typprädikate in Abschnitt ‘Vordefinierte Typprädikate’ in Notationsreferenz.
Installierte Dateien: ‘lily/music-scheme.cc’, ‘scm/c++.scm’, ‘scm/lily.scm’.
| [ < ] | [ > ] | [ << ] | [ Nach oben ] | [ >> ] | [Anfang] | [Inhalt] | [Index] | [ ? ] |
@translationof Music function usage
Musikalische Funktionen können zur Zeit an verschiedenen Stellen benützt werden. Abhängig davon, wo sie eingesetzt werden, gibt es Begrenzungen, damit die Funktionen eindeutig interpretiert werden können. Das Resultat, das eine musikalische Funktion wiedergibt, muss mit dem Kontext kompatibel sein, indem sie aufgerufen wird.
-, ^, und _). Wichtig dabei ist,
dass musikalische Funktionen, die das Nachereignis ausgeben, als
normale Noten akzeptiert werden. Dabei erhält man ein Resultat, das
etwa folgendem entspricht:
s 1*0-\fun |
In diesem Fall kann man keinen offenen musikalischen Ausdruck als letztes Argument einsetzen, also ein Argument, das in einem musikalischen Ausdruck schließt, der weitere Nach-Ereignisse akzeptieren kann.
rhythmic-event sein, wahrscheinlich auch NoteEvent.
Die besonderen Regeln für noch nicht abgearbeitete Argumente machen es
möglich, polymorphe Funktionen wie \tweak zu schreiben,
die auf unterschiedliche Konstruktionen angewendet werden können.
| [ < ] | [ > ] | [ << ] | [ Nach oben ] | [ >> ] | [Anfang] | [Inhalt] | [Index] | [ ? ] |
@translationof Simple substitution functions
Einfache Ersetzungsfunktionen sind musikalische Funktionen, deren musikalische Ausgabe-Funktion im LilyPond-Format geschrieben ist und Funktionsargumente in der Ausgabefunktion enthält. Sie werden beschrieben in (notation)Beispiele der Ersetzungsfunktionen in Abschnitt ‘Beispiele der Ersetzungsfunktionen’ in Notationsreferenz
| [ < ] | [ > ] | [ << ] | [ Nach oben ] | [ >> ] | [Anfang] | [Inhalt] | [Index] | [ ? ] |
@translationof Intermediate substitution functions
Mittlere Ersetzungsfunktionen setzen sich aus einer Mischung von Scheme-Code und LilyPond-Code in der musikalischen Ausgabe-Funktion zusammen.
Einige \override-Befehle benötigen ein Zahlenpaar
(als cons-Zelle in Scheme bezeichnet).
Das Paar kann direkt an die musikalische Funktion
mit der Variable pair? weitergeleitet werden:
manualBeam =
#(define-music-function
(beg-end)
(pair?)
#{
\once \override Beam.positions = #beg-end
#})
\relative c' {
\manualBeam #'(3 . 6) c8 d e f
}
|
Anstelle dessen können auch die Zahlen, aus denen das Paar besteht, einzeln als eigenständige Argumente weitergeleitet und der Scheme-Code, der das Paar erstellt, in die musikalische Funktion augenommen werden:
manualBeam = #(define-music-function (beg end) (number? number?) #{ \once \override Beam.positions = #(cons beg end) #}) \relative c' { \manualBeam #3 #6 c8 d e f }
| [ < ] | [ > ] | [ << ] | [ Nach oben ] | [ >> ] | [Anfang] | [Inhalt] | [Index] | [ ? ] |
@translationof Mathematics in functions
Musikalische Funktionen können neben einfachen Ersetzungen auch Scheme-Programmcode enthalten:
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 }
Dieses Beispiel kann auch umformuliert werden, um musikalische Ausdrücke zu integrieren:
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 }
| [ < ] | [ > ] | [ << ] | [ Nach oben ] | [ >> ] | [Anfang] | [Inhalt] | [Index] | [ ? ] |
@translationof Functions without arguments
In den meisten Fällen sollten Funktionen ohne Argumente mit einer Variable notiert werden:
dolce = \markup{ \italic \bold dolce }
|
In einigen wenigen Fällen kann es aber auch sinnvoll sein, eine musikalische Funktion ohne Argumente zu erstellen:
displayBarNum =
#(define-music-function
()
()
(if (eq? #t (ly:get-option 'display-bar-numbers))
#{ \once \override Score.BarNumber.break-visibility = ##f #}
#{#}))
|
Damit auch wirklich Taktzahlen angezeigt werden, wo die
Funktion eingesetzt wurde, muss lilypond mit
der Option
lilypond -d display-bar-numbers Dateiname.ly |
aufgerufen werden.
| [ < ] | [ > ] | [ << ] | [ Nach oben ] | [ >> ] | [Anfang] | [Inhalt] | [Index] | [ ? ] |
@translationof Void music functions
Eine musikalische Funktion muss einen musikalischen Ausdruck
ausgeben. Wenn man eine Funktion nur für ihre Nebeneffekte
ausführt, sollte man define-void-function benützen.
Es kann aber auch Fälle geben, in denen man teilweise eine
musikalische Funktion erstellen will, teilweise aber nicht
(wie im vorherigen Beispiel). Indem man eine leere (void)
Funktion mit #{ #} ausgibt, wird das erreicht.
| [ < ] | [ > ] | [ << ] | [ Nach oben ] | [ >> ] |
Dieses Dokument wurde erzeugt von gub am 13. Juli 2020 durch texi2html 1.82.
Andere Sprachen: English, español, français.
Über die automatische Sprachauswahl.