[ < ] [ > ]   [ << ] [Plus haut] [ >> ]         [Racine] [Table des matières] [Index] [ ? ]

5.6 Utilisation de fonctions musicales

@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.


[ < ] [ > ]   [ << ] [Plus haut] [ >> ]         [Racine] [Table des matières] [Index] [ ? ]

5.6.1 Syntaxe d’une fonction de substitution

@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ù

argNniè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.

Voir aussi

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] [ ? ]

5.6.2 Exemples de fonction de substitution

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

[image of music]

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 }

[image of music]

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
}

[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]

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
}

[image of music]


[ < ] [ > ]   [ << ] [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.