| [ < ] | [ > ] | [ << ] | [Plus haut] | [ >> ] | [Racine] | [Table des matières] | [Index] | [ ? ] |
@translationof Using music functions
Une adaptation ou un affinage qui devient récurrent parce que doit s’appliquer à différentes expressions musicales peut faire l’objet d’une fonction musicale. Nous ne traiterons ici que des fonctions de substitution, dont le but est de substituer une variable en un bout de code LilyPond. D’autres fonctions, plus complexes, sont abordées au chapitre (extending)Fonctions musicales section ‘Fonctions musicales’ dans Extension de LilyPond.
| 5.6.1 Syntaxe d’une fonction de substitution | ||
| 5.6.2 Exemples de fonction de substitution |
| [ < ] | [ > ] | [ << ] | [Plus haut] | [ >> ] | [Racine] | [Table des matières] | [Index] | [ ? ] |
@translationof Substitution function syntax
La rédaction d’une fonction chargée de substituer du code LilyPond à une variable est chose relativement aisée. Une telle fonction est de la forme
fonction =
#(define-music-function
(arg1 arg2…)
(type1? type2?…)
#{
…musique…
#})
|
où
argN | nième argument. |
typeN? | un type de prédicat Scheme pour lequel argN
doit renvoyer #t. |
…musique… | du code LilyPond tout ce qu’il y a de plus ordinaire, avec
des $ (là où seule une construction LilyPond est autorisée) et
des # (lorsqu’il s’agit d’une valeur en Scheme, d’un argument de
fonction musicale ou de musique faisant partie d’une liste) pour
référencer les arguments (par ex. ‘#arg1’). |
La liste des types de prédicat est aussi obligatoire. Voici quelques uns des types de prédicat les plus utilisés dans les fonctions musicales :
boolean? cheap-list? (au lieu de « list? », pour accélérer le traitement) ly:duration? ly:music? ly:pitch? markup? number? pair? string? symbol? |
Une liste plus fournie est disponible à l’annexe Types de prédicats prédéfinis. Vous pouvez par ailleurs définir vos propres types de prédicat.
Manuel de notation : Types de prédicats prédéfinis.
Manuel d’extension : (extending)Fonctions musicales section ‘Fonctions musicales’ dans Extension de LilyPond.
Fichiers d’initialisation : ‘lily/music-scheme.cc’, ‘scm/c++.scm’, ‘scm/lily.scm’.
| [ < ] | [ > ] | [ << ] | [Plus haut] | [ >> ] | [Racine] | [Table des matières] | [Index] | [ ? ] |
@translationof Substitution function examples
La présente rubrique regroupe quelques exemples de fonction substitutive. Le propos est ici d’illustrer les possibilités qu’offrent les fonctions de substitution simple.
Dans ce premier exemple, nous définissons une fonction dans le but de
simplifier le réglage du décalage d’une annotation (un
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 }
Nous pouvons utiliser autre chose que des nombres au sein d’une fonction, y compris une expression musicale :
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 }
Ces fonctions sont toutes deux des expressions uniques simples dans
lesquelles seul le dernier élément d’un appel à une fonction ou une
dérogation est absent. Dans ce cas particulier de définition d’une
fonction, une syntaxe alternative et plus simple autorise à se cantonner
à écrire la partie constante de l’expression et remplacer son dernier
élément, absent, par \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 }
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 }
Une fonction de substitution peut traiter plusieurs arguments :
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 }
| [ < ] | [ > ] | [ << ] | [Plus haut] | [ >> ] |
Ce document a été généré le le 13 juillet 2020 par gub en utilisant texi2html 1.82.
Autres langues : English, català, deutsch, español, italiano, 日本語.
À propos de la sélection automatique de la langue.