5.1.6 Definició de contextos nous
Els contextos específics, com Staff
i Voice
, estan
construïts a partir de blocs senzills. És possible crear nous
tipus de contextos amb combinacions diferents de gravadors afegits.
El següent exemple mostra com construir un tipus diferent de
context de Voice
partint de zero. Serà semblant a
Voice
, però imprimeix sols caps centrats en forma de barra
inclinada. Es pot usar per indicar improvisació en peces de jazz.
Aquests ajustament es defineixen dins d’un bloc \context
que al seu cop està dins d’un bloc \layout
,
\layout { \context { … } }
A l’anàlisi següent, l’entrada d’exemple que es mostra ha d’anar en el lloc dels punts suspensius … del fragment anterior.
En primer lloc cal definir un nom per al nou context:
\name ImproVoice
Atès que és semblant al context Voice
, volem ordres que
funcionin dins dels contextos Voice
(existents) perquè
segueixi funcionant. Això s’aconsegueix donant al nou context un
àlies de Voice
,
\alias Voice
El context imprimirà notes i textos explicatius, per això hem d’afegir els gravadors que aporten aquesta funcionalitat, i a més el gravador que agrupa les notes, pliques i silencis que estan en el mateix moment musical en forma de columnes.
\consists Note_heads_engraver \consists Text_engraver \consists Rhythmic_column_engraver
Els caps de totes les notes s’han de situar sobre la línia central.
\consists Pitch_squash_engraver squashedPosition = #0
El gravador Pitch_squash_engraver
modifica els caps de nota
(creats pel gravador Note_heads_engraver
) i estableix les
seves posicions verticals al valor squashedPosition
, en
aquest cas 0
, la línia central.
Las notes semblen inclinades i no tenen plica:
\override NoteHead.style = #'slash \hide Stem
Tots aquests complements o plug-ins s’han de comunicar sota el
control del context. Els mecanismes amb els quals es comuniquen
els contextos s’estableixen mitjançant la declaració del
\type
(tipus) del context. Dins d’un bloc \layout
,
gairebé tots els contextos seran del tipus Engraver_group
.
Alguns contextos especials i els contextos dels blocs \midi
usen altres tipus. La còpia i la modificació d’una definició de
context existent també complimenten el tipus. Com que aquest
exemple crea una definició partint de zero, ha de ser especificada
explícitament.
\type Engraver_group
En ajuntar-ho tot, obtenim
\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 }
Els contextos donen lloc a jerarquies. Volem posar el context
ImproVoice
dins del context Staff
, igual que els
contextos de veu normals. Per tant, modifiquem la definició de
Staff
amb l’ordre \accepts
(accepta),
\context { \Staff \accepts ImproVoice }
Amb freqüència, en reutilitzar una definició de context exitent, el context resultant es pot usar en qualsevol lloc on el context original hagués pogut fer-ho.
\layout { … \inherit-acceptability to from }
aconsegueix que tinguem contextos del tipus to acceptats per tots els contextos que també accepten from. Por exemple, si usem
\layout { … \inherit-acceptability "ImproVoice" "Voice" }
afegeix un \accepts
per a ImproVoice
tant a la
definició de Staff
com a la de RhythmicStaff
.
L’oposat a \accepts
(acepta) és \denies
(denega),
el que a vegades cal quan s’esta reutilitzant definicions de
context existents.
Si organitzem les peces requerides dins d’un bloc \layout
ens deixa amb
\layout { \context { \name ImproVoice … } \inherit-acceptability "ImproVoice" "Voice" }
Així doncs, la sortida que apareix al començament d’aquesta subsecció es pot escriure com
\relative { a'4 d8 bes8 \new ImproVoice { c4^"ad lib" c c4 c^"despulleu-vos" c c_"mentre toqueu :)" } a1 }
Per completar l’exemple, els canvis que afecten a la jerarquia de
contextos s’han de repetir dins d’un bloc \midi
de manera
que la sortida MIDI depengui de les mateixes relacions de context.
Vegeu també
Referència de funcionament intern: Note_heads_engraver, Text_engraver, Rhythmic_column_engraver, Pitch_squash_engraver.