[ << Modification des réglages prédéfinis ] | [Top][Contents][Index] | [ Tables du manuel de notation >> ] |
[ < Ordre de préséance ] | [ Up : Contextes d’interprétation ] | [ Ordonnancement des contextes > ] |
5.1.6 Définition de nouveaux contextes
Généralités en matière de définition d’un contexte
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.
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
sont de type
Engraver_group
. Certains contextes spécifiques 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 }
Souvent, lorsque l’on réutilise le définition d’un contexte, le contexte qui en résultera devrait pouvoir s’utiliser partout où le contexte originel serait utile. Écrire
\layout { … \inherit-acceptability résultant originel }
fait en sorte que les contextes de type résultant soient acceptés par le contextes qui acceptent originel. Par exemple, libeller
\layout { … \inherit-acceptability ImproVoice Voice }
a pour effet d’ajouter un \accepts
pour ImproVoice
à la
fois aux définitions de Staff
et RhythmicStaff
.
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 }
Voir aussi
Référence des propriétés internes : Contextes, Graveurs et exécutants.
Création de contextes en MIDI
En matière de sortie MIDI, la syntaxe permettant de définir de nouveaux
types de contextes est identique, à ceci près que la section
\context
viendra se placer au sein du bloc \midi
et le
\type
sera Performer_group
au lieu de
Engraver_group
. Le terme engraver (graveur) fait
référence à un module de contexte chargé de générer une sotie visuelle,
alors qu’un performer (exécutant) est dévolu exclusivement à une
sortie MIDI. Lorsque les noms de modules comportent translator
(traducteur) au lieu de engraver ou performer, ils sont
alors fonctionnels tant pour des sorties graphiques qu’audio. Afin
d’adapter une définition de contexte pour le bloc \midi
, il
faudra
- la copier dans un bloc
\midi
, - changer
Engraver_group
enPerformer_group
, - supprimer les
\consists
propres aus graveurs (ils ne sont pas pertinents) et éventuellement ajouter des\consists
pour les exécutants.
Il faut garder à l’esprit, afin de préserver une cohérence
d’interprétation entre les sorties imprimables et MIDI, qu’il est de bon
ton de reporter toute définition de contexte personnalisée dans le bloc
\midi
. Cette duplication devrait au moins comporter les commandes
spécifiant la hiérarchie du contexte, telles que \accepts
,
\defaultchild
et \inherit-acceptability
. Recopier aussi
les alias est recommandé.
Ainsi, dans le but de compléter l’exemple vu plus haut, on peut y ajouter :
\midi { \context { \name ImproVoice \type Performer_group \alias Voice \consists Note_performer \consists Beam_performer \consists Dynamic_performer \consists Tie_performer \consists Slur_performer } \context { \Staff \accepts ImproVoice } }
Le contexte ImproVoice
sera alors fonctionnel pour la sortie MIDI.
Remplacement du contexte Score
Dans le but d’écrire un contexte MonScore
qui agirait comme étant
le contexte le plus haut, à l’instar de ce que fait le contexte
Score
, il faudra expliciter une instruction
\inherit-acceptability MonScore Score
. L’exemple suivant
définit un contexte ProportionalScore
pour lequel la notation
proportionnelle est activée (cf. Notation proportionnelle).
\layout { \context { \Score \name ProportionalScore \alias Score proportionalNotationDuration = \musicLength 8 } \inherit-acceptability ProportionalScore Score } music = { c'1 2 4 8 16 16 } \new Score \music \new ProportionalScore \music
Dans la mesure où le contexte sommital doit contenir certains graveurs
fondamentaux, hériter des réglages de \Score
est facile dans la
plupart des cas. Néanmoins, la définition d’un contexte de niveau
Score
à partir de zéro requiert que l’argument à \type
soit égal à Score_engraver
(ou Score_performer
dans le
bloc \midi
) en lieu et place de Engraver_group
. Par
ailleurs, affecter au contexte sommital l’alias Score
est
fortement recommandé dans la mesure où un certin nombre de graveurs ont
besoin d’accéder au contexte sommital par son alias.
[ << Modification des réglages prédéfinis ] | [Top][Contents][Index] | [ Tables du manuel de notation >> ] |
[ < Ordre de préséance ] | [ Up : Contextes d’interprétation ] | [ Ordonnancement des contextes > ] |