Representació de la música

Idealment, el format d’entrada per a qualsevol sistema de formatat d’alt nivell és una descripció abstracte del contingut. En aquest cas, això seria la música mateixa. Això comporta un problema formidable: com podem definir el que és realment la música? En comptes de provar de trobar una resposta, hem revertit la pregunta. Creem un programa capaç de produir partitures de música, i ajustem el format perquè sigui el més apropiat possible. Quan el format no es pot simplificar més, per definició ens queda amb el contingut en sí mateix. El programa serveix com una definició formal del document de música.

La sintaxi és també la interfície d’usuari per al LilyPond, per tant és senzill d’escriure:

{
  c'4 d'8
}

per crear una nota negra al C del mig (C1) i una corxera a la nota D per sobre de la C mitjana (D1).

[image of music]

A una escala microscòpica, una sintaxi així és fàcil d’usar. A una escala més gran, a la sintaxi també li cal estructura. De quina altra manera podeu escriure peces complexes com ara simfonies i òperes? L’estructura es forma pel concepte d’expressions musicals: combinant petits fragments de música amb fragments més grans, es pot expressar música més complexa. Per exemple

f'4

[image of music]

Es poden construir notes simultànies envoltant-les amb << and >>:

<<c4 d4 e4>>

[image of music]

Aquesta expressió es posa en seqüència envoltant-les amb claus { … }:

{ f4 <<c4 d4 e4>> }

[image of music]

Això de dalt també és una expressió, i per tant es pot combinar un altre cop amb una altra expressió simultània (una blanca) usant <<, \\, i >>:

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

[image of music]

Es poden especificar aquestes estructures recursives de manera neta i formal amb una gramàtica lliure de context. El codi a processar també es pot generar a partir d’aquesta gramàtica. En altres paraules, la sintaxi del LilyPond està definida de manera clara i no ambigua.

Les interfícies d’usuari i la sintaxi és el que la gent més veu i gestiona. Són en part una qüestió de gust, i també l’objecte de molta discussió. Tot i que les discussions sobre els gustos tenen el seu mèrit, no són massa productives. En la visió àmplia del LilyPond la importància de la sintaxi d’entrada és petita: la invenció de una sintaxi neta és fàcil, mentre que l’escriptura de un codi de formatat decent és molt més difícil. Això també s’il·lustra pel nombre de línies del components respectius: l’anàlisi del codi i la representació ocupa menys del 10% del codi font.

Quan es van dissenyar les estructures usades al LilyPond, vam prendre diverses decisions que són evident en altres programes. Considereu la naturalesa jeràrquica de la notació musical:

[image of music]

En aquest cas, hi ha altures agrupades dins d’acords que pertanyen a compassos, que pertanyen a pautes de la partitura. Això recorda a una estructura de capses niuades:

nestedboxes

Desafortunadament l’estructura és rígida perquè està basada en alguns supòsits excessivament restrictius. Això queda clar si considerem un exemple musical més complicat:

[image of music]

En aquest exemple, les pautes comencen i acaben arbitràriament, les veus salten entre pautes i les pautes tenen diferents indicacions de temps. Molts programes de notació musical patirien per reproduir aquest exemple perquè estan construïts amb l’estructura de capses niuades. Amb el Lilypond, en canvi, hem intentat mantenir el format d’entrada i l’estructura el més flexible que sigui possible.


Assaig sobre gravat musical automatizat v2.25.21 (branca de desenvolupament).