5.1.6 Définition de nouveaux contextes

Les contextes tels que Staff ou Voice sont faits de briques de construction empilées. En combinant divers graveurs, il est possible de créer de nouveaux types de contextes.

Dans l’exemple suivant on construit, de zéro, un nouveau contexte très semblable à Voice, mais qui n’imprime que des têtes de notes en forme de barre oblique au centre de la portée. Un tel contexte peut servir, par exemple, à indiquer un passage improvisé dans un morceau de jazz.

[image of music]

On a rassemblé les réglages dans un bloc \context, lui-même placé dans le bloc \layout :

\layout {
  \context {
    …
  }
}

En lieu et place des points (…), voici les éléments à saisir :

Tout d’abord, il convient de donner un nom à notre nouveau contexte :

\name ImproVoice

Comme il est très semblable à un contexte Voice, nous souhaitons que toutes les commandes associées au Voice déjà existant restent valables. D’où nécessité de la commande \alias, qui va l’associer au contexte Voice :

\alias Voice

Ce contexte doit pouvoir imprimer des notes et des indications textuelles ; on ajoute donc les graveurs appropriés ainsi que celui dévolu au regroupement sous forme de colonne des notes, hampes et silences qui interviennent au même moment musical :

\consists "Note_heads_engraver"
\consists "Text_engraver"
\consists "Rhythmic_column_engraver"

Toutes les notes devraient s’afficher au centre de la portée :

\consists "Pitch_squash_engraver"
squashedPosition = #0

Le graveur Pitch_squash_engraver intercepte les notes créées par le Note_heads_engraver, et les « écrase » pour qu’elles aient toutes la même position verticale, définie par squashedPosition : ici il s’agit de la valeur 0, c’est-à-dire la ligne du milieu.

On veut que les notes aient la forme d’une barre oblique, sans aucune hampe :

\override NoteHead.style = #'slash
\hide Stem

Tous ces modules doivent communiquer sous le contrôle du contexte. Les mécanismes permettant aux contextes de communiquer sont établis dès lors que le mot-clé \type précède le contexte. La plupart des contextes mentionnés au sein d’un bloc \layout seront de type Engraver_group. Certains contextes spécifiques, ainsi que ceux mentionnés dans les blocs \midi, reposent sur d’autres types de contexte. Recopier un contexte préexistant pour en modifier la définition lui affecte le type adéquat. Dans la mesure où notre exemple consiste à créer une définition de toute pièce, son type doit être explicitement spécifié.

\type "Engraver_group"

Récapitulons ; on se retrouve avec le bloc suivant :

\context {
  \name ImproVoice
  \type "Engraver_group"
  \consists "Note_heads_engraver"
  \consists "Text_engraver"
  \consists "Rhythmic_column_engraver"
  \consists "Pitch_squash_engraver"
  squashedPosition = #0
  \override NoteHead.style = #'slash
  \hide Stem
  \alias Voice
}

Ce n’est pas tout. En effet, on veut intégrer le nouveau contexte ImproVoice dans la hiérarchie des contextes. Tout comme le contexte Voice, sa place est au sein du contexte Staff. Nous allons donc modifier la définition du contexte Staff, au moyen de la commande \accepts :

\context {
  \Staff
  \accepts ImproVoice
}

Le contraire de \accepts est \denies ; il est parfois utile lorsque l’on recycle des définitions de contextes déjà existantes.

Enfin, tout cela doit prendre place dans le bloc \layout, comme ceci :

\layout {
  \context {
    \name ImproVoice
    …
  }
  \context {
    \Staff
    \accepts "ImproVoice"
  }
}

On peut alors saisir la musique, comme dans l’exemple plus haut :

\relative {
  a'4 d8 bes8
  \new ImproVoice {
    c4^"ad lib" c
    c4 c^"dévêtez-vous"
    c c_"tout en jouant :)"
  }
  a1
}

Pour être tout à fait complet, les modifications apportée à la hiérarchie des contextes devraient être répétés au niveau du bloc \midi de telle sorte que la sortie Midi dépende des mêmes relations.

Voir aussi

Référence des propriétés internes : Note_heads_engraver, Text_engraver, Rhythmic_column_engraver, Pitch_squash_engraver.


Autres langues : English, català, deutsch, español, italiano, 日本語.
About automatic language selection.

LilyPond — Manuel de notation v2.21.0 (branche de développement).