Representación musical (Ensayo sobre grabado musical automatizado)

#### Representación musical

Idealmente, el formato de entrada de cualquier sistema de formateado de alto nivel es una descripción abstracta del contenido. En este caso, eso sería la propia música. Ello presenta un enorme problema: ¿cómo podemos definir qué es la música realmente? En lugar de buscar una respuesta, le hemos dado la vuelta a la pregunta. Escribimos un programa capaz de producir música impresa, y luego ajustamos el formato de forma que sea lo más escueto posible. Cuando el formato ya no se puede recortar más, por definición nos estamos quedando con el propio contenido. Nuestro programa sirve como una definición formal de un documento musical.

La sintaxis es también el interfaz de usuario de LilyPond, de aquí que sea tan fácil teclear:

    {
      c'4 d'8
    }

para crear un Do central negra (Do 4) y un Re por encima del Do central, corchea (Re 4).

A una escala microscópica, esta sintaxis es fácil de usar. A una escala mayor, la sintaxis necesita también una estructura. ¿De qué otra forma podríamos introducir piezas complejas como sinfonías u óperas? La estructura se forma por medio del concepto de expresiones musicales: combinando pequeños fragmentos de música dentro de otros más grandes, se puede expresar una música más compleja. Por ejemplo:

>     f'4

Las notas simultáneas se pueden construir encerrándolas dentro de `<<` y `>>`:

    <<c4 d4 e4>>

La expresión se pone en secuencia encerrándola dentro de llaves `{ … }`:

    { f4 <<c4 d4 e4>> }

Esto es también una expresión, y así se puede combinar de nuevo con otra expresión simultánea (una blanca) utilizando `<<`, `\\` y `>>`:

    << g2 \\ { f4 <<c4 d4 e4>> } >>

Tales estructuras recursivas se pueden especificar limpia y formalmente dentro de una gramática independiente del contexto. El código del analizador sintáctico también se genera a partir de esta gramática. Dicho de otra forma, la sintaxis de LilyPond está definida claramente y sin ambigüedades.

Los interfaces de usuario y la sintaxis son aquello que la gente ve y con lo que trata más frecuentemente. Son, en parte, cuestión de gusto, y también objeto de mucha discusión. Aunque las discusiones sobre el gusto tienen su mérito, no son muy productivas. Bajo el punto de vista más amplio de LilyPond, la importancia de la sintaxis de la entrada es pequeña: inventarse una sintaxis limpia es fácil, pero escribir un código de formatead que sea decente es mucho más difícil. Esto queda ilustrado por la cantidad de líneas que están dedicadas a los componentes respectivos: el análisis sintáctico y la representación se llevan menos del 10% del código fuente.

Cuando estábamos diseñando las estructuras utilizadas dentro de LilyPond, tomamos algunas decisiones de forma diferente a como es aparente en otros programas. Consideremos la naturaleza jerárquica de la notación musical:

En este caso, hay notas agrupadas en acordes que están dentro de compases, que pertenecen a pentagramas. Esto se parece a una estructura ordenada de cajas anidadas unas dentro de otras:

Desgraciadamente la estructura resulta ordenada porque está basada en algunas suposiciones excesivamente restrictivas. Este extremo se hace aparente si tenemos en cuenta un ejemplo musical más complejo:

En este ejemplo, los pentagramas parecen iniciarse y terminar a capricho, las voces saltan de un pentagrama a otro, y las pautas tienen tipos de compás diferentes. Muchos programas se las ven y se las desean para reproducir este ejemplo porque están construidos sobre la estructura de las cajas anidadas. Con LilyPond, por el contrario, hemos tratado de conservar el formato del código de entrada y la estructura lo más flexibles posible.

#### Ensayo sobre grabado musical automatizado v2.26.0 (stable-branch).

- 1 Grabado musical
  - 1.1 Historia de LilyPond
  - 1.2 Detalles del grabado
    - Fuentes tipográficas de música
    - Espaciado óptico
    - Líneas adicionales
    - Escalado óptico
    - ¿Para qué tanto esfuerzo?
  - 1.3 Grabado automatizado
    - Concursos de belleza
    - Mejoras por medio de pruebas
    - Hacer las cosas bien
  - 1.4 Construcción del software
    - Representación musical
    - ¿Qué símbolos grabar?
    - Arquitectura flexible
  - 1.5 Poner a LilyPond a trabajar
  - 1.6 Ejemplos de partituras (BWV 861)
- 2 Lista de referencias bibliográficas
  - 2.1 Lista bibliográfica resumida
  - 2.2 Lista bibliográfica ampliada
- Appendix A GNU Free Documentation License
- Appendix B Índice