viernes, 8 de julio de 2011

Mis primeros pasos con Lilypond

(Dedicado a mi padre)

#########################
Notas de revisiones:
Rev 0: 19 julio 2011. Publicado.

#########################


Llevo un tiempo usando lilypond (página oficial, wikipedia, ambas en castellano) para escribir partituras, sobretodo para guitarra. El otro día, mi amigo y gran guitarrista Unai vio (y amablemente se animó a interpretar) alguna de ellas. Parece que le gustaron y me animó a mejorarlas.

Antes de nada, el "disclaimer" de rigor: Soy un guitarrista aficionado que disfruta con lilypond por la belleza de la impresión, para reflexionar sobre lo que toco, mejorar posturas, entender mejor la música... Y porque me resulta un pasatiempos divertido. Al mismo tiempo, creo que puede ser una buena herramienta para algunos músicos que quizás aún no lo hayan descubierto. Esta entrada habla de mi experiencia autodidacta, con algunos ejemplos de mi proceso de aprendizaje y un par de piezas de música antigua que suelo tocar desde hace muchos años. Hay una habitación muy grande y yo estoy mirando por el ojo de la cerradura pero está bien saber que se puede disfrutar desde el primer día. Además, es un buen ejercicio mental.

Contrariamente a algunos mitos que podemos encontrar en internet, ni hay que saber C++ ni hay que esperar (al menos no más de unos segundos) para ver el resultado impreso. Lilypond se escribe en texto plano con un lenguaje no excesivamente complicado y orientado a la expresión musical.

Cuando falla la compilación o hay avisos de incoherencias, es un pequeño triunfo encontrar el problema y solucionarlo (me he comido una llave, el compás no cuadra...). Cada vez son menos estos fallos pues ya tengo mis plantillas para no tener que empezar desde cero cada vez. Cuando quiero representar algo no tan frecuente investigo en el manual y en el repositorio de snippets (fragmentos de código lilypond). Ver estos fragmentos por primera vez asusta un poco pero empezar es muy fácil. Por ejemplo, esto:

\version "2.14.1"
\score {
\relative c' {c d e f g a b c}
}

Produce esto:



Lo podéis probar ahora mismo en omet.ca, una página web para edición de partituras "online" (en progreso), que sirve entre otras cosas para generar pdf's a partir de código lilypond (más abajo están las instrucciones para instalar lilypond localmente). Simplemente copiar el código de arriba en la pestaña "Sandbox" y pulsar la flecha para compilar y aparecerá una nueva pestaña "Rendered" con la impresión de la partitura, así como un enlace directo para descargarlo en formato pdf.

Por aquello de "divide y vencerás" y también para aprovechar bloques de texto que sirvan como plantilla para partituras similares, conviene separar la melodía en un bloque diferente, como en el siguiente ejemplo, donde definimos la palabra clave "voz" con la sucesión de notas relativas a do alto y la invocamos más abajo dentro del bloque \score.

Observad que las líneas que empiezan por el símbolo de porcentaje, "%", son comentarios, es decir, no son tenidos en cuenta por lilypond pero vienen muy bien para nuestras referencias y recordatorios, en este ejemplo para numerar los compases. Por otro lado, las "tuberías", "|" sirven como separadores de compás; no son estrictamente necesarias pues lilypond imprimirá las barras de acuerdo al compás y a las duraciones de notas indicadas, hayamos escrito o no las tuberías. Sin embargo, éstas no sólo ayudan a guiarnos en el archivo de texto, sino que además habilitan la comprobación de compases: Si un compás no cuadra lilypond nos lo chivará.

Para hacerlo más legible podemos dejar líneas en blanco.

Este código da el mismo resultado que hemos visto arriba:

\version "2.14.1"

voz = \relative c'{
%1
c d e f |
%2
g a b c |
}

\score {
\voz
}


Sin haberlo indicado expresamente, el compás es de 4/4, la tonalidad do mayor (no se imprimió ninguna armadura), la clave de sol y las notas negras. Creo que es mejor indicarlo, por claridad y para que sea fácil cambiarlo (¡Editar un plantilla es fácil!). Así que obtenemos el mismo resultado con este código:

\version "2.14.1"

voz = \relative c'{
\key c \major
\time 4/4
\clef treble
%1
c4 d e f |
%2
g a b c |
}

\score {
\voz
}

Fijémonos ahora en la duración de las notas. La primera es una negra (se indica con un 4) y todas las siguientes, como no decimos otra cosa, son negras también.

En cuanto a la altura tonal, la primera nota toma la octava de referencia indicada en la variable "\relative". El apóstrofe (rayita arriba) indica que partimos de una octava más alta que el do central. La coma (rayita abajo) indicaría una octava más baja.

Veis que estoy usando el estilo anglosajón para los nombres de las notas. Si os resulta más cómodo, podéis cambiar al más familiar do, re, mi... simplemente indicando \language "espanol" (sí, sin eñe). Este código genera el mismo resultado:

\version "2.14.1"
\language "espanol"

voz = \relative do'{
\key do \major
\time 4/4
\clef treble
%1
do4 re mi fa |
%2
sol la si do |
}

\score {
\voz
}



Veamos otro ejemplo:

\version "2.14.1"

voz = \relative c''{
\key d \minor
\time 4/4
\clef treble
%1
c4 d bes bes, |
%2
f'1 |
}

\score {
\voz
}

que una vez compilado aparece así:



Como veis, he modificado la tonalidad (re menor) y la octava de referencia para la primera nota (c''). bes es "si bemol" (para indicar sostenido usaríamos "is", por ejemplo, cis sería "do sostenido"). La cuarta nota es un "si bemol" una octava más baja que la anterior y la nota del segundo compás es un "fa" que dura una redonda (duración 1).

Como hemos señalado antes, gracias al comando \relative, la altura tonal de una nota siempre es relativa a la anterior. Cuando los intervalos entre notas consecutivas son pequeños no indicamos apóstrofe ni coma y la nota irá a su lugar. Cuando son grandes, hay unas reglas para establecer la altura tonal correcta escribiendo apóstrofe, coma, o nada. Estas reglas están explicadas en el manual (alternativamente, se puede usar el viejo método de "prueba y error").

Observamos que, habiendo indicado la tonalidad de re menor, aparece la armadura correspondiente en la impresión, "si bemol". Pero ojo, en las notas del código lilypond debemos indicar siempre la alteración. En este caso, si hubiéramos escrito b en lugar de bes, habría aparecido un becuadro delante de cada nota "si".

Veis que las líneas adicionales, así como las barras de separación de compás, son un poco más gruesas que las líneas del pentagrama pues Lilypond imita la escritura tradicional grabada a mano. Como tantos otros detalles, esto también se puede modificar.

Ahora un poco más complicado, con dos voces (melodía y bajo):

\version "2.14.1"

global = {
\key c \major
\time 4/4
\tempo 4 = 104
}

alto = \relative c'' {
\clef treble
\transposition c
\stemUp
%1
r8 e4 dis8 e d16 c~ c8. c16 |
%2
d8 c d c d c16 a~ a4 |
}

bajo = \relative c' {
\transposition c
\stemDown
%1
c4 g c c |
%2
f, c' f, f |
}

\score {
\new Staff
<<
\new Voice { \global \alto }
\new Voice { \global \bajo }
>>

\layout {}
}

\score {
\unfoldRepeats
\new Staff \with { midiInstrument = "Acoustic Guitar (nylon)" }
<<
\new Voice { \global \alto }
\new Voice { \global \bajo }
>>

\midi {}
}

Que da esta salida (clicar para verla bien):



Como veis, he introducido una nueva variable "global" que irá en todas las voces, con la tonalidad, la signatura de compás y el tempo. En la voz "alto" señalo la clave de sol, indico que todas las plicas vayan hacia arriba por defecto (\stemUp) e indico \transposition c, ya que la guitarra es un instrumento traspuesto por una octava. Es decir, se escribe en clave de sol sin indicaciones adicionales (sin un 8 abajo) pero las notas están realmente en una octava más baja.

En la voz "bajo" no hace falta volver a señalar la clave pero sí la trasposición, y además quiero que las plicas vayan hacia abajo (\stemDown).

Además, duplico el bloque \score; uno para la impresión (\layout {}) y otro para la salida MIDI. En este caso podría haberlo hecho en un solo bloque pero para el MIDI es necesario "desdoblar las repeticiones" (\unfoldRepeats) cuando éstas existen.

Podíamos haber indicado también digitaciones y cuerdas. Por ejemplo, para indicar un "do" negra con puntillo en la quinta cuerda con el tercer dedo, escribiríamos "c4.\4-3". Si no vemos necesario indicar la cuerda pero queremos indicar el dedo, bastará con "c4.-3".

En general, cuanto más común o habitual es lo que queremos indicar, más sencillo es el código. Como veis, lilypond tiene su curva de aprendizaje pero la pendiente, aunque larga (infinita nos parece), es bastante suave.

En la versión 2.14.1 se puede producir la salida en formato svg, además de pdf. Esto es genial, pues gracias a un editor de gráficos vectoriales como inkscape podremos corregir pequeños detalles (como colisiones o desplazamientos excesivos para evitar colisiones) que sólo con lilypond, a veces resulta complicado. Además nos ofrece una forma muy cómoda de personalizar las partituras (dibujitos, fotos, sellos... cualquier cosa imaginable puede ir en el mismo papel con un poco de arte e imaginación).

Instalación de lilypond

Es posible que tu distribución no tenga la última versión disponible en sus repositorios. Por ejemplo, para ubuntu lucid está la 2.12.3, pero en el momento de escribir esto la última estable es la 2.14.1. Por cierto, la 2.12.3 no permite exportar a svg.

Las instrucciones de instalación están en la propia página de descarga:

cd RUTA-DEL-DIRECTORIO-DE-DESCARGA
sh lilypond-2.14.1-SISTEMA-OPERATIVO.sh

Esto instala lilypond al directorio personal. Yo prefiero instalar al sistema, como el resto de programas. Yo hice:

cd Descargas
sudo sh lilypond-2.14.1-1.linux-x86.sh --prefix /usr


Entorno de trabajo


Existen algunos editores gráficos para Lilypond que facilitan la creación de plantillas, entradas de notas, etc. Yo de momento lo estoy usando con un simple editor de texto. A veces uso vim, a veces gedit.

Además, abro una ventanita de terminal (terminator), con dos subventanas; una para generar los ficheros de salida y otra para lanzar el lector de pdf's, evince. Uso Audacious para reproducir el MIDI. Está bien escucharlo para comprobar que el tempo es el correcto y que no hay fallos de tonos o duraciones.


"Compilación del código lilypond"


Para generar el archivo pdf (y el MIDI en su caso), basta con poner en la terminal:

lilypond miarchivo.ly

donde archivo.ly es el archivo de texto con el código de lilypond.

Para obtener la salida a svg, debemos indicar:

lilypond -dbackend=svg miarchivo.ly

Como siempre, podemos ver más opciones con:

lilypond --help

Piezas casi terminadas

Las piezas que incluyo en [1] y en [2] son bastante antiguas. Quizás fueron escritas para vihuela. Si alguien sabe su nombre original, o su autor, por favor indicármelo. Estaban en una cinta de casette de mi hermano hace más de 20 años y las aprendí "de oído" con su ayuda. Ahora estoy intentando transcribirlas.

La estructura del código es muy similar a la que he presentado antes, aunque algo más completa. Incluye un bloque para la cabecera, definición del papel, márgenes, tamaños, distancias... Algún que otro "override" para modificar la impresión por defecto (las notas y algunas líneas me parecen excesivamente gruesas comparadas con algunas partituras impresas que he visto). Es entretenido cambiar estos parámetros o eliminarlos (mejor "comentar" la línea antes que borrarla) y ver cómo queda. Hay una parte de código de "definición de cejillas" que es incomprensible para mí en un 80%. Lo saqué del repositorio de snippets. Es que así quedan mejor, me parece.

Sólo hay que copiar el texto a un archivo, darle un nombre con la extensión .ly y compilarlo con lilypond. O bien, utilizar omet.ca. ¡A ver qué os parecen!

[1]: Anónimo medieval http://paste.ubuntu.com/641524/
[2]: Danza medieval http://paste.ubuntu.com/641525/


Agradecimentos:

Francisco Vila y resto del equipo de desarrollo.
Unai y Juan por animarme a seguir con lilypond.

Otros recursos y direcciones de interés relacionadas con lilypond

Un manual de iniciación escrito en 2005
Proyecto mutopia donde su pueden encontrar un montón de partituras con su correspondiente código lilypond