5.1.3 Mantener vivos los contextos
Normalmente los contextos finalizan en el primer momento musical
en que no tienen nada que hacer. Así, los contextos de
Voice
mueren tan pronto como ya no contienen ningún evento,
los contextos de Staff
mueren tan pronto como todos los
contextos de Voice
que contenían ya no contengan ningún
evento, etc. Esto puede ocasionar dificultades si se tiene que
hacer referencia a contextos anteriores que ya han muerto, por
ejemplo, al cambiar de pentagramas con instrucciones
\change
, asociar letra con una voz mediante instrucciones
\lyricsto
, o cuando se añaden eventos musicales adicionales
a un contexto anterior.
Existe una excepción a esta regla general: dentro de una
construcción {…}
(música secuencial), la noción que
la construcción tiene del “contexto actual” descenderá un nivel
cada vez que un elemento de la secuencia finaliza en un
subcontexto del contexto anterior. Esto evita la creación espúrea
de contextos implícitos en ciertas situaciones, pero significa que
el primer contexto dentro del que se desciende, se va a mantener
vivo hasta el final de la expresión.
Como contraste, los contextos de una expresión hecha con la
construcción <<…>>
(música simultánea) no se
prolongan, por lo que si una instrucción que crea un contexto se
encierra en otro par de <<…>>
, se impedirá que el
contexto persista durante toda la duración de la secuencia
{…}
que lo contiene.
Cualquier contexto se puede mantener vivo si nos aseguramos de que
tiene algo que hacer en cualquier momento musical dado. Los
contextos de Staff
se mantienen con vida si nos aseguramos
de que una de sus voces se mantiene viva. Una manera de hacerlo
es añadir silencios de separación a una voz en paralelo con la
música real. Éstos deben añadirse a todos y cada uno de los
contextos de Voice
que se hayan de mantener vivos. Si se
van a usar esporádicamente varias voces, es más seguro mantenerlas
todas vivas en lugar de tratar de confiar en las excepciones que
hemos mencionado arriba.
En el ejemplo siguiente, tanto la voz A como la voz B se mantienen vivas de esta manera durante la duración de la pieza:
musicA = \relative { d''4 d d d } musicB = \relative { g'4 g g g } keepVoicesAlive = { << \new Voice = "A" { s1*5 } % Keep Voice "A" alive for 5 bars \new Voice = "B" { s1*5 } % Keep Voice "B" alive for 5 bars >> } music = { \context Voice = "A" { \voiceOneStyle \musicA } \context Voice = "B" { \voiceTwoStyle \musicB } \context Voice = "A" { \musicA } \context Voice = "B" { \musicB } \context Voice = "A" { \musicA } } \score { \new Staff << \keepVoicesAlive \music >> }
El ejemplo siguiente muestra cómo se puede escribir una línea melódica esporádica con letra utilizando este enfoque. Por supuesto, en una situación real la melodía y el acompañamiento consistirían en varias secciones diferentes.
melody = \relative { a'4 a a a } accompaniment = \relative { d'4 d d d } words = \lyricmode { These words fol -- low the mel -- o -- dy } \score { << \new Staff = "music" { << \new Voice = "melody" { \voiceOne s1*4 % Keep Voice "melody" alive for 4 bars } { \new Voice = "accompaniment" { \voiceTwo \accompaniment } << \context Voice = "melody" { \melody } \context Voice = "accompaniment" { \accompaniment } >> \context Voice = "accompaniment" { \accompaniment } << \context Voice = "melody" { \melody } \context Voice = "accompaniment" { \accompaniment } >> } >> } \new Lyrics \with { alignAboveContext = "music" } \lyricsto "melody" { \words } >> }
Una forma alternativa, que podría resultar mejor en muchas situaciones, es mantener con vida la línea melódica simplemente incluyendo notas espaciadoras para alinearla correctamente con el acompañamiento:
melody = \relative { s1 % skip a bar a'4 a a a s1 % skip a bar a4 a a a } accompaniment = \relative { d'4 d d d d4 d d d d4 d d d d4 d d d } words = \lyricmode { These words fol -- low the mel -- o -- dy } \score { << \new Staff = "music" { << \new Voice = "melody" { \voiceOne \melody } \new Voice = "accompaniment" { \voiceTwo \accompaniment } >> } \new Lyrics \with { alignAboveContext = "music" } \lyricsto "melody" { \words } >> }