Architettura flessibile (Saggio sull’incisione musicale automatizzata)

#### Architettura flessibile

Quando abbiamo cominciato, abbiamo scritto LilyPond interamente nel linguaggio di programmazione C++, scolpendo nella pietra le sue funzionalità. Per una serie di ragioni, però, la cosa si è rivelata insoddisfacente.

- Quando LilyPond commette degli errori, gli utenti devono sovrascrivere le decisioni di formattazione, il che significa, in altre parole, che devono poter accedere al motore di formattazione. Quindi, regole e impostazioni non possono essere stabilite da noi durante la composizione, ma devono essere accessibili agli utenti durante l’esecuzione del programma.
- La bontà di un’incisione viene giudicata dagli occhi, e in ultima analisi è questione di gusto. Per quanto esperti noi siamo, gli utenti possono essere in disaccordo con le nostre decisioni personali, perciò devono poter accedere anche alle definizioni dello stile tipografico.
- Infine, gli algoritmi di formattazione vengono rifiniti incessantemente da noi, il che ci richiede di dover contare su un approccio alle regole flessibile, e il modo con cui C++ impone di raggrupparle non può essere applicato facilmente alla formattazione della notazione musicale.

Abbiamo affrontato questi problemi integrando in LilyPond un interprete del linguaggio di programmazione Scheme e riscrivendoci parti del programma. Ora l’architettura di formattazione è costruita intorno alla nozione di oggetti grafici, descritti dalle variabili e dalle funzioni di Scheme, e comprende regole di formattazione, stile tipografico e decisioni di formattazione individuali. L’utente può accedere direttamente alla maggior parte di questi controlli.

Le variabili di Scheme controllano le decisioni in merito all’aspetto della pagina. Per esempio, molti oggetti grafici possidono una variabile di direzione che codifica la scelta tra su e giù (o tra destra e sinistra). Qui sotto vedete due accordi con accenti e arpeggi. Nel primo, tutti gli oggetti grafici hanno direzione giù (o sinistra), nel secondo, hanno direzione su (destra).

Il processo di formattazione di uno spartito consiste nel leggere e scrivere le variabili degli oggetti grafici, alcune delle quali hanno un valore predefinito. Per esempio, lo spessore di molte linee – una caratteristica dello stile tipografico – è una di queste. Siete liberi di modificare questo valore, donando al vostro spartito un’impressione tipografica diversa.

Anche le regole di formattazione sono variabili preimpostate: ogni oggetto possiede variabili contenenti procedure. Sono queste ultime a eseguire la formattazione vera e propria, e sostituendone di diverse, possiamo modificare l’aspetto degli oggetti. Nell’esempio seguente, la regola che governa quali oggetti sono adoperati per produrre il simbolo della testa di nota è cambiata nel corso del frammento.

#### Saggio sull’incisione musicale automatizzata v2.26.0 (stable-branch).

- 1 Incisione musicale
  - 1.1 Storia di LilyPond
  - 1.2 Incisione in dettaglio
    - Font musicali
    - Spaziatura ottica
    - Tagli addizionali
    - Dimensionamento ottico
    - Perché lavorare così duramente?
  - 1.3 Incisione automatizzata
    - Concorsi di bellezza
    - Miglioramento per analisi comparativa
    - Mettere le cose a posto
  - 1.4 Costruzione del software
    - Rappresentazione della musica
    - Quali simboli incidere?
    - Architettura flessibile
  - 1.5 Mettere LilyPond al lavoro
  - 1.6 Esempi di incisione (BWV 861)
- 2 Bibliografia
  - 2.1 Bibliografia breve
  - 2.2 Bibliografia lunga
- Appendix A GNU Free Documentation License
- Appendix B Indice