Arquitectura flexible (Ensayo sobre grabado musical automatizado)

#### Arquitectura flexible

Al principio escribimos el programa LilyPond completamente en el lenguaje de programación C++; la funcionalidad del programa estaba grabada en piedra por parte de los desarrolladores. Se comprobó que esto no era satisfactorio por unas cuantas razones:

- Cuando LilyPond comete errores, los usuarios necesitan sobreescribir las decisiones de formateo. Por tanto, el usuario debe tener acceso al motor de formateo. De aquí que las reglas y los ajustes predeterminados no se puedan fijar por nuestra parte en el tiempo de compilación sino que deben estar accesibles para los usuarios en el tiempo de ejecución.
- El grabado musical es cuestión de juicio visual, y por tanto está en el terreno del buen gusto. Por más entendidos que pretendamos ser, nuestros usuarios siempre podrían discrepar de nuestras decisiones personales. Por ello, las definiciones del estilo tipográfico debe también ser accesible para el usuario.
- Finalmente, nos encontramos refinando continuamente los algoritmos de formateo, por lo que necesitamos un enfoque flexible para las reglas. El lenguaje C++ fuerza un cierto método de agrupación de las reglas que no está preparado para aplicarse al formateo de la notación musical.

Estos programas se han solucionado integrando un intérprete para el lenguaje de programación Scheme y reescribiendo partes de LilyPond en Scheme. La arquitectura de formateo actual está construida alrededor de la noción de objetos gráficos, descritos por medio de variables y funciones de Scheme. Esta arquitectura coordina las reglas de formateo, el estilo tipográfico y las decisiones de formateo individuales. El usuario tiene acceso directo a la mayoría de esos controles.

Las variables de Scheme controlan las decisiones de disposición en la página. Por ejemplo, muchos objetos gráficos tienen una variable de dirección que codifica la elección entre arriba y abajo (o izquierda y derecha). A continuación vemos dos acordes, con acentos y símbolos de arpegio. En el primer acorde, los objetos gráficos tienen todas las direcciones hacia abajo (o hacia la izquierda). El segundo acorde tiene todas las direcciones hacia arriba (o hacia la derecha).

El proceso de dar formato a una partitura comprende la lectura y escritura de las variables de los objetos gráficos. Algunas variables tienen un valor preestablecido. Por ejemplo, el grosor de muchas líneas (una característica del estilo tipográfico) es una variable con un valor preestablecido. Somos libres de alterar este valor, dando a nuestra partitura una impresión tipográfica distinta.

Las reglas de formateado también son variables preestablecidas: cada objeto tiene variables que contienen procedimientos. Estos procedimientos realizan el formateo propiamente dicho, y mediante la sustitución de unos u otros, podemos modificar el aspecto de los objetos. En el ejemplo siguiente, la regla que gobierna qué objetos de cabeza se utilizan para producir el símbolo de la cabeza, se cambia a lo largo del fragmento musical.

#### 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