LilyPond para informáticos

De PacoVila
Revisión del 10:35 17 mar 2017 de Paco (discusión | contribuciones) (2.16 -> 2.19)
(dif) ← Revisión anterior | Revisión actual (dif) | Revisión siguiente → (dif)
Saltar a: navegación, buscar

Esta página está orientada a programadores e informáticos en general interesados por la música y la producción de partituras con LilyPond. Puedes volver a mi página de LilyPond

Generalidades

LilyPond es una especie de compilador: de forma similar a como hablamos de C como un lenguaje de programación, con su compilador correspondiente, LilyPond es un lenguaje y el programa actúa compilando los documentos de texto escritos en este lenguaje, produciendo a la salida un documento PDF de varias páginas.

Cada versión del programa LilyPond se lanza al mismo tiempo para todos los sistemas operativos principales: Unix (GNU/Linux y FreeBSD), MacOS X y Microsoft Windows. Está programado en C++ y Scheme: contiene partes compiladas y partes interpretadas, por lo que puede extenderse sin necesidad de recompilarlo. Utiliza Postscript como lenguaje de salida gráfica, que luego se convierte a los otros formatos. El programa incluye, además de los analizadores léxico y sintáctico (hechos con Flex y Bison), los plug-ins o grabadores, los algoritmos de layout (búsqueda de la disposición más favorable sujetas a restricciones), un intérprete de Scheme (guile), una serie de back-ends y un intérprete de Postscript (ghostscript).

Como informático, no te resultará difícil comprender la mecánica de utilización del programa. Los archivos de entrada se codifican en UTF-8 y siguen una sintaxis que recuerda a la de TeX/LaTeX. Un ejemplo de partitura más o menos mínima, pero real y que puede usarse ya como plantilla, sería la siguiente:

\header {
  title = "Título"
  composer = "Autor"
}
\new Staff \relative f {
  c'4 d e f g1
}

Una vez editado con un editor de texto como el bloc de notas, o mucho mejor: con un editor especializado como Frescobaldi, y guardado como prueba.ly, la instrucción del terminal

$ lilypond prueba.ly

produce un PDF con la partitura. En el editor Frescobaldi pulsamos Control+M para invocar al motor de tipografía lilypond.

Las características del lenguaje LilyPond son:

  • es insensible a los espacios o a los saltos de línea.
  • es sensible a mayúsculas/minúsculas
  • es necesario codificar en UTF-8 siempre que se utilicen caracteres internacionales. En caso contrario, admite ASCII
  • las instrucciones van precedidas de barra invertida
  • los bloques se delimitan mediante llaves curvas
  • hay muchos modos de entrada sintácticos posibles dentro de los bloques de código
  • los paréntesis normales y rectos no se anidan, no encierran bloques de código y tienen una semántica única de este lenguaje.
  • se pueden definir variables, que pueden contener expresiones escritas en cualquier modo
  • se pueden incluir archivos externos
  • se pueden definir funciones nuevas con Scheme
  • se puede insertar código del lenguaje ordinario lilypond dentro de código de Scheme para representar música de la forma habitual dentro de las funciones del usuario
  • una partitura completa consiste en una única expresión musical
  • el modo de notas admite la escritura de los nombres de las notas en muchos idiomas
  • hay comentarios de línea, con el prefijo %, y de bloque, con %{ %}

El lenguaje representa la estructura jerárquica de la partitura musical utilizando niveles de paréntesis en doble ángulo << >> para expresar simultaneidad y llaves curvas { } para construir secuencias de expresiones.

El lenguaje contiene numerosas golosinas sintácticas, que lo adaptan a su uso particular por parte de los músicos. Por ejemplo, formalmente (aunque de forma simplificada) una pieza musical completa escrita en LilyPond tiene el siguiente aspecto:

\score {
  \new Staff { 
      \new Voice {
          % música ... 
    }
  }
}
\layout {
  %instrucciones de diseño de la página
}

donde se aprecia una estructura o "contexto" de partitura (\score) que contiene un pentagrama (Staff), que a su vez contiene una voz (Voice), que es la que contiene la música.

Ahora bien: la música se introduce automáticamente en un contexto de voz si éste no se declara explícitamente, por lo que podemos prescindir de la parte \new Voice {}. Por su parte, las voces siempre estarán en un contexto de pentagrama, y si no hay una esctructura \score también se dará implícitamente. Por tanto, la misma partitura podría haberse escrito así:

{
  % música ...
}

es decir, como una sola expresión musical. Un bloque \layout{} vacío es, asimismo, prescindible.

Cuando dijimos más arriba que la estructura formal expuesta estaba simplificada, lo hicimos para no mencionar allí otras dos estructuras de orden superior a la partitura, que son: Bookpart (parte de libro) y Book (libro). Todo esto está explicado exhaustivamente en el manual.

Modos

La sintaxis de LilyPond comprende una serie de modos de entrada que dependen del contexto actual. Las expresiones están encerradas entre llaves curvas { } y se pueden asignar a variables. Habitualmente, si tenemos por ejemplo una canción sencilla, la parte de las notas se escribirá en el modo de predeterminado de entrada de notas y la letra de la canción en el modo de letra. Los modos de entrada también se dan implícitamente allí donde pueden deducirse del contexto. En el siguiente ejemplo vemos expresiones escritas en los distimtos modos:

% modo de notas (predeterminado)
{ \clef "bass" c'4( d' e'2 f'2 g'1) }
% modo de letra
\lyricmode { Nues -- tras vo -- _ ces se al -- zan, }
% modo de bajo cifrado
\figuremode { < 6 >4 < 7\+ >8 < 6+ [_!] > }
% modo de acordes
\chordmode { a1 a:m a:aug }
% modo de percusión
\drummode { cymc hh ss tomh }
% modo de marcado
\markup { \dynamic mf \italic cresc. }

(véase la sección correspondiente del manual)

El modo de notas

Este modo, predeterminado, es el más usado y se usa para introducir notación musical. Las notas se designan por su nombre anglosajón:

{ c d e f g a b }

o en español (además de otros muchos idiomas):

\language "español"
{ do re mi fa sol la si }

Las duraciones se expresan como fracciones de redonda, por el denominador, mediante los números 1, 2, 4, 8, 16 (etc). La duración de cada nota se toma de la última duración especificada, o '4' (negra) si no hay ninguna anterior.

{ c1 d2 e f4 g a b }

Aquí, la nota "e" tiene el valor 2 y "g a b" tienen el valor 4. O, dicho en español, el Mi es una blanca y Sol, La, Si son negras.

El significado de los paréntesis, único en LilyPond, es el siguiente: el paréntesis de apertura, colocado tras el nombre de una nota, inicia una ligadura. El paréntesis de cierre termina la ligadura. Por ejemplo,

{ c1( d2 e f4 g a b) }

Las articulaciones y los textos, sencillos o con formato, se adjuntan mediante un guión. Esto es un ejemplo de música con articulaciones y textos añadidos.

{ c1( -"legato" d2-- e-- f4-. g-. a-. b-. ) }

En este ejemplo hemos añadido matices y reguladores dinámicos. Con un poco de práctica aún pueden leerse las notas "c d e f g a b" entre la maraña de símbolos.

{ c1( \f \> -"legato" d2-- e-- f4-. g-. a-. b-. ) \! }

Y no olvidemos que, en caso necesario, un simple clic del ratón sobre el dibujo de las notas en el PDF nos colocará el cursor sobre el carácter correspondiente.

Un caso real

Este ejemplo es el comienzo de la parte de violín de la 3ª sinfonía "Heroica" de Beethoven, adaptado del documento correspondiente en Mutopia:

\relative f{
 \time 3/4
 \key ees \major
 <g es' bes' g'>4-. \f r r
 q-. r r
 R2.*2
}

Aparece la instrucción \relative como modificadora de la expresión que le sigue, con un argumento f que es una nota inicial en modo absoluto. Dentro del modo relativo, los saltos se interpretan en el sentido más corto, hasta un intervalo de cuarta.

Después tenemos:

  • una indicación de compás ternario
  • una indicación de tonalidad (Mi bemol mayor)
  • un acorde (notas encerradas entre ángulos simples)
  • una articulación para este acorde: picado
  • un matiz: forte
  • silencios 'r'
  • una repetición del último acorde 'q', con la articulación picado
  • un doble silencio de compás completo en 3/4, R2.*2

Contextos

Los contextos son estructuras que tratan de reproducir o modelizar las estructuras correspondientes de la música.

Unos contextos pueden contener a otros, como en la música real. Así, existen varios niveles de contextos, los de nivel superior son los contextos de libro (book), parte de libro (bookpart) y partitura (score).

Algunos contextos se crean específicamente para contener a otros, como los de conjunto de pentagramas (varias clases: StaffGroup, ChoirStaff, PianoStaff).

También existen contextos pensados para contener voces: pentagrama o pauta (Staff), tablatura (TabStaff), pauta rítmica (RhythmicStaff), tetragrama de canto gregoriano (VaticanaStaff) o pentagrama de notación mensural (MensuralStaff).

Finalmente, están los contextos del nivel inferior: voz de música (Voice), letra (Lyrics), bajo cifrado ((FiguredBass), nombres de acordes (ChordNames) o diagramas de posiciones de acordes (FretBoards). Véase la explicación completa en la explicación de los contextos que se ofrece en el manual.

Grabadores

Ahora bien, ¿qué efecto tienen los contextos? Cada contexto tiene una serie de plug-ins llamados "grabadores" que se ocupan de dibujar su contenido. La lista de grabadores es muy larga.

Cuando creamos un contexto nuevo con la instrucción \new, por ejemplo

\new Staff {

una serie de grabadores lo construyen: indicación de compás, líneas de la pauta, líneas divisorias, hasta un total de 26 grabadores distintos. Entre todos ellos, son capaces de representar el conjunto de elementos explícitos o implícitos que lo forman.

El nombre de "grabadores" proviene de los artesanos que trazaban sobre placas de cobre los elementos musicales para después entintarlas e imprimir la música sobre el papel. En francés "gravure musicale" es edición de partituras, y en inglés "engraving" es tipografía musical.

Véase la lista completa de los 134 grabadores.

Estructura de la partitura

Una típica partitura contiene un título, la indicación del autor, algún tipo de contenedor de pentagramas llamado "sistema" y un pentagrama o pauta por cada voz o por cada par de voces. El código de entrada correspondiente será algo similar a lo siguiente:

\header {
  title = "Título"
  composer = "Autor"
}
\score {
  \new StaffGroup <<
    \new Staff \relative f {
      c'4 d e f g1
    }
    \new Staff \relative f {
      a4 b c d e1
    }
  >>
}

Aquí observamos que los títulos se definen como asignaciones de cadenas de caracteres dentro de un bloque especial \header, y que existe un bloque \score explícito. Dentro de este bloque está el contenedor de pautas StaffGroup que abarca dos pentagramas en paralelo, de ahí los dobles ángulos de apertura '<<' y de cierre '>>'. Luego tenemos las declaraciones de cada pauta y una instrucción \relative que modifica el modo normal de notas de manera que las alturas se interpretan de una forma algo distinta.

El resultado de compilar este código con el programa lilypond es el siguiente:

Ejemplo-lilypond-01.png

Véase también