@c -*- coding: utf-8; mode: texinfo; documentlanguage: es -*- @c This file is part of lilypond-learning.tely @ignore Translation of GIT committish: 85b54e04be6730bd0781f3135ee741010e099fd8 When revising a translation, copy the HEAD committish of the version that you are working on. See TRANSLATION for details. @end ignore @c \version "2.11.61" @node Fundamental concepts @chapter Fundamental concepts Ha podido ver en el tutorial cómo producir música bellamente impresa a partir de un simple archivo de texto. Esta sección presenta los conceptos y técnicas que se requieren para producir partituras igualmente bellas pero más complejas. @menu * How LilyPond input files work:: * Voices contain music:: * Contexts and engravers:: * Extending the templates:: @end menu @node How LilyPond input files work @section How LilyPond input files work El formato de entrada de LilyPond es bastante libre en su forma y concede a los usuarios con experiencia mucha flexibilidad para estructurar sus archivos de la forma que deseen. Sin embargo, toda esta flexibilidad puede hacer que las cosas se vuelvan confusas para los nuevos usuarios. Esta sección le va a explicar parte de esta estructura, pero puede obviar ciertos detalles en aras de la simplicidad. Para ver una descripción completa del formato de entrada, consulte @ruser{File structure}. @menu * Introduction to the LilyPond file structure:: * Score is a (single) compound musical expression:: * Nesting music expressions:: * On the un-nestedness of brackets and ties:: @end menu @node Introduction to the LilyPond file structure @subsection Introduction to the LilyPond file structure @cindex entrada, formato de la @cindex archivo, estructura del Un ejemplo básico de archivo de entrada de LilyPond es el siguiente: @example \version @w{"@version{}"} \header @{ @} \score @{ @var{...expresión musical compuesta...} % toda la música viene aquí \layout @{ @} \midi @{ @} @} @end example @noindent Existen muchas variaciones de este esquema básico, pero el ejemplo constituye un útil punto de partida. @funindex \book @funindex book @funindex \score @funindex score @cindex book (libro) @cindex score (partitura) @cindex libro @cindex partitura Hasta el momento, ninguno de los ejemplos que ha podido ver utiliza la instrucción @code{\score@{@}}. Esto es así a causa de que LilyPond añade automáticamente las órdenes adicionales que se requieren cuando le proporcionamos una entrada sencilla. LilyPond trata una entrada como esta: @example \relative c'' @{ c4 a d c @} @end example @noindent como una abreviatura de esta otra: @example \book @{ \score @{ \new Staff @{ \new Voice @{ \relative c'' @{ c4 a b c @} @} @} \layout @{ @} @} @} @end example En otras palabras, si la entrada consta de una única expresión musical, LilyPond interpreta el archivo como si la expresción musical estuviera rodeada por un envoltorio hecho por las instrucciones que acabamos de ver. @cindex contextos implícitos @cindex implícitos, contextos @strong{¡Advertencia!} Muchos de los ejemplos que aparecen en la documentación de LilyPond omiten las instrucciones @code{\new Staff} y @code{\new Voice}, dejando que se creen de forma implícita. Esto funciona bien para ejemplos sencillos, pero para ejemplos más complicados, especialmente cuando se usan instrucciones adicionales, la creación implícita de los contextos puede dar lugar a resultados inesperados, incluso en ocasiones crear pentagramas no deseados. La forma de crear contextos de forma explícita se explica en @ref{Contexts and engravers}. @warning{Cuando se escriben más de unas pocas líneas de música, se recomienda crear siempre los pentagramas y las voces de forma explícita.} De todas formas, por ahora vamos a volver al primer ejemplo para examinar la instrucción @code{\score}, dejando las demás en su forma predeterminada. Un bloque @code{\score} siempre debe contener una expresión musical única, que debe aparecer inmediatamente después de la instrucción @code{\score}. Recuerde que una expresión musical podía ser cualquier cosa entre una sola nota hasta una enorme expresión compuesta como @example @{ \new GrandStaff << @var{...inserte aquí la partitura completa de una ópera de Wagner...} >> @} @end example @noindent Puesto que todo se encuentra dentro de @code{@{ ... @}}, cuenta como una expresión musical. Como vimos anteriormente, el bloque @code{\score} puede contener otras cosas, tales como @example \score @{ @{ c'4 a b c' @} \header @{ @} \layout @{ @} \midi @{ @} @} @end example @funindex \header @funindex header @funindex \layout @funindex layout @funindex \midi @funindex midi @cindex header @cindex layout @cindex midi @cindex cabecera @cindex disposición @noindent Observe que estas tres instrucciones (@code{\header}, @code{\layout} y @code{\midi}) son especiales: a diferencia del resto de las instrucciones que comienzan con una barra invertida (@code{\}), @emph{no} son expresiones musicales y no forman parte de ninguna expresión musical. Por tanto, se pueden situar dentro de un bloque @code{\score} o fuera de él. De hecho, estas instrucciones se sitúan por lo general fuera del bloque @code{\score} (por ejemplo, @code{\header} se suele colocar antes de la instrucción @code{\score}, como muestra el ejemplo que aparece al principio de la sección. Dos instrucciones más que no hemos visto aún son @code{\layout @{ @}} y @code{\midi @{@}}. Si aparecen tal y como se muestran aquí, hacen que LilyPond produzca una salida impresa y una salida MIDI, respectivamente. Se describen con todo detalle en el manual de Referencia de la notación, en @ruser{Score layout} y en @ruser{Creating MIDI files}. @cindex partituras, varias @cindex book, bloque implícito @cindex implícito, bloque book @funindex \book @funindex book Podemos escribir varios bloques @code{\score}. Cada uno de ellos recibirá el mismo tratamiento que una partitura independiente, pero se combinarán todos juntos en un archivo de salida único. No se necesita ninguna instrucción @code{\book}, se creará una implícitamente. Sin embargo, si quiere archivos de salida separados a partir de un único archivo @code{.ly}, entonces es necesario utilizar la instrucción @code{\book} para separar las distintas secciones: cada bloque @code{\book} produce un archivo de salida distinto. En resumen: Cada bloque @code{\book} crea un archivo de salida distinto (por ejemplo, un archivo PDF). Si no hemos escrito uno de forma explícita, LilyPond envuelve todo nuestro código de entrada dentro de un bloque @code{\book} de forma implícita.q Cada bloque @code{\score} es un trozo de música separado dentro de un bloque @code{\book}. @cindex layout, efecto de la situación del bloque Cada bloque @code{\layout} afecta al bloque @code{\score} o @code{\book} dentro del cual aparece (es decir, un bloque @code{\layout} dentro de un bloque @code{\score} afecta solamente a ese bloque @code{\score}, pero un bloque @code{\layout} fuera de un bloque @code{\score} (que por ello está dentro de un bloque @code{\book}, ya sea explícita o implícitamente) afecta a los bloques @code{\score} que están dentro de ese @code{\book}. Para ver más detalles, consulte @ruser{Multiple scores in a book}. @cindex variables Otro atajo genial es la posibilidad de definir variables. Todas las plantillas emplean lo siguiente: @example melodia = \relative c' @{ c4 a b c @} \score @{ \melodia @} @end example Cuando LilyPond examina este archivo, toma el valor de @code{melodia} (todo lo que está después del signo igual) y lo inserta dondequiera que ve @code{\melodia}. No se requiere un cuidado especial con los nombres (puede ser @code{melodia}, @code{global}, @code{CompasArmadura}, @code{manoderechadelpiano} o @code{fulanomengano}). Para ver más detalles, consulte @ref{Saving typing with variables and functions}. Recuerde que puede usar casi cualquier nombre que se le ocurra, en la medida en que contenga solamente caracteres alfabéticos y sea diferente de cualquiera de los nombres de instrucción de LilyPond. Las limitaciones exactas que afectan a los nombres de variable se detallan en @ruser{File structure}. @seealso Para ver una definición completa del formato del código de entrada, consulte @ruser{File structure}. @node Score is a (single) compound musical expression @subsection Score is a (single) compound musical expression @cindex score @cindex partitura @cindex contenido del bloque score @cindex score, contenido del bloque @cindex compuesta, expresión musical @cindex musical, expresión, compuesta @cindex expresión musical compuesta @funindex \score @funindex score En la sección anterior, @ref{Introduction to the LilyPond file structure}, hemos podido ver la organización general de los archivos de entrada de LilyPond. Pero parece que nos saltamos la parte más importante: ¿cómo averiguamos qué escribir después de @code{\score}? No nos hemos saltado nada en absoluto. El gran misterio es, sencillamente, que no hay @emph{ningún} misterio. La siguiente línea lo explica todo: @quotation @emph{Un bloque @code{\score} debe comenzar con una expresión musical compuesta.} @end quotation @noindent Para comprender lo que se entiende por expresión musical y expresión musical compuesta, quizá encuentre útil dar un repaso al tutorial, @ref{Music expressions explained}. En esta sección, vimos cómo elaborar grandes expresiones musicales a partir de pequeñas piezas (comenzábamos con notas, luego acordes, etc.). Ahora partiremos de una gran expresión musical y recorreremos el camino inverso hacia abajo. @example \score @{ @{ % esta llave da inicio a toda la expresión musical compuesta \new GrandStaff << @var{...introduzca aquí la partitura completa de una ópera de Wagner...} >> @} % esta llave da por terminada toda expresión musical completa \layout @{ @} @} @end example Una ópera de Wagner completa puede ser fácilmente el doble de larga que este manual, por tanto vamos a hacer sólo un cantante y un piano. No necesitamos un @code{GrandStaff} para este conjunto, así que lo retiramos. Sin embargo, sí que @emph{necesitamos} un cantante y un piano. @example \score @{ << \new Staff = "cantante" << >> \new PianoStaff = "piano" << >> >> \layout @{ @} @} @end example Recuerde que usamos @code{<<} y @code{>>} en vez de @code{@{ ... @}} para presentar música simultánea. Y, por supuesto, queremos presentar las partes vocal y del piano al mismo tiempo, ¡no una después de otra! Observe que la construcción @code{<< ... >>} no es realmente necesaria para el pentagrama del cantante (pues contiene una sola expresión musical); sin embargo, el uso de @code{<< ... >>} en lugar de llaves sigue siendo necesario si la música que debe ir en el pentagrama está compuesta por dos expresiones simultáneas, por ejemplo dos voces simultáneas o una voz con letra. Escribiremos algo de música real más tarde; por ahora limitémonos a poner algunas notas y letra de relleno. @lilypond[verbatim,quote,ragged-right] \score { << \new Staff = "singer" << \new Voice = "vocal" { c'1 } \addlyrics { And } >> \new PianoStaff = "piano" << \new Staff = "upper" { c'1 } \new Staff = "lower" { c'1 } >> >> \layout { } } @end lilypond Ahora tenemos muchos más detalles. Tenemos la pauta del cantante: contiene una @code{Voice} o voz (en LilyPond, este término hace referencia a un conjunto de notas, no necesariamente notas vocales -- por ejemplo, un violín generalmente toca una voz --) y el texto de la canción. También tenemos una pauta de piano: contiene un pentagrama superior (mano derecha) y un pentagrama inferior (mano izquierda). En este momento podríamos comenzar a meter las notas. Dentro de las llaves que siguen a @code{\new Voice = "vocal"}, podríamos empezar escribiendo @example \relative c'' @{ r4 d8\noBeam g, c4 r @} @end example Pero si lo hiciéramos, la sección @code{\score} se haría bastante larga y sería más difícil comprender lo que ocurre. En lugar de esto utilizaremos identificadores o variables. Recordará que las vimos por primera vez en la sección anterior. Así pues, escribiendo algunas notas, ahora tenemos un fragmento musical de verdad: @lilypond[verbatim,quote,ragged-right] melody = \relative c'' { r4 d8\noBeam g, c4 r } text = \lyricmode { And God said, } upper = \relative c'' { 2~ } lower = \relative c { b2 e2 } \score { << \new Staff = "singer" << \new Voice = "vocal" { \melody } \addlyrics { \text } >> \new PianoStaff = "piano" << \new Staff = "upper" { \upper } \new Staff = "lower" { \clef "bass" \lower } >> >> \layout { } } @end lilypond Tenga cuidado con la diferencia entre las notas, que van precedidas de @code{\relative} o insertadas directamente en la expresión musical, y la letra, que va precedida de @code{\lyricmode}. Estas instrucciones son esenciales para decirle a LilyPond que interprete el contenido que viene a continuación como música y texto, respectivamente. Cuando escriba una sección @code{\score} o cuando la esté leyendo, hágalo despacio y con cuidado. Comience por el nivel exterior y luego trabaje sobre cada uno de los niveles interiores. También es de gran ayuda ser muy estricto con los márgenes (asegúrese de que en su editor de texto cada elemento del mismo nivel comienza en la misma posición horizontal). @seealso Referencia de la notación: @ruser{Structure of a score}. @node Nesting music expressions @subsection Nesting music expressions @cindex pentagramas temporales @cindex temporales, pentagramas @cindex ossias No es esencial declarar todos los pentagramas al comienzo; se pueden crear temporalmente en cualquier momento. Esto es de especial utilidad para crear secciones de ossia (véase @rglos{ossia}). A continuación presentamos un ejemplo sencillo que muestra cómo introducir temporalmente un pentagrama nuevo mientras dura un fragmento de tres notas: @lilypond[verbatim,quote,ragged-right] \new Staff { \relative g' { r4 g8 g c4 c8 d | e4 r8 << { f c c } \new Staff { f8 f c } >> r4 | } } @end lilypond @noindent Advierta que el tamaño de la clave es igual al que se imprime en un cambio de clave (ligeramente menor que la clave al principio de una línea). Esto es normal para cualquier clave que se imprime en la mitad de una línea. @cindex pentagrama, posicionado del La sección ossia se puede colocar encima del pentagrama de la manera siguiente: @lilypond[verbatim,quote,ragged-right] \new Staff = "main" { \relative g' { r4 g8 g c4 c8 d | e4 r8 << { f c c } \new Staff \with { alignAboveContext = "main" } { f8 f c } >> r4 | } } @end lilypond Este ejemplo utiliza @code{\with}, que se explica en todo detalle más adelante. Es un medio de modificar el comportamiento predeterminado de un solo pentagrama. Aquí, dice que el pentagrama nuevo se debe colocar por encima del pentagrama llamado @qq{main} en vez de la posición predeterminada que sería por debajo. @seealso Los fragmentos de ossia se escriben a menudo sin clave y sin indicación de compás, y generalmente en un tipo más pequeño. Esto necesitaría más instrucciones que aún no se han visto. Véase @ref{Size of objects} y @ruser{Ossia staves}. @node On the un-nestedness of brackets and ties @subsection On the un-nestedness of brackets and ties @cindex corchetes y paréntesis, anidado de @cindex corchetes y paréntesis, tipos de @cindex corchetes y paréntesis, encerrar frente a marcar @cindex paréntesis y corchetes, anidado de @cindex paréntesis y corchetes, tipos de @cindex paréntesis y corchetes, encerrar frente a marcar En la escritura del archivo de entrada de LilyPond, hemos podido ver algunos tipos de paréntesis, llaves o ángulos de distintos tipos. Éstos obedecen a distintas reglas que al principio pueden resultar confusas. Antes de explicar estas reglas, demos un repaso a las distintas clases de corchetes, llaves y paréntesis. @c attempt to force this onto a new page @need 50 @multitable @columnfractions .3 .7 @headitem Tipo de paréntesis @tab Función @item @code{@{ .. @}} @tab Encierra un fragmento secuencial de música @item @code{< .. >} @tab Encierra las notas de un acorde @item @code{<< .. >>} @tab Encierra expresiones musicales simultáneas @item @code{( .. )} @tab Marca el comienzo y el final de una ligadura de expresión @item @code{\( .. \)} @tab Marca el comienzo y el final de una ligadura de fraseo @item @code{[ .. ]} @tab Marca el comienzo y el final de un barrado manual @end multitable A las anteriores, debemos añadir otras construcciones que generan líneas entre o a través de las notas: las ligaduras de unión (marcadas con una tilde curva, @code{~}), los grupos especiales que se escriben como @code{\times x/y @{..@}}, y las notas de adorno, que se escriben como @code{\grace@{..@}}. Fuera de LilyPond, el uso convencional de los paréntesis y otros corchetes requiere que los distintos tipos se encuentren anidados correctamente, como en: @code{<< [ @{ ( .. ) @} ] >>}, de manera que los paréntesis que se cierran deben encontrarse en el orden exactamente opuesto al de los paréntesis que se abren. Esto @strong{es} un requisito para los tres tipos de paréntesis que se describen mediante la palabra @q{Encierra} en la tabla anterior: se deben anidar correctamente. Sin embargo, el resto de las llaves y corchetes, que se encuentran descritos por la palabra @q{Marca} en la misma tabla anterior, @strong{no} tienen por qué anidarse estrictamente con ninguno de los otros paréntesis. De hecho, éstos no son paréntesis en el sentido de que encierran algo: simplemente son marcadores que indican dónde empieza o finaliza algo. Así pues, por ejemplo, una ligadura de fraseo puede dar comienzo antes de una barra insertada manualmente, y acabar antes de que acabe la barra (algo que quizá no sea muy musical, pero es posible): @lilypond[quote,verbatim,fragment,ragged-right,relative=2] { g8\( a b[ c b\) a] } @end lilypond En general, los distintos tipos de corchete, y los implicados en grupos especiales, ligaduras de unión y notas de adorno, se pueden mezclar con total libertad. Este ejemplo muestra una barra que se extiende hacia el interior de un grupo de valoración especial (línea 1), una ligadura de expresión que se prolonga hasta el interior de un grupo especial (línea 2), una barra y una ligadura de expresión que se prolongan hasta el interior de un grupo especial, una ligadura de unión que atraviesa dos grupos especiales, y una ligadura de fraseo que sale del interior de un grupo especial (líneas 3 y 4). @lilypond[quote,verbatim,fragment,ragged-right] { r16[ g16 \times 2/3 {r16 e'8] } g16( a \times 2/3 {b d) e' } g8[( a \times 2/3 {b d') e'~]} \times 4/5 {e'32\( a b d' e'} a'4.\) } @end lilypond @node Voices contain music @section Voices contain music Igual que los cantantes, LilyPond necesita voces para cantar. En realidad, la música para cualquier instrumento de una partitura está siempre contenida dentro de una voz --el concepto de LilyPond más fundamental de todos--. @menu * I'm hearing Voices:: * Explicitly instantiating voices:: * Voices and vocals:: @end menu @node I'm hearing Voices @subsection I'm hearing Voices @cindex polifonía @cindex capas @cindex varias voces @cindex voces, varias @cindex Voice (voz), contexto de @cindex contexto Voice (de voz) @cindex simultánea, música @cindex concurrente, música @cindex voces frente a acordes @cindex acordes frente a voces De las capas más profundas de una partitura de LilyPond, las más bajas y más fundamentales reciben el nombre de @q{Voice contexts} («contextos de voz») o, abreviadamente, @q{Voices} («voces»). Las voces reciben a veces el nombre de @q{layers} («capas») en otros programas de edición de partituras. De hecho, una capa o contexto de voz es la única que puede contener música. Si un contexto de voz no se declara explícitamente, se crea uno de forma automática, como vimos al comienzo de este capítulo. Ciertos instrumentos como el oboe solamente pueden tocar una nota cada vez. La música escrita para estos instrumentos es monofónica y solamente requiere una voz única. Los instrumentos que pueden tocar más de una nota a la vez, como el piano, con frecuencia necesitarán varias voces para codificar las distintas notas y ritmos concurrentes que son capaces de tocar. Una sola voz puede contener muchas notas dentro de un acorde, por supuesto; entonces ¿cuándo, exactamente, se necesitan varias voces? En primer lugar observe este ejemplo de cuatro acordes: @lilypond[quote,verbatim,fragment,ragged-right,relative=1] \key g \major 4 @end lilypond Esto se puede expresar utilizando sólo símbolos de acorde con ángulos simples, @code{< ... >}, y para este propósito tan sólo se necesita una voz. Pero suponga que el Fa sostenido fuese realmente una corchea seguida de un Sol corchea, una nota de paso que conduce al La. Ahora tenemos dos notas que empiezan en el mismo momento pero tienen distintas duraciones: la negra Re, y la corchea Fa sostenido. ¿Cómo se codifica esto? No se pueden escribir como un acorde porque todas las notas de un acorde deben tener la misma duración. Y no se pueden escribir como dos notas en secuencia porque tienen que empezar en el mismo momento. Aquí es donde se necesitan dos voces. Veamos cómo se hace esto dentro de la sintaxis de entrada de LilyPond. @funindex << \\ >> @funindex \\ La forma más fácil de introducir fragmentos con más de una voz en un solo pentagrama es escribir cada voz como una secuencia (con @code{@{...@}}), y combinarlas simultáneamente con ángulos dobles, @code{<<...>>}. Los fragmentos también se deben separar mediante una doble barra invertida, @code{\\}, para situarlos en voces separadas. Sin esto, las notas irían a una sola voz, lo que normalmente producirá errores. Esta técnica se adapta especialmente bien a piezas de música que son mayormente monofónicas pero ocasionalmente tienen cortas secciones de polifonía. He aquí cómo dividimos los acordes anteriores en dos voces y añadimos la nota de paso y la ligadura: @lilypond[quote,verbatim,fragment,ragged-right,relative=2] \key g \major % Voice "1" Voice "2" << { g4 fis8( g) a4 g } \\ { d4 d d d } >> | @end lilypond Observe cómo las plicas de la segunda voz ahora se dirigen hacia abajo. A continuación veamos otro ejemplo sencillo: @lilypond[quote,verbatim,fragment,ragged-right,relative=2] \key d \minor % Voice "1" Voice "2" << { r4 g g4. a8 } \\ { d,2 d4 g } >> | << { bes4 bes c bes } \\ { g4 g g8( a) g4 } >> | << { a2. r4 } \\ { fis2. s4 } >> | @end lilypond No es necesario usar una construcción @code{<< \\ >>} distinta para cada compás. Para música que tenga unas pocas notas en cada compás, esta disposición podría facilitar la legibilidad del código, pero si hay muchas notas en cada compás podría ser mejor dividirlo en dos voces separadas, de la siguiente manera: @lilypond[quote,verbatim,fragment,ragged-right,relative=2] \key d \minor << { % Voice "1" r4 g g4. a8 | bes4 bes c bes | a2. r4 | } \\ { % Voice "2" d,2 d4 g | g4 g g8( a) g4 | fis2. s4 | } >> @end lilypond @cindex voces, nombrado de @cindex voces que cruzan corchetes @cindex ligaduras que cruzan corchetes Este ejemplo tiene sólo dos voces, pero la misma construcción se puede usar para codificar tres o más voces mediante la adición de más separadores de barra invertida. Los contextos de voz llevan los nombres de @code{"1"}, @code{"2"}, etc. En cada uno de estos contextos, la dirección vertical de las ligaduras, plicas, matices dinámicos, etc., se ajusta de la forma correcta. @lilypond[quote,verbatim,fragment] \new Staff \relative c' { % Main voice c16 d e f % Voice "1" Voice "2" Voice "3" << { g4 f e } \\ { r8 e4 d c8 ~ } >> | << { d2 e2 } \\ { c8 b16 a b8 g ~ g2 } \\ { s4 b4 c2 } >> | } @end lilypond Todas estas voces están separadas de la voz principal que contiene las notas justo por fuera de la construcción @code{<< .. >>}. Le llamaremos a esto la @emph{construcción simultánea}. Las ligaduras (de prolongación y de expresión) solamente pueden conectar notas que estén dentro de la misma voz, luego las ligaduras no pueden entrar o salir de una construcción simultánea. A la inversa, las voces paralelas de construcciones simultáneas distintas sobre el mismo pentagrama, son la misma voz. Otras propiedades relativas a las voces también conllevan construcciones simultáneas. A continuación vemos el mismo ejemplo, con colores y cabezas distintos para cada voz. Observe que los cambios en una voz no afectan a otras voces, pero persisten más tarde dentro de la misma voz. Observe también que las notas ligadas se pueden dividir entre las mismas voces de dos construcciones, como se indica aquí en la voz de triángulos azules. @lilypond[quote,verbatim] \new Staff \relative c' { % Main voice c16 d e f << % Bar 1 { \voiceOneStyle g4 f e } \\ { \voiceTwoStyle r8 e4 d c8 ~ } >> << % Bar 2 % Voice 1 continues { d2 e2 } \\ % Voice 2 continues { c8 b16 a b8 g ~ g2 } \\ { \voiceThreeStyle s4 b4 c2 } >> } @end lilypond @funindex \voiceOneStyle @funindex \voiceTwoStyle @funindex \voiceThreeStyle @funindex \voiceFourStyle @funindex \voiceNeutralStyle Las instrucciones @code{\voiceXXXStyle} están pensadas principalmente para usarlas en documentos educativos como este mismo. Modifican el color de la cabeza, la plica y las barras, y el estilo de la cabeza, de forma que las voces se puedan distinguir fácilmente. La voz uno está establecida a rombos rojos, la voz dos a triángulos azules, la voz tres a círculos verdes con aspas, y la voz cuatro (que no se utiliza aquí) a aspas color magenta. @code{\voiceNeutralStyle} (que tampoco se usa aquí) devuelve todo al estilo predeterminado. Veremos más adelante cómo el usuario puede crear instrucciones como éstas. Véase @ref{Visibility and color of objects} y @ref{Using variables for tweaks}. @cindex polifonía y modo relativo @cindex relativo, modo, polifonía y La polifonía no cambia la relación de las notas dentro de un bloque @code{\relative @{ @}}. La altura de cada nota aún se calcula con relación a la nota que le precede inmediatamente, o a la primera nota del acorde precedente. Así, en @example \relative c' @{ notaA << < notaB notaC > \\ notaD >> notaE @} @end example @noindent @code{notaB} es relativa a @code{notaA} @* @code{notaC} es relativa a @code{notaB}, no a @code{notaA}; @* @code{notaD} es relativa a @code{notaB}, no a @code{notaA} ni a @code{notaC}; @* @code{notaE} es relativa a @code{notaD}, no a @code{notaA}. Una forma alternativa, que podría ser más clara si las notas en las voces están muy separadas, es colocar una instrucción @code{\relative} al principio de cada voz: @example \relative c' @{ notaA ... @} << \relative c'' @{ < notaB notaC > ... @} \\ \relative g' @{ notaD ... @} >> \relative c' @{ notaE ... @} @end example Finalmente, analicemos las voces en una pieza de música más compleja. He aquí las notas de los dos primeros compases del segundo de los Dos Nocturnos de Chopin, Op 32. Este ejemplo se utilizará en fases posteriores dentro del presente capítulo y el siguiente, para ilustrar varias técnicas para producir notación, y por tanto le pedimos que ignore por ahora cualquier cosa en el código subyacente que le parezca misterioso y tan sólo se concentre en la música y las voces (todas las complicaciones se explicarán en secciones posteriores). @c The following should appear as music without code @lilypond[quote,ragged-right] \new Staff \relative c'' { \key aes \major << % Voice one { c2 aes4. bes8 } \\ % Voice two { aes2 f4 fes } \\ % No voice three \\ % Voice four { % Ignore these for now - they are explained in Ch 4 \once \override NoteColumn #'force-hshift = #0 2 \once \override NoteColumn #'force-hshift = #0.5 des2 } >> | 1 | } @end lilypond Con frecuencia, la dirección de las plicas se utiliza para indicar la continuidad de dos líneas melódicas simultáneas. Aquí, todas las plicas de las notas agudas se dirigen hacia arriba y las de las notas graves hacia abajo. Ésta es la primera indicación de que se requiere más de una voz. Pero la necesidad real de varias voces aflora cuando hay notas que comienzan en el mismo tiempo pero tienen distintas duraciones. Observe las notas que comienzan en la tercera parte del primer compás. El La bemol es una negra con puntillo, el Fa es una negra y el Re bemol es una blanca. Estas notas nos e pueden escribir como un acorde porque todas las notas de un acorde deben tener la misma duración. Tampoco se pueden escribir como notas secuenciales, pues deben comenzar al mismo tiempo. Esta sección del compás requiere tres voces, y la práctica común sería escribir todo el compás como tres voces como se muestra abajo, donde hemos usado distintas cabezas y colores para las tres voces. Una vez más, el código que subyace a este ejemplo se explicará más tarde, así pues ignore todo lo que no entienda. @c The following should appear as music without code @c The three voice styles should be defined in -init @lilypond[quote,ragged-right] \new Staff \relative c'' { \key aes \major << { % Voice one \voiceOneStyle c2 aes4. bes8 } \\ % Voice two { \voiceTwoStyle aes2 f4 fes } \\ % No Voice three (we want stems down) \\ % Voice four { \voiceThreeStyle % Ignore these for now - they are explained in Ch 4 \once \override NoteColumn #'force-hshift = #0 2 \once \override NoteColumn #'force-hshift = #0.5 des2 } >> | 1 | } @end lilypond Vamos a intentar codificar esta música partiendo de cero. Como veremos, esto se topa con ciertas dificultades. Comenzamos tal y como hemos aprendido, usando la construcción @code{<< \\ >>} para introducir la música del primer compás en tres voces: @lilypond[quote,verbatim,fragment,ragged-right] \new Staff \relative c'' { \key aes \major << { c2 aes4. bes8 } \\ { aes2 f4 fes } \\ { 2 des2 } >> 1 } @end lilypond @cindex plica abajo @cindex voces y dirección de las plicas @cindex plicas, voces y dirección de las @cindex plica arriba Las direcciones de las plicas se asignan automáticamente de forma que las voces de numeración impar reciben las plicas hacia arriba y las de numeración par hacia abajo. Las plicas de las voces 1 y 2 están correctas, pero las plicas de la voz 3 debería ir hacia abajo en este fragmento en particular. Podemos corregir esto simplemente olvidándonos de la voz tres y situando la música en la voz cuatro: @lilypond[quote,verbatim,fragment,ragged-right] \new Staff \relative c'' { \key aes \major << % Voice one { c2 aes4. bes8 } \\ % Voice two { aes2 f4 fes } \\ % Omit Voice three \\ % Voice four { 2 des2 } >> | 1 | } @end lilypond @noindent Vemos que esto arregla la dirección de la plica, pero presenta un problema que se encuentra a veces con varias voces: las plicas de las notas en una voz pueden colisionar con las cabezas de otras voces. Al disponer las notas, LilyPond permite que las notas o acordes de dos voces ocupen la misma columna vertical de notas teniendo en cuenta que las plicas están en direcciones opuestas, pero las notas de la tercera y cuarta voces se desplazan si es necesario para evitar la colisión entre las cabezas. Esto funciona bien por lo general, pero en este ejemplo claramente las notas de la voz inferior no están bien colocadas de forma predeterminada. LilyPond proporciona diversas maneras de ajustar la colocación horizontal de las notas. Aún no estamos preparados para ver cómo corregir esto, así que dejaremos este problema aparcado hasta una sección posterior (véase la propiedad @code{force-hshift} en @ref{Fixing overlapping notation}). @seealso Referencia de la notación: @ruser{Multiple voices}. @node Explicitly instantiating voices @subsection Explicitly instantiating voices @funindex \voiceOne @funindex voiceOne @funindex \voiceTwo @funindex voiceTwo @funindex \voiceThree @funindex voiceThree @funindex \voiceFour @funindex voiceFour @funindex \oneVoice @funindex oneVoice @funindex \new Voice @cindex contextos de voz, creación de Los contextos de voz también se pueden crear manualmente dentro de un bloque @code{<< >>} para crear música polifónica, utilizando @code{\voiceOne} ... @code{\voiceFour} para indicar las direcciones requeridas de plicas, ligaduras, etc. En partituras más largas, este método es más claro porque permite que las voces estén separadas y reciban nombres más descriptivos. Concretamente, la construcción @code{<< \\ >>} que usamos en la sección previa: @example \new Staff @{ \relative c' @{ << @{ e4 f g a @} \\ @{ c,4 d e f @} >> @} @} @end example @noindent equivale a @example \new Staff << \new Voice = "1" @{ \voiceOne \relative c' @{ e4 f g a @} @} \new Voice = "2" @{ \voiceTwo \relative c' @{ c4 d e f @} @} >> @end example Los dos ejemplos anteriores producirán: @c The following example should not display the code @lilypond[ragged-right,quote] \new Staff << \new Voice = "1" { \voiceOne \relative c' { e4 f g a } } \new Voice = "2" { \voiceTwo \relative c' { c4 d e f } } >> @end lilypond @cindex voces, retorno a única @cindex retorno a voz única Las instrucciones @code{\voiceXXX} establecen la dirección de las plicas, ligaduras de expresión, ligaduras de prolongación, articulaciones, anotaciones de texto, puntillos y digitaciones. @code{\voiceOne} y @code{\voiceThree} hacen que estos objetos apunten hacia arriba, mientras que @code{\voiceTwo} y @code{\voiceFour} los hacen apuntar hacia abajo. Estas instrucciones también producen un desplazamiento horizontal para cada voz cuando es necesario para evitar choques entre las cabezas. La instrucción @code{\oneVoice} devuelve los ajustes de nuevo a los valores normales para una sola voz. Veamos en algunos ejemplos sencillos exactamente qué efecto tienen @code{\oneVoice}, @code{\voiceOne} y @code{voiceTwo} sobre el marcado, las ligaduras de unión y de expresión y las indicaciones de dinámica: @lilypond[quote,ragged-right,verbatim] \relative c'{ % Default behaviour or behaviour after \oneVoice c d8 ~ d e4 ( f g a ) b-> c } @end lilypond @lilypond[quote,ragged-right,verbatim] \relative c'{ \voiceOne c d8 ~ d e4 ( f g a ) b-> c \oneVoice c, d8 ~ d e4 ( f g a ) b-> c } @end lilypond @lilypond[quote,ragged-right,verbatim] \relative c'{ \voiceTwo c d8 ~ d e4 ( f g a ) b-> c \oneVoice c, d8 ~ d e4 ( f g a ) b-> c } @end lilypond A continuación veremos tres formas distintas de componer la notación del mismo pasaje polifónico, cada una de las cuales tiene sus ventajas según la circunstancia, utilizando el ejemplo de la sección anterior. Una expresión que aparece directamente dentro de @code{<< >>} pertenece a la voz principal (pero, observe, @strong{no} dentro de una construcción @code{<< \\ >>}). Esto es útil cuando aparecen voces nuevas mientras la voz principal está sonando. A continuación podemos ver una realización más correcta del ejemplo de la sección anterior. Las notas rojas en forma de rombo muestran que la melodía principal está ahora dentro de un contexto de una sola voz, haciendo que se pueda trazar una ligadura por encima de ellas. @lilypond[quote,ragged-right,verbatim] \new Staff \relative c' { \voiceOneStyle % The following notes are monophonic c16^( d e f % Start simultaneous section of three voices << % Continue the main voice in parallel { g4 f e | d2 e2) } % Initiate second voice \new Voice { % Set stems, etc, down \voiceTwo r8 e4 d c8 ~ | c8 b16 a b8 g ~ g2 } % Initiate third voice \new Voice { % Set stems, etc, up \voiceThree s2. | s4 b4 c2 } >> } @end lilypond @cindex anidado de expresiones musicales @cindex anidado de construcciones simultáneas @cindex anidado de voces @cindex voces temporales @cindex voces, anidado de Son posibles construcciones polifónicas anidadas más profundamente, y si una voz aparece sólo brevemente podría haber una forma más natural de tipografiar la música. @lilypond[quote,ragged-right,verbatim] \new Staff \relative c' { c16^( d e f << { g4 f e | d2 e2) } \new Voice { \voiceTwo r8 e4 d c8 ~ | << {c8 b16 a b8 g ~ g2} \new Voice { \voiceThree s4 b4 c2 } >> } >> } @end lilypond @cindex espaciadoras, notas Este método de anidar voces nuevas brevemente es útil cuando sólo hay secciones polifónicas pequeñas, pero cuando todo el pentagrama es muy polifónico podría ser más claro usar varias voces todo el tiempo, usando notas espaciadoras para pasar por encima de las secciones en que una voz está en silencio, como aquí: @lilypond[quote,ragged-right,verbatim] \new Staff \relative c' << % Initiate first voice \new Voice { \voiceOne c16^( d e f g4 f e | d2 e2) | } % Initiate second voice \new Voice { % Set stems, etc, down \voiceTwo s4 r8 e4 d c8 ~ | c8 b16 a b8 g ~ g2 | } % Initiate third voice \new Voice { % Set stems, etc, up \voiceThree s1 | s4 b4 c2 | } >> @end lilypond @subsubheading Note columns @cindex columna de notas @cindex colisiones de notas @cindex notas, colisiones de @cindex desplazamiento, instrucciones de @funindex \shiftOff @funindex shiftOff @funindex \shiftOn @funindex shiftOn @funindex \shiftOnn @funindex shiftOnn @funindex \shiftOnnn @funindex shiftOnnn Las notas cercanas de un acorde, o las notas que se producen al mismo tiempo en distintas voces, se disponen en dos (y ocasionalmente más) columnas para evitar el solapamiento de las cabezas. Reciben el nombre de columnas de notas. Hay columnas distintas para cada voz, y el desplazamiento especificado en curso dependiente de la voz se aplica a la columna de la nota si en caso contrario se produjese una colisión. Esto se puede ver en el ejemplo anterior. En el compás 2 el Do en la voz dos está desplazado a la derecha respecto del Re de la voz uno, y en el último acorde el Do de la voz tres también está desplazado a la derecha respecto de las otras notas. Las instrucciones @code{\shiftOn}, @code{\shiftOnn}, @code{\shiftOnnn} y @code{\shiftOff} especifican el grado en que se deben desplazar las notas y acordes de la voz si en caso contrario ocurriese una colisión. De forma predeterminada, las voces exteriores (normalmente las voces uno y dos) llevan especificado @code{\shiftOff}, mientras que las voces interiores (tres y cuatro) tienen @code{\shiftOn} especificado. Cuando se aplica un desplazamiento, las voces uno y tres se desplazan hacia la derecha y las voces dos y cuatro se desplazan hacia la izquierda. @code{\shiftOnn} y @code{\shiftOnnn} definen niveles adicionales de desplazamiento que se pueden especificar temporalmente para resolver colisiones en situaciones complejas (véase @ref{Real music example}). Una columna de notas puede contener sólo una nota (o acorde) de una voz con las plicas hacia arriba y una not (o acorde) de una voz con las plicas hacia abajo. Si las notas de dos voces que tienen las plicas en la misma dirección se sitúan en la misma posición y las dos voces no tienen ningún desplazamiento o llevan especificado el mismo desplazamiento, se producirá el mensaje de error @qq{Chocan demasiadas columnas de notas}. @seealso Referencia de la notación: @ruser{Multiple voices}. @node Voices and vocals @subsection Voices and vocals La música vocal presenta una dificultad especial: tenemos que combinar dos expresiones, a saber, las notas y la letra. @funindex \new Lyrics @funindex \lyricsto @funindex lyricsto @funindex Lyrics @cindex Lyrics, creación de un contexto @cindex letra, creación de un contexto de @cindex letra, enlazar con una voz Ya ha visto la instrucción @code{\addlyrics@{@}}, que maneja bien partituras sencillas. Sin embargo esta técnica es algo limitada. Para música de mayor complejidad, tenemos que introducir la letra en un contexto @code{Lyrics} utilizando @code{\new Lyrics} y enlazar explícitamente la letra y las notas mediante @code{\lyricsto@{@}}, usando el nombre asignado a la voz. @lilypond[quote,verbatim,fragment] << \new Voice = "one" \relative c'' { \autoBeamOff \time 2/4 c4 b8. a16 g4. f8 e4 d c2 } \new Lyrics \lyricsto "one" { No more let sins and sor -- rows grow. } >> @end lilypond Observe que la letra se debe enlazar a un contexto de @code{Voice}, @emph{no} a un contexto de @code{Staff}. Este es un caso en que es necesario crear contextos de @code{Staff} y de @code{Voice} explícitamente. @cindex letra y barrado @cindex barrado y letra @funindex \autoBeamOff @funindex autoBeamOff El barrado automático que LilyPond usa de forma predeterminada funciona bien para la música instrumental, pero no tan bien para música con letra, donde o bien el barrado no se necesita en absoluto, o bien se utiliza para indicar los melismas de la letra. En el ejemplo anterior hemos utilizado la instrucción @code{\autoBeamOff} para desactivar el barrado automático. @funindex \new ChoirStaff @funindex ChoirStaff @funindex \lyricmode @funindex lyricmode @cindex vocal, estructura de una partitura @cindex coro, sistema de Ahora vamos a reutilizar el ejemplo anterior de «Judas Macabeo» para ilustrar esta técnica más flexible. Primero la reescribiremos para que use variables de manera que la música y la letra se pueda separar de la estructura de pentagramas. También introduciremos una llave de grupo de ChoirStaff. La letra en sí se debe introducir con @code{\lyricmode} para estar seguros de que se interpreta como letra y no como música. @lilypond[quote,verbatim] global = { \time 6/8 \partial 8 \key f \major} SopOneMusic = \relative c'' { c8 | c([ bes)] a a([ g)] f | f'4. b, | c4.~ c4 } SopTwoMusic = \relative c' { r8 | r4. r4 c8 | a'([ g)] f f([ e)] d | e([ d)] c bes' } SopOneLyrics = \lyricmode { Let | flee -- cy flocks the | hills a -- dorn, __ } SopTwoLyrics = \lyricmode { Let | flee -- cy flocks the | hills a -- dorn, } \score { \new ChoirStaff << \new Staff << \new Voice = "SopOne" { \global \SopOneMusic } \new Lyrics \lyricsto "SopOne" { \SopOneLyrics } >> \new Staff << \new Voice = "SopTwo" { \global \SopTwoMusic } \new Lyrics \lyricsto "SopTwo" { \SopTwoLyrics } >> >> } @end lilypond Ésta es la estructura básica de todas las partituras vocales. Se pueden añadir más pentagramas según se necesite, se pueden añadir más voces a los pentagramas y más estrofas a la letra, y las variables que contienen la música se pueden colocar fácilmente en archivos separados cuando se hagan demasiado largos. @cindex himno, estructura de @cindex SATB, estructura de @cindex vocal, partitura, varias estrofas @cindex varias estrofas vocales @cindex estrofas, varias, vocales A continuación podemos ver un ejemplo final de la primera línea de un himno con cuatro estrofas, para coro SATB. En este caso la letra de las cuatro partes es la misma. Observe cómo utilizamos variables para separar la notación musical de la estructura de pentagramas. Observe también cómo se utiliza una variable, para la que hemos elegido el nombre @q{TimeKey} («compás y tonalidad»), para que contenga varias instrucciones que se usarán dentro de los dos pentagramas. En otros ejemplos se le suele dar el nombre de @q{global}. @lilypond[quote,verbatim] TimeKey = { \time 4/4 \partial 4 \key c \major} SopMusic = \relative c' { c4 | e4. e8 g4 g | a a g } AltoMusic = \relative c' { c4 | c4. c8 e4 e | f f e } TenorMusic = \relative c { e4 | g4. g8 c4. b8 | a8 b c d e4 } BassMusic = \relative c { c4 | c4. c8 c4 c | f8 g a b c4 } VerseOne = \lyricmode { E -- | ter -- nal fa -- ther, | strong to save, } VerseTwo = \lyricmode { O | Christ, whose voice the | wa -- ters heard, } VerseThree = \lyricmode { O | Ho -- ly Spi -- rit, | who didst brood } VerseFour = \lyricmode { O | Tri -- ni -- ty of | love and pow'r } \score { \new ChoirStaff << \new Staff << \clef "treble" \new Voice = "Sop" { \voiceOne \TimeKey \SopMusic } \new Voice = "Alto" { \voiceTwo \AltoMusic } \new Lyrics \lyricsto "Sop" { \VerseOne } \new Lyrics \lyricsto "Sop" { \VerseTwo } \new Lyrics \lyricsto "Sop" { \VerseThree } \new Lyrics \lyricsto "Sop" { \VerseFour } >> \new Staff << \clef "bass" \new Voice = "Tenor" { \voiceOne \TimeKey \TenorMusic } \new Voice = "Bass" { \voiceTwo \BassMusic } >> >> } @end lilypond @cindex estrofa y estribillo Finalizamos con un ejemplo que muestra cómo podemos codificar una estrofa para solista seguida de un estribillo en dos partes sobre dos pentagramas. El posicionado de las secciones secuencial y simultánea para conseguirlo dentro de una sola partitura es un poco enrevesado, por tanto siga esta explicación con todo cuidado. Comenzamos el ejemplo con un bloque de partitura que contiene un @code{ChoirStaff}, pues queremos que aparezca un corchete al comienzo de la parte de coro. Normalmente necesitaríamos dobles ángulos después de @code{\new ChoirStaff} para meter dentro todos los pentagramas en paralelo, pero aquí queremos postponer el paralelismo mientras dura el solo y por ello usaremos llaves, aunque aquí unos ángulos dobles no harían daño. Dentro del @code{ChoirStaff} queremos en primer lugar el pentagrama que va a contener la estrofa. Debe contener notas y letra en paralelo, así que necesitamos dobles ángulos encerrando el @code{\new Voice} y el @code{\new Lyrics} para que den comienzo al mismo tiempo: @lilypond[quote,verbatim,ragged-right] versenotes = \relative c'' { \clef "treble" \key g \major \time 3/4 g g g b b b } versewords = \lyricmode { One two three four five six } \score { \new Choirstaff { \new Staff << \new Voice = "verse" { \versenotes \break } \new Lyrics \lyricsto verse { \versewords } >> } } @end lilypond Con esto tenemos la línea de la estrofa. Ahora deseamos continuar con refrainA (la primera parte del estribillo) sobre el mismo pentagrama, mientras un segundo pentagrama aparece en paralelo con él para refrainB (estribillo, segunda parte), por lo que ésta es una sección paralela que se debe situar inmediatamente a continuación del salto de línea @code{\break} en la voz de la estrofa. ¡Sí, @emph{dentro} de la voz de la estrofa! He aquí dicha sección paralela. Se podrían introducir más pentagramas de la misma forma. @example << \refrainnotesA \new Lyrics \lyricsto verse @{ \refrainwordsA @} \new Staff << \new Voice = "refrainB" @{ \refrainnotesB @} \new Lyrics \lyricsto "refrainB" @{ \refrainwordsB @} >> >> @end example Aquí tenemos el resultado final con dos pentagramas en el estribillo mostrando cómo la sección paralela se posiciona dentro de la voz de la estrofa: @lilypond[quote,verbatim, ragged-right] versenotes = \relative c'' { \clef "treble" \key g \major \time 3/4 g g g b b b } refrainnotesA = \relative c'' { \time 2/4 c c g g \bar "|." } refrainnotesB = \relative c { \clef "bass" \key g \major c e d d } versewords = \lyricmode { One two three four five six } refrainwordsA = \lyricmode { la la la la } refrainwordsB = \lyricmode { dum dum dum dum } \score { \new ChoirStaff { \new Staff << \context Voice = "verse" { \versenotes \break << \refrainnotesA \new Lyrics \lyricsto "verse" { \refrainwordsA } \new Staff << \new Voice = "refrainB" { \refrainnotesB } \new Lyrics \lyricsto "refrainB" { \refrainwordsB } >> >> } \new Lyrics \lyricsto "verse" { \versewords } >> } } @end lilypond @cindex libro @cindex book, ejemplo de su uso @funindex \book @funindex book Sin embargo, y aunque esto es un interesante y útil ejercicio destinado a ayudarle a comprender cómo funcionan los bloques secuenciales y simultáneos, en la práctica quizá nos decidiríamos por codificarlo como dos bloques @code{\score} dentro de un bloque @code{\book} implícito, como sigue: @lilypond[quote,verbatim,ragged-right] versenotes = \relative c'' { \clef "treble" \key g \major \time 3/4 g g g b b b } refrainnotesA = \relative c'' { \time 2/4 c c g g \bar "|." } refrainnotesB = \relative c { \clef "bass" \key g \major c e d d } versewords = \lyricmode { One two three four five six } refrainwordsA = \lyricmode { la la la la } refrainwordsB = \lyricmode { dum dum dum dum } \score { \new Staff << \new Voice = "verse" { \versenotes } \new Lyrics \lyricsto "verse" { \versewords } >> } \score { \new ChoirStaff << \new Staff << \new Voice = "refrainA" { \refrainnotesA } \new Lyrics \lyricsto "refrainA" { \refrainwordsA } >> \new Staff << \new Voice = "refrainB" { \refrainnotesB } \new Lyrics \lyricsto "refrainB" { \refrainwordsB } >> >> } @end lilypond @seealso Referencia de la notación: @ruser{Vocal music}. @node Contexts and engravers @section Contexts and engravers Los contextos y grabadores se han mencionado de manera informal en secciones anteriores; ahora tan sólo vamos a ver estos conceptos con más detalle, pues son importantes en el ajuste fino de la salida de LilyPond. @menu * Contexts explained:: * Creating contexts:: * Engravers explained:: * Modifying context properties:: * Adding and removing engravers:: @end menu @node Contexts explained @subsection Contexts explained @cindex contextos, explicación de los Cuando se imprime la música, se tienen que añadir a la salida una gran cantidad de elementos notacionales que no aparecen explícitamente en el archivo de entrada. Por ejemplo, compare la entrada y la salida del siguiente ejemplo: @lilypond[quote,verbatim,relative=2,fragment] cis4 cis2. g4 @end lilypond La entrada es bastante escueta, pero en la salida se añaden líneas divisorias, alteraciones accidentales, la clave y la indicación de compás. LilyPond @emph{interpreta} la entrada. En esta fase se inspecciona la información musical en orden temporal, de forma parecida a la lectura de una partitura de izquierda a derecha. Mientras se lee la entrada, el programa recuerda dónde se encuentran los límites de los compases, y qué notas requieren alteraciones explícitas. Esta información se puede presentar sobre varios niveles. Por ejemplo, el efecto de una alteración accidental se encuentra limitada a un solo pentagrama, mientras que una barra divisoria debe estar sincronizada a través de la partitura de arriba a abajo. Dentro de LilyPond, estas reglas y pequeñas porciones de información se agrupan en @emph{Contexts}. Algunos ejemplos de contextos son @code{Voice} (Voz), @code{Staff} (Pauta o pentagrama) y @code{Score} (Partitura). Los contextos son jerárquicos, de forma que reflejan la naturaleza jerárquica de una partitura musical. Por ejemplo: un contexto de @code{Staff} contener muchos contextos de @code{Voice}, y un contexto de @code{Score} puede contener muchos contextos de @code{Staff}. @quotation @sourceimage{context-example,5cm,,} @end quotation Cada contexto asume la responsabilidad de imponer algunas reglas de notación, creando ciertos objetos de notación y manteniendo las propiedades asociadas. Por ejemplo, el contexto @code{Voice} puede introducir una alteración accidental y entonces el contexto @code{Staff} mantiene la regla de mostrar o suprimir la alteración para el resto del compás. Otro ejemplo lo constituye el hecho de que la sincronización de las líneas divisorias se gestiona dentro del contexto de la partitura, @code{Score}, de forma predeterminada. Sin embargo, en algunas músicas posiblemente no queramos que las líneas divisorias estén sincronizadas (pensemos en una partitura polimétrica en compases de 4/4 y de 3/4). En tales casos, debemos modificar los ajustes por omisión de los contextos @code{Score} y @code{Staff}. Para partituras muy sencillas, los contextos se crean implícitamente y no debemos preocuparnos por ellos. Para piezas mayores, como por ejemplo cualquiera que tenga más de un pentagrama, los contextos se deben crear explícitamente para asegurarnos de que tendremos la cantidad exacta de pentagramas que necesitamos, y que están en el orden correcto. Para tipografiar piezas con notación especializada, es frecuente la modificación de contextos existentes o incluso definir unos completamente nuevos. Además de los contextos @code{Score,} @code{Staff} y @code{Voice}, hay contextos que se sitúan entre los niveles de partitura y de pentagrama para controlar los grupos de pentagraamas, como los contextos @code{PianoStaff} y @code{ChoirStaff}. También existen contextos alternativos de pentagrama y de voz, y contextos para la letra, la percusión, diagramas de trastes, bajo cifrado, etc. Los nombres de todos los tipos de contextos se componen de una o más palabras que comienzan con mayúscula y que están unidas unas a otras sin guión ni barra baja, por ejemplo: @code{GregorianTranscriptionStaff}. @seealso Referencia de la notación: @ruser{Contexts explained}. @node Creating contexts @subsection Creating contexts @funindex \new @funindex new @cindex nuevos contextos @cindex creación de contextos @cindex contextos, creación de Sólo puede haber un contexto en el nivel más alto: el contexto de partitura @code{Score}. Se crea con la instrucción @code{\score} o, en partituras sencillas, se crea automáticamente. Para partituras que solamente tienen una voz y un pentagrama, podemos dejar que los contextos @code{Voice} y @code{Staff} se creen automáticamente, pero para partituras más complejas es necesario crearlos a mano. La instrucción más simple que hace esto es @code{\new}. Se antepone a una expresión musical, por ejemplo @example \new @var{tipo} @var{expresión_musical} @end example @noindent donde @var{tipo} es el nombre de un contexto (como @code{Staff} o @code{Voice}). Esta instrucción crea un contexto nuevo, y comienza a interpretar la @var{expresión_musical} que está dentro de ese contexto. Observe que no hay ninguna instrucción @code{\new Score}; el contexto @code{Score} único en el nivel más alto se introduce con @code{\score}. En las secciones anteriore ha podido ver muchos ejemplos prácticos que creaban nuevos contextos de @code{Staff} y de @code{Voice}, pero para recordarle cómo se emplean estas instrucciones en la práctica, he aquí un ejemplo anotado de música real: @lilypond[quote,verbatim,ragged-right] \score { % start of single compound music expression << % start of simultaneous staves section \time 2/4 \new Staff { % create RH staff \key g \minor \clef "treble" \new Voice { % create voice for RH notes \relative c'' { % start of RH notes d4 ees16 c8. | d4 ees16 c8. | } % end of RH notes } % end of RH voice } % end of RH staff \new Staff << % create LH staff; needs two simultaneous voices \key g \minor \clef "bass" \new Voice { % create LH voice one \voiceOne \relative g { % start of LH voice one notes g8 ees, | g8 ees, | } % end of LH voice one notes } % end of LH voice one \new Voice { % create LH voice two \voiceTwo \relative g { % start of LH voice two notes g4 ees | g4 ees | } % end of LH voice two notes } % end of LH voice two >> % end of LH staff >> % end of simultaneous staves section } % end of single compound music expression @end lilypond (Observe cómo todas las instrucciones que abren un bloque con una llave curva, @code{@{}, o con ángulos dobles, @code{<<}, están sangrados (tienen un margen adicional) con dos espacios adicionales, y la llave de cierre correspondiente tiene un margen exactamente igual. Aunque no es necesario, la observancia de esta práctica reducirá considerablemente el número de errores de @q{paréntesis descompensados}, y se recomienda vivamente. Permite apreciar de un solo vistazo la estructura de la música, y cualquier paréntesis descompensado aprecerá con obviedad. Observe también cómo el pentagrama de la MI se crea usando dobles ángulos porque requiere dos voces, mientras que el pentagrama de la MD se crea con una expresión musical única encerrada entre llaves porque sólo requiere una voz.) @cindex contextos, nombrado @cindex nombrar contextos La instrucción @code{\new} también puede otorgar un nombre identificativo al contexto para distinguirlo de otros contextos del mismo tipo: @example \new @var{tipo} = @var{identificador} @var{expresión_musical} @end example Observe la distinción entre el nombre del tipo de contexto, @code{Staff}, @code{Voice}, etc., y el nombre identificativo de una instancia en particular de ese tipo, que puede ser cualquier secuencia de letras inventada por el usuario. En el nombre identificativo también se pueden utilizar dígitos y espacios, pero en este caso aquél debe ir entre comillas p.ej. @code{\new Staff = "MiPentagrama 1" @var{expresión_musical}}. El nombre identificativo se utiliza para referirnos más tarde a esa instancia en particular de un contexto. Hemos visto esto en la sección acerca de la letra, en @ref{Voices and vocals}. @seealso Referencia de la notación: @ruser{Creating contexts}. @node Engravers explained @subsection Engravers explained @cindex grabadores Todas y cada una de las marcas de la salida impresa de una partitura hecha con LilyPond está producida por un @code{Engraver} (grabador). Así, tenemos un grabador para imprimir pentagramas, otro para imprimir las cabezas de las notas, otro para las plicas, otro para las barras, etc, etc. ¡En total hay más de 120 grabadores! Afortunadamente, para la mayor parte de las partituras no es necesario conocer más que algunos, y para partituras sencillas no tenemos que saber nada de ninguno de ellos. Los grabadores residen y operan dentro de Contextos. Los grabadores como el grabador de la indicación metronómica, @code{Metronome_mark_engraver}, cuya acción y resultado se aplican a la partitura como un todo, operan en el contexto del nivel más alto: el contexto de partitura @code{Score}. El grabador de la clave @code{Clef_engraver} y el de la armadura @code{Key_engraver} se encuentran probablemente en todos los contextos de pentagrama (@code{Staff}), pues los distintos pentagramas podrían requerir diferentes claves y armaduras. El grabador de las cabezas de nota @code{Note_heads_engraver} y el de las plicas @code{Stem_engraver} viven en cada uno de los contextos de voz @code{Voice}, el contexto de nivel más bajo de todos. Cada grabador procesa los objetos particulares asociados con su función, y mantiene las propiedades que están relacionadas con dicha función. Estas propiedades, como las que están asociadas con los contextos, se pueden modificar para cambiar el funcionamiento del grabador o el aspecto de esos elementos en la partitura impresa. Todos los grabadores tienen nombres compuestos de varias palabras que describen su función. Sólo está en mayúsculas la inicial de la primera palabra, y el resto se le une mediante guiones bajos. Así, el grabador @code{Staff_symbol_engraver} es responsable de la creación de las líneas del pentagrama, y el @code{Clef_engraver} determina y establece la altura o el punto de referencia sobre el pentagrama dibujando un símbolo de clave. A continuación presentamos algunos de los grabadores más comunes, junto a su función. Podrá comprobar que es fácil adivinar la función a partir del nombre (en inglés), y viceversa. @multitable @columnfractions .3 .7 @headitem Grabador @tab Función @item Accidental_engraver @tab Hace las alteraciones accidentales, de precaución y de sugerencia. @item Beam_engraver @tab Graba las barras @item Clef_engraver @tab Graba las claves @item Completion_heads_engraver @tab Splits notes which cross bar lines @c The old Dynamic_engraver is deprecated. -jm @item New_dynamic_engraver @tab Crea reguladores e indicaciones dinámicas textuales @item Forbid_line_break_engraver @tab Prevents line breaks if a musical element is still active @item Key_engraver @tab Crea la armadura de la tonalidad @item Metronome_mark_engraver @tab Graba la indicación metronómica @item Note_heads_engraver @tab Graba la cabeza de las notas @item Rest_engraver @tab Graba los silencios @item Staff_symbol_engraver @tab Graba las cinco líneas (de forma predeterminada) del pentagrama @item Stem_engraver @tab Crea las plicas y los trémolos de una sola plica @item Time_signature_engraver @tab Crea las indicaciones de compás @end multitable @smallspace Más adelante veremos cómo la salida de LilyPond se puede cambiar mediante la modificación del funcionamiento de los Grabadores. @seealso Referencia de funcionamiento interno: @rinternals{Engravers and Performers}. @node Modifying context properties @subsection Modifying context properties @cindex contexto, propiedades de @cindex contexto, propiedades de, modificación @cindex modificar las propiedades de contexto @funindex \set @funindex set @funindex \unset @funindex unset Los contextos se responsabilizan de mantener los valores de un cierto número de @emph{properties} de contexto. Muchas de ellas se pueden cambiar para influir en la interpretación del código de entrada y cambiar así la apariencia de la salida impresa. Se modifican mediante la instrucción @code{\set}. Esta instrucción toma la forma siguiente: @example \set @emph{NombreDelContexto}.@emph{nombreDeLaPropiedad} = #@emph{valor} @end example Donde el @emph{NombreDelContexto} es normalmente @code{Score}, @code{Staff} o @code{Voice}. Se puede omitir, en cuyo caso se supone que es @code{Voice}. Los nombres de las propiedades de contexto consisten en palabras unidas sin ningún guión o barra baja, y donde todas las palabras excepto la primera empiezan en mayúscula. A continuación podemos ver algunos ejemplos de nombres de propiedades utilizadas con frecuencia. Hay muchas más que las que se muestran aquí. @c attempt to force this onto a new page @need 50 @multitable @columnfractions .25 .15 .45 .15 @headitem nombreDeLaPropiedad @tab Tipo @tab Función @tab Valor de ejemplo @item extraNatural @tab Booleano @tab Si es verdadero, poner becuadros adicionales antes de las alteraciones @tab @code{#t}, @code{#f} @item currentBarNumber @tab Entero @tab Ajustar el número del compás actual @tab @code{50} @item doubleSlurs @tab Booleano @tab Si es verdadero, imprimir ligaduras de expresión por encima y por debajo de las notas @tab @code{#t}, @code{#f} @item instrumentName @tab Texto @tab Establecer el nombre del pentagrama, situado a la izquierda @tab @code{"Cello I"} @item fontSize @tab Real @tab Aumentar o disminuir el tamaño de la fuente tipográfica @tab @code{2.4} @item stanza @tab Texto @tab Establecer el texto que se imprime antes del comienzo de una estrofa @tab @code{"2"} @end multitable @noindent donde un valor Booleano es verdadero (@code{#t}, True) o falso (@code{#f}, False), un Entero es un número entero positivo, un número Real es un número decimal positivo o negativo, y el texto se encierra entre comillas dobles. Observe la aparición de signos de cuadradillo, (@code{#}), en dos lugares diferentes: como parte del valor Booleano antes de la @code{t} o la @code{f}, y antes del @emph{valor} dentro de la sentencia @code{\set}. Así pues, cuando se está escribiendo un valor Booleano, hay que escribir dos signos de cuadradillo, por ejemplo: @code{##t}. @cindex propiedades que funcionan en contextos @cindex establecer propiedades en contextos Antes de poder establecer cualquiera de estas propiedades, tenemos que saber en qué contexto operan. A veces es algo obvio, pero en ocasiones puede ser algo enrevesado. Si especificamos un contexto equivocado, no se produce ningún mensaje de error, pero el funcionamiento esperado no tendrá lugar. Por ejemplo, la propiedad @code{instrumentName} (nombre del instrumento) vive claramente dentro del contexto de @code{Staff}, puesto que es el pentagrama el que debe ser nombrado. En este ejemplo, el primer pentagrama resulta etiquetado, pero no el segundo, porque hemos omitido el nombre del contexto. @lilypond[quote,verbatim,ragged-right] << \new Staff \relative c'' { \set Staff.instrumentName = #"Soprano" c4 c } \new Staff \relative c' { \set instrumentName = #"Alto" % Wrong! d4 d } >> @end lilypond Recuerde que el nombre del contexto predeterminado es @code{Voice}, así que la segunda instrucción @code{\set} establece la propiedad @code{instrumentName} del contexto @code{Voice} a @qq{Alto}, pero como LilyPond no busca esta propiedad en el contexto @code{Voice}, no se realiza ninguna acción. Esto no es un error, y no se registra ningún mensaje en el archivo Log de registro de errores. De forma parecida, si el nombre de la propiedad se escribe con alguna falta, no se produce ningún mensaje de error, y claramente la acción esperada no puede tener lugar. De hecho, se puede establecer cualquier @q{property} (ficticia) usando cualquier nombre que queramos en cualquier contexto que exista, mediante el uso de la instrucción @code{\set}. Pero si el nombre no es conocido para LilyPond, no producirá ninguna acción. Algunos editores de texto que apoyan a los archivos de entrada de LilyPond de manera especial, documentan los nombres de propiedades con viñetas cuando psamos sobre ellos con el puntero del ratón, como JEdit con la extensión LilyPondTool, o resaltan los nombres de propiedades desconocidas de manera diferente, como ConTEXT. Si no se utiliza un editor con tales posibilidades, se recomienda comprobar la corrección del nombre de la propiedad en el manual de Referencia de funcionamiento interno: véase @rinternals{Tunable context properties} o @rinternals{Contexts}. La propiedad @code{instrumentName} tendrá efecto solamente si se establece dentro del contexto @code{Staff}, pero algunas propiedades se pueden establecer en más de un contexto. Por ejemplo, la propiedad @code{extraNatural} está establecida por defecto al valor @code{##t} (verdadero) para todos los pentagramas. Si se establece a @code{##f} (falso) en un contexto de @code{Staff} determinado, se aplicará solamente a las alteraciones de ese pentagrama. Si se establece a falso en el contexto de la partitura, @code{Score}, se aplicará a todos los pentagramas. Así, esto desactivará los becuadros adicionales en un pentagrama: @lilypond[quote,verbatim,ragged-right] << \new Staff \relative c'' { ais4 aes } \new Staff \relative c'' { \set Staff.extraNatural = ##f ais4 aes } >> @end lilypond @noindent y esto los desactivará en todos los pentagramas: @lilypond[quote,verbatim,ragged-right] << \new Staff \relative c'' { ais4 aes } \new Staff \relative c'' { \set Score.extraNatural = ##f ais4 aes } >> @end lilypond Como un ejemplo más, si se establece @code{clefOctavation} dentro del contexto de @code{Score}, éste cambia inmediatamente el valor de la octavación en todos los pentagramas en curso y establece un nuevo valor predeterminado que se aplicará a todos los pentagramas. La instrucción opuesta, @code{\unset}, tiene el efecto de suprimir la propiedad del contexto, lo que ocasiona que la mayoría de las porpiedades vuelvan a su valor predeterminado. Normalmente no es necesario el uso de @code{\unset}, pues una nueva instrucción @code{\set} hará el ajuste deseado. Las instrucciones @code{\set} y @code{\unset} pueden aparecer en cualquier lugar del archivo de entrada y tendrán efecto a partir del tiempo en que se encuentran y hasta el final de la partitura o hasta que la propiedad se establezca de nuevo mediante @code{\set} o @code{\unset}. Probemos a modificar el tamaño de la fuente tipográfica, lo que afecta al tamaño de las cabezas de las notas (entre otras cosas) varias veces. El cambio se toma a partir del valor predeterminado, no el valor en curso. @lilypond[quote,verbatim,ragged-right,relative=1,fragment] c4 % make note heads smaller \set fontSize = #-4 d e % make note heads larger \set fontSize = #2.5 f g % return to original size \unset fontSize a b @end lilypond Hemos podido ver cómo establecer los valores de diversos tipos de propiedad diferentes. Observe que los números enteros y reales van siempre precedidos de un símbolo de cuadradillo, @code{#}, mientras que un valor booleano verdadero o falso se especifica mediante @code{##t} y @code{##f}, con dos cuadradillos. Una propiedad de texto se debe encerrar entre comillas dobles, como antes, aunque veremos más adelante que el texto realmente se puede especificar de una forma mucho más general utilizando la potentísima instrucción @code{markup}. @unnumberedsubsubsec Setting context properties with @code{\with} @funindex \with @funindex with @cindex contexto, propiedades de, establecimiento con \with Las propiedades de contexto también se pueden establecer en el momento en que se crea el contexto. A veces esta forma de establecer el valor de una propiedad es mucho más clara, si ha de quedar fijo durante todo el tiempo que dure el contexto. Cuando se crea un contexto con una instrucción @code{\new} puede ir inmediatamente seguido de un bloque @code{\with @{ .. @}} en el que se establecen los valores de las propiedades. Por ejemplo, si queremos suprimir la impresión de becuadros adicionales para toda la duración de un pentagrama, podemos escribir: @example \new Staff \with @{ extraNatural = ##f @} @end example @noindent de la siguiente forma: @lilypond[quote,verbatim,ragged-right] << \new Staff \relative c'' { gis ges aes ais } \new Staff \with { extraNatural = ##f } \relative c'' { gis ges aes ais } >> @end lilypond Las propiedades ajustadas de esta manera aún pueden cambiarse dinámicamente utilizando @code{\set} y ser devueltas a sus valores predeterminados mediante @code{\unset}. @cindex fontSize (tamaño de la tipografía) @cindex fuente, tamaño de la @cindex tamaño de la fuente La propiedad @code{fontSize} se trata de forma distinta. Si se ajusta dentro de una cláusula @code{\with}, tiene el efecto de reiniciar el valor predeterminado del tamaño de la fuente tipográfica. Si más tarde se modifica con @code{\set}, este nuevo valor predeterminado puede restablecerse con la instrucción @code{\unset fontSize}. @unnumberedsubsubsec Setting context properties with @code{\context} @cindex contextos, establecer propiedades de, con \context @funindex \context @funindex context Los valores de propiedad de los contextos se pueden establecer para @emph{todos} los contextos de un tipo determinado, como por ejemplo todos los contextos de @code{Staff}, con una única instrucción. El tipo de contexto se identifica mediante la utilización del nombre de su tipo, como @code{Staff}, precedido de una barra invertida: @code{\Staff}. El enunciado que establece el valor de la propiedad es el mismo que el que está en un bloque @code{\with}, presentado anteriormente. Se coloca en un bloque @code{\context} dentro de un bloque @code{\layout}. Cada bloque @code{\context} afecta a todos los contextos del tipo especificado a lo largo del bloque @code{\score} o @code{\book} en el que aparece el bloque @code{\layout}. A continuación presentamos un ejemplo que muestra el formato: @lilypond[verbatim,quote] \score { \new Staff { \relative c'' { cis4 e d ces } } \layout { \context { \Staff extraNatural = ##t } } } @end lilypond @noindent Las propiedades de contexto establecidas de esta forma se pueden sobreescribir para ejemplares concretos de contextos mediante enunciados dentro de un bloque @code{\with}, y mediante instrucciones @code{\set} intercaladas dentro de enunciados musicales. @seealso Referencia de la notación: @ruser{Changing context default settings}. @c FIXME @c uncomment when backslash-node-name issue is resolved -pm @c @ruser{The set command}. Referencia de funcionamiento interno: @rinternals{Contexts}, @rinternals{Tunable context properties}. @node Adding and removing engravers @subsection Adding and removing engravers @cindex grabadores, adición @cindex grabadores, eliminación @cindex adición de grabadores @cindex eliminación de grabadores @funindex \consists @funindex consists @funindex \remove @funindex remove Hemos visto que cada uno de los contextos contiene varios grabadores, cada uno de los cuales a su vez es responsable de la producción de una fracción particular del resultado impreso, como líneas divisorias, pentagramas, cabezas, plicas, etc. Si un grabador es eliminado de un contexto, ya no podrá producir su salida impresa. Es una forma algo radical de modificar la salida, pero a veces puede ser útil. @subsubheading Changing a single context Para eliminar un grabador de un contexto único, usamos la instrucción @code{\with} situada inmediatamente después de la instrucción que crea el contexto, como en la sección anterior. Como ilustración, repitamos un ejemplo extraído de la sección anterior con las líneas del pentagrama eliminadas. Recuerde que las líneas del pentagrama están dibujadas por el grabador @code{Staff_symbol_engraver}. @lilypond[quote,verbatim,ragged-right] \new Staff \with { \remove Staff_symbol_engraver } \relative c' { c4 \set fontSize = #-4 % make note heads smaller d e \set fontSize = #2.5 % make note heads larger f g \unset fontSize % return to default size a b } @end lilypond @cindex ámbito, grabador del Los grabadores también se pueden añadir a los contextos individuales La instrucción que lo hace es @code{\consists @var{Nombre_del_grabador}}, situada dentro de un bloque @code{\with}. Ciertas partituras vocales tienen una indicación de ámbito o tesitura situada al principio del pentagrama para indicar el ámbito de notas en dicho pentagrama, véase @rglos{ambitus}. El ambitus se produce por parte del grabador @code{Ambitus_engraver}, que normalmente no está incluido en ningún contexto. Si lo añadimos al contexto @code{Voice}, calcula el rango a partir de esa única voz: @lilypond[quote,verbatim,ragged-right] \new Staff << \new Voice \with { \consists Ambitus_engraver } \relative c'' { \voiceOne c a b g } \new Voice \relative c' { \voiceTwo c e d f } >> @end lilypond @noindent pero si añadimos el grabador de ámbito al contexto de @code{Staff}, calcula el rango de todas las notas en todas las voces de ese pentagrama: @lilypond[quote,verbatim,ragged-right] \new Staff \with { \consists Ambitus_engraver } << \new Voice \relative c'' { \voiceOne c a b g } \new Voice \relative c' { \voiceTwo c e d f } >> @end lilypond @subsubheading Changing all contexts of the same type @funindex \layout @funindex layout Los ejemplos anteriores muestran la manera de eliminar o añadir grabadores a los contextos individuales. También es posible eliminar o añadir grabadores a todos los contextos de un tipo específico, situando las instrucciones en el contexto correspondiente dentro de un bloque @code{\layout}. Por ejemplo, si queremos mostrar los rangos de tesitura para todos los pentagramas de una partitura de cuatro pautas, podemos escribir @lilypond[quote,verbatim,ragged-right] \score { << \new Staff << \relative c'' { c a b g } >> \new Staff << \relative c' { c a b g } >> \new Staff << \clef "G_8" \relative c' { c a b g } >> \new Staff << \clef "bass" \relative c { c a b g } >> >> \layout { \context { \Staff \consists Ambitus_engraver } } } @end lilypond @noindent Los valores predeterminados de las propiedades de los contextos también se pueden establecer para todos los contextos de un tipo en particular incluyendo la instrucción @code{\set} dentro de un bloque @code{\context} de la misma forma. @seealso Referencia de la notación: @ruser{Modifying context plug-ins}, @ruser{Changing context default settings}. @node Extending the templates @section Extending the templates Ha leído el tutorial y ahora sabe escribir música. Pero ¿cómo puede poner los pentagramas que quiere? Las plantillas están muy bien, pero ¿qué ocurre si quiere algo que no está en una de ellas? Bien, puede encontrar montañas de plantillas (véase @ref{Templates}) que le pueden servir como punto de partida. Pero ¿y si quiere algo que no está contemplado aquí? Continúe leyendo. @menu * Soprano and cello:: * Four-part SATB vocal score:: * Building a score from scratch:: @end menu @node Soprano and cello @subsection Soprano and cello @cindex plantilla, modificar @cindex modificar plantillas Para empezar, tome la plantilla que le parezca más parecida a aquello que quiere conseguir. Digamos que quiere escribir algo para soprano y cello. En este caso comenzaríamos con la plantilla @q{Notas y letra} (para la parte de soprano). @example \version @w{"@version{}"} melodia = \relative c' @{ \clef treble \key c \major \time 4/4 a4 b c d @} texto = \lyricmode @{ Aaa Bee Cee Dee @} \score @{ << \new Voice = "uno" @{ \autoBeamOff \melodia @} \new Lyrics \lyricsto "uno" \texto >> \layout @{ @} \midi @{ @} @} @end example Ahora queremos añadir una parte de violoncello. Veamos el ejemplo @q{Sólo notas}: @example \version @w{"@version{}"} melodia = \relative c' @{ \clef treble \key c \major \time 4/4 a4 b c d @} \score @{ \new Staff \melodia \layout @{ @} \midi @{ @} @} @end example No necesitamos dos instrucciones @code{\version}. Vamos a necesitar la sección @code{melodia}. No queremos dos secciones @code{\score} (si tuviésemos dos @code{\score}s, acabaríamos con las dos particellas por separado. Queremos las dos juntas, como un dúo. Dentro de la sección @code{\score}, no nos hacen falta dos @code{\layout} ni dos @code{\midi}. Si nos limitásemos a copiar y pegar la sección @code{melodia}, acabaríamos con dos secciones @code{melodia} separadas, así que vamos a cambiarles el nombre. Llamaremos @code{musicaSoprano} a la sección de la soprano y @code{musicaCello} a la sección del violoncello. Al mismo tiempo cambiaremos el nombre de @code{texto} a @code{letraSoprano}. Recuerde cambiar el nombre a las dos apariciones de todos estos nombres -- tanto la definición inicial (la parte @code{melodia = relative c' @{ }) -- como el uso de ese nombre (en la sección @code{\score}). También aprovecharemos para cambiar el pentagrama de la parte del cello (los violoncellos se escriben normalmente en clave de Fa). Asimismo, cambiaremos algunas notas del cello. @example \version @w{"@version{}"} musicaSoprano = \relative c' @{ \clef treble \key c \major \time 4/4 a4 b c d @} letraSoprano = \lyricmode @{ Aaa Bee Cee Dee @} musicaCello = \relative c @{ \clef bass \key c \major \time 4/4 d4 g fis8 e d4 @} \score@{ << \new Voice = "uno" @{ \autoBeamOff \sopranoMusic @} \new Lyrics \lyricsto "uno" \letraSoprano >> \layout @{ @} \midi @{ @} @} @end example Esto tiene una apariencia prometedora, pero la parte del cello no sale en la partitura (no la hemos puesto en la sección @code{\score}). Si queremos que la parte del cello aparezca debajo de la de soprano, tenemos que añadir @example \new Staff \musicaCello @end example @noindent justo debajo de todo lo de la soprano. También tenemos que poner @code{<<} y @code{>>} antes y después de la música -- lo que indica a LilyPond que hay más de una cosa (en este caso, @code{Staff}) sucediendo al mismo tiempo --. La @code{\score} se parecerá ahora a esto: @c Indentation in this example is deliberately poor @example \score@{ << << \new Voice = "uno" @{ \autoBeamOff \sopranoMusic @} \new Lyrics \lyricsto "uno" \letraSoprano >> \new Staff \musicaCello >> \layout @{ @} \midi @{ @} @} @end example @noindent Esto parece un poco enrevesado; los márgenes están descuadrados. Esto tiene fácil solución. Presentamos aquí la plantilla completa para soprano y cello. @lilypond[quote,verbatim,ragged-right,addversion] sopranoMusic = \relative c' { \clef treble \key c \major \time 4/4 a4 b c d } sopranoLyrics = \lyricmode { Aaa Bee Cee Dee } celloMusic = \relative c { \clef bass \key c \major \time 4/4 d4 g fis8 e d4 } \score{ << << \new Voice = "one" { \autoBeamOff \sopranoMusic } \new Lyrics \lyricsto "one" \sopranoLyrics >> \new Staff \celloMusic >> \layout { } \midi { } } @end lilypond @seealso Las plantillas de inicio se pueden encontrar en el apéndice @q{Templates}, véase @ref{Single staff}. @node Four-part SATB vocal score @subsection Four-part SATB vocal score La mayor parte de las partituras vocales escritas para coro mixto a cuatro voces con acompañamiento orquestal, como el «Elías» de Mendelssohn o el «Mesías» de Haendel, tienen la música coral y la letra en cuatro pentagramas para S, A, T y B, respectivamente, con una reducción de piano del acompañamiento de orquesta, por debajo. He aquí un ejemplo del «Mesías» de Haendel: @c The following should appear as music without code @lilypond[quote,ragged-right] global = { \key d \major \time 4/4 } sopranoMusic = \relative c'' { \clef "treble" r4 d2 a4 | d4. d8 a2 | cis4 d cis2 | } sopranoWords = \lyricmode { Wor -- thy is the lamb that was slain } altoMusic = \relative a' { \clef "treble" r4 a2 a4 | fis4. fis8 a2 | g4 fis e2 | } altoWords = \sopranoWords tenorMusic = \relative c' { \clef "G_8" r4 fis2 e4 | d4. d8 d2 | e4 a, cis2 | } tenorWords = \sopranoWords bassMusic = \relative c' { \clef "bass" r4 d2 cis4 | b4. b8 fis2 | e4 d a'2 | } bassWords = \sopranoWords upper = \relative a' { \clef "treble" \global r4 2 4 | 4. 8 2 | 4 2 | } lower = \relative c, { \clef "bass" \global 4 2 4 | 4. 8 2 | 4 2 | } \score { << % combine ChoirStaff and PianoStaff in parallel \new ChoirStaff << \new Staff = "sopranos" << \set Staff.instrumentName = "Soprano" \new Voice = "sopranos" { \global \sopranoMusic } >> \new Lyrics \lyricsto "sopranos" { \sopranoWords } \new Staff = "altos" << \set Staff.instrumentName = "Alto" \new Voice = "altos" { \global \altoMusic } >> \new Lyrics \lyricsto "altos" { \altoWords } \new Staff = "tenors" << \set Staff.instrumentName = "Tenor" \new Voice = "tenors" { \global \tenorMusic } >> \new Lyrics \lyricsto "tenors" { \tenorWords } \new Staff = "basses" << \set Staff.instrumentName = "Bass" \new Voice = "basses" { \global \bassMusic } >> \new Lyrics \lyricsto "basses" { \bassWords } >> % end ChoirStaff \new PianoStaff << \set PianoStaff.instrumentName = "Piano" \new Staff = "upper" \upper \new Staff = "lower" \lower >> >> } @end lilypond Ninguna de las plantillas proporciona esta disposición con exactitud. La más parecida es @q{partitura vocal SATB y reducción de piano automática} (véase @ref{Vocal ensembles}), pero necesitamos cambiar la disposición y añadir un acompañamiento de piano que no esté derviado automáticamente de las partes vocales. Las variables que contienen la música y la letra de las partes vocales es adecuada, pero tendremos que añadir variables para la reducción de piano. El orden en que aparecen los contextos en el ChoirStaff de la plantilla no se corresponde con el orden de la partitura vocal que hemos mostrado más arriba. Tenemos que reordenarlas para que haya cuatro pentagramas con la letra escrita directamente bajo las notas de cada parte. Todas las voces deben ser @code{\voiceOne}, que es la predeterminada, para que las instrucciones @code{\voiceXXX} se puedan eliminar. También tenemos que especificar la clave de tenor (clave de sol octava baja) en las partes de tenor. Aún no hemos encontrado la forma en que la letra se especifica en la plantilla, así que tenemos que utilizar el método que nos resulta familiar. También tenemos que escribir los nombres de cada pentagrama. Al hacerlo así obtenemos el ChoirStaff siguiente: @example \new ChoirStaff << \new Staff = "sopranos" << \set Staff.instrumentName = "Soprano" \new Voice = "sopranos" @{ \global \musicaSoprano @} >> \new Lyrics \lyricsto "sopranos" @{ \latraSoprano @} \new Staff = "altos" << \set Staff.instrumentName = "Alto" \new Voice = "altos" @{ \global \musicaAlto @} >> \new Lyrics \lyricsto "altos" @{ \letraAlto @} \new Staff = "tenores" << \set Staff.instrumentName = "Tenor" \new Voice = "tenores" @{ \global \musicaTenor @} >> \new Lyrics \lyricsto "tenores" @{ \letraTenor @} \new Staff = "bajos" << \set Staff.instrumentName = "Bass" \new Voice = "bajos" @{ \global \musicaBajo @} >> \new Lyrics \lyricsto "bajos" @{ \letraBajo @} >> % fin del ChoirStaff @end example A continuación debemos trabajar sobre la parte de piano. Es fácil: tan sólo hay que sacar la parte de piano de la plantilla de @q{Piano solista}: @example \new PianoStaff << \set PianoStaff.instrumentName = "Piano" \new Staff = "superior" \superior \new Staff = "inferior" \inferior >> @end example y escribir las definiciones de variable para @code{superior} e @code{inferior}. Los grupos ChoirStaff y PianoStaff se deben combinar utilizando ángulos dobles, ya queremos apilarlos unos sobre otros: @example << % combinar los grupos ChoirStaff y PianoStaff uno sobre el otro \new ChoirStaff << \new Staff = "sopranos" << \new Voice = "sopranos" @{ \global \musicaSoprano @} >> \new Lyrics \lyricsto "sopranos" @{ \letraSoprano @} \new Staff = "altos" << \new Voice = "altos" @{ \global \musicaAlto @} >> \new Lyrics \lyricsto "altos" @{ \letraAlto @} \new Staff = "tenores" << \clef "G_8" % clave de tenor \new Voice = "tenores" @{ \global \musicaTenor @} >> \new Lyrics \lyricsto "tenores" @{ \letraTenor @} \new Staff = "bajos" << \clef "bass" \new Voice = "bajos" @{ \global \musicaBajo @} >> \new Lyrics \lyricsto "bajos" @{ \letraBajo @} >> % fin del ChoirStaff \new PianoStaff << \set PianoStaff.instrumentName = "Piano" \new Staff = "upper" \upper \new Staff = "lower" \lower >> >> @end example Al combinar todo esto junto y escribir la música de los tres compases del ejemplo anterior, obtenemos: @lilypond[quote,verbatim,ragged-right,addversion] global = { \key d \major \time 4/4 } sopMusic = \relative c'' { \clef "treble" r4 d2 a4 | d4. d8 a2 | cis4 d cis2 | } sopWords = \lyricmode { Wor -- thy is the lamb that was slain } altoMusic = \relative a' { \clef "treble" r4 a2 a4 | fis4. fis8 a2 | g4 fis fis2 | } altoWords = \sopWords tenorMusic = \relative c' { \clef "G_8" r4 fis2 e4 | d4. d8 d2 | e4 a, cis2 | } tenorWords = \sopWords bassMusic = \relative c' { \clef "bass" r4 d2 cis4 | b4. b8 fis2 | e4 d a'2 | } bassWords = \sopWords upper = \relative a' { \clef "treble" \global r4 2 4 | 4. 8 2 | 4 2 | } lower = \relative c, { \clef "bass" \global 4 2 4 | 4. 8 2 | 4 2 | } \score { << % combine ChoirStaff and PianoStaff in parallel \new ChoirStaff << \new Staff = "sopranos" << \set Staff.instrumentName = "Soprano" \new Voice = "sopranos" { \global \sopMusic } >> \new Lyrics \lyricsto "sopranos" { \sopWords } \new Staff = "altos" << \set Staff.instrumentName = "Alto" \new Voice = "altos" { \global \altoMusic } >> \new Lyrics \lyricsto "altos" { \altoWords } \new Staff = "tenors" << \set Staff.instrumentName = "Tenor" \new Voice = "tenors" { \global \tenorMusic } >> \new Lyrics \lyricsto "tenors" { \tenorWords } \new Staff = "basses" << \set Staff.instrumentName = "Bass" \new Voice = "basses" { \global \bassMusic } >> \new Lyrics \lyricsto "basses" { \bassWords } >> % end ChoirStaff \new PianoStaff << \set PianoStaff.instrumentName = "Piano" \new Staff = "upper" \upper \new Staff = "lower" \lower >> >> } @end lilypond @node Building a score from scratch @subsection Building a score from scratch @cindex plantilla, escribir su propia @cindex ejemplo de escritura de una partitura @cindex escribir una partitura, ejemplo @cindex partitura, ejemplo de escritura Después de adquirir algo de soltura en la escritura del código de LilyPond, se dará cuenta de que es más fácil construir completamente una partitura partiendo de cero, que modificar una plantilla. También puede desarrollar su propio estilo de forma que se adapte al tipo de música que le apetezca. Veamos a continuación cómo confeccionar una partitura para un preludio de órgano, como ejemplo. Comenzamos con una sección para el encabezamiento. Aquí es donde van el título, nombre del compositor, etc., después van las definiciones de las variables, y finalmente el bloque de partitura. Comencemos a verlas por encima y más tarde completaremos los detalles. Utilizaremos los dos primeros compases del preludio de Bach basado en @emph{Jesu, meine Freude}, que está escrito para órgano con dos manuales y pedal. Tiene estos dos compases de música al final de la sección. La parte del manual superior tiene dos voces, y el inferior y el pedal, una voz cada uno. Así pues, necesitamos cuatro definiciones para la música y una más para definir el compás y la tonalidad: @example \version @w{"@version{}"} \header @{ title = "Jesu, meine Freude" composer = "J S Bach" @} TimeKey = @{ \time 4/4 \key c \minor @} MusicaManualUnoVozUno = @{s1@} MusicaManualUnoVozDos = @{s1@} MusicaManualDos = @{s1@} MusicaPedal = @{s1@} \score @{ @} @end example Por el momento hemos escrito tan sólo una nota espaciadora, @code{s1}, en lugar de la música de verdad. La añadiremos más adelante. A continuación veamos qué va en el bloque de partitura. Sencillamente, reflejaremos la estructura de pentagramas que deseemos. La música de órgano se escribe por lo general en tres pentagramas, uno para cada uno de los manuales y otro para el pedal. Los pentagramas de los manuales se abarcan con una llave, así que los incluiremos en un grupo PianoStaff. La primera parte de manual tiene dos voces, y la segunda sólo una. @example \new PianoStaff << \new Staff = "ManualUno" << \new Voice @{ \MusicaManualUnoVozUno @} \new Voice @{ \MusicaManualUnoVozDos @} >> % fin del contexto de Staff ManualUno \new Staff = "ManualDos" << \new Voice @{ \MusicaManualDos @} >> % fin del contexto de Staff ManualDos >> % fin del contexto de PianoStaff @end example Después, tenemos que añadir un pentagrama para el órgano de pedal. Esto va por debajo del PianoStaff, pero debe ser simultáneo con él, por lo que escribimos dobles ángulos rodeando a los dos. Si esto se nos olvida, se producirá un error en el archivo log de registro. ¡Es un error muy común que cometerá antes o después! Intente copiar el ejemplo final que aparece al final de la sección, borre los dobles ángulos y procese el archivo para ver qué error produce. @example << % el grupo PianoStaff y el pentagrama de Pedal son simultáneos \new PianoStaff << \new Staff = "ManualUno" << \new Voice @{ \MusicaManualUnoVozUno @} \new Voice @{ \MusicaManualUnoVozDos @} >> % fin del contexto de Staff ManualUno \new Staff = "ManualDos" << \new Voice @{ \MusicaManualDos @} >> % fin del contexto de Staff ManualDos >> % fin del contexto de PianoStaff \new Staff = "OrganoPedal" << \new Voice @{ \MusicaOrganoPedal @} >> >> @end example No es necesario utilizar la construcción simultánea @code{<< >>} para el pentagrama del manual dos y el pentagrama del órgano de pedal, ya que contienen una única expresión, pero no hace daño, y es una buena costumbre utilizar siempre dobles ángulos después de @code{\new Staff} cuando hay varias voces. Lo opuesto es cierto para las voces: normalmente deben ir seguidas de llaves @code{@{ .. @}} en caso de que tengamos música codificada como distintas variables que se deben situar consecutivamente. Añadamos esta estructura al bloque de partitura, y ajustemos el sangrado de los márgenes. También escribimos las claves correspondientes, nos aseguramos de que las plicas y ligaduras de unión y de expresión en cada una de las voces del pentagrama superior apuntan en la dirección adecuada con @code{\voiceOne} y @code{\voiceTwo} y escribimos el compás y la tonalidad en cada uno de los pentagramas usando nuestra variable previamente definida @code{\TimeKey}. @example \score @{ << % el grupo PianoStaff y el pentagrama de Pedal son simultáneos \new PianoStaff << \new Staff = "ManualUno" << \TimeKey % establecer compás y tonalidad \clef "treble" \new Voice @{ \voiceOne \MusicaManualUnoVozUno @} \new Voice @{ \voiceTwo \MusicaManualUnoVozDos @} >> % fin del contexto de Staff ManualUno \new Staff = "ManualDos" << \TimeKey \clef "bass" \new Voice @{ \MusicaManualDos @} >> % fin del contexto de Staff ManualDos >> % fin del contexto de PianoStaff \new Staff = "OrganoPedal" << \TimeKey \clef "bass" \new Voice @{ \MusicaOrganoPedal @} >> % fin del pentagrama de OrganoPedal >> @} % end Score context @end example Con esto se completa la estructura. Toda música para órgano de tres pentagramas tendrá una estructura similar, aunque el número de voces puede variar. Todo lo que nos queda es añadir la música, y combinar todas las partes. @lilypond[quote,verbatim,ragged-right,addversion] \header { title = "Jesu, meine Freude" composer = "J S Bach" } TimeKey = { \time 4/4 \key c \minor } ManualOneVoiceOneMusic = \relative g' { g4 g f ees | d2 c2 | } ManualOneVoiceTwoMusic = \relative c' { ees16 d ees8~ ees16 f ees s c8 d~ d c~ | c c4 b8 c8. g16 c b c d | } ManualTwoMusic = \relative c' { c16 b c8~ c16 b c g a8 g~ g16 g aes ees | f ees f d g aes g f ees d e8~ ees16 f ees d | } PedalOrganMusic = \relative c { r8 c16 d ees d ees8~ ees16 a, b g c b c8 | r16 g ees f g f g8 c,2 | } \score { << % PianoStaff and Pedal Staff must be simultaneous \new PianoStaff << \new Staff = "ManualOne" << \TimeKey % set time signature and key \clef "treble" \new Voice { \voiceOne \ManualOneVoiceOneMusic } \new Voice { \voiceTwo \ManualOneVoiceTwoMusic } >> % end ManualOne Staff context \new Staff = "ManualTwo" << \TimeKey \clef "bass" \new Voice { \ManualTwoMusic } >> % end ManualTwo Staff context >> % end PianoStaff context \new Staff = "PedalOrgan" << \TimeKey \clef "bass" \new Voice { \PedalOrganMusic } >> % end PedalOrgan Staff context >> } % end Score context @end lilypond