Rappresentazione della musica (Saggio sull’incisione musicale automatizzata)

#### Rappresentazione della musica

Idealmente, il formato di input per qualsiasi sistema di formattazione ad alto livello consiste in una descrizione astratta del contenuto da formattare, che nel nostro caso è la musica stessa. La questione solleva un problema formidabile: in che modo possiamo definire che cos’è davvero la musica? Anziché tentare di trovare una risposta, abbiamo rovesciato la domanda. Scriviamo un programma in grado di produrre spartiti e rendiamone il formato il più snello possibile: quando non potremo ridurlo ulteriormente, ci ritroveremo per definizione con il contenuto in sé. Il nostro programma, dunque, serve a definire la forma di un contenuto musicale.

Anche la sintassi è un aspetto dell’interfaccia utente di LilyPond, quindi è semplice da scrivere:

    {
      c'4 d'8
    }

crea un do centrale da un quarto (C1) e un re da un’ottavo immediatamente sopra il do centrale (D1).

A scala microscopica, una sintassi simile si adopera facilmente. A una scala più larga, però, anche la sintassi ha bisogno di una struttura. In quale altro modo, altrimenti, sarebbe possibile scrivere brani complessi come sinfonie e opere liriche? La struttura è formata dal concetto di espressioni musicali: combinando minuscoli frammenti di musica in frammenti più consistenti, possiamo esprimere musica più complessa. Per esempio

>     f'4

Possiamo costruire note simultanee racchiudendole tra `<<` e `>>`:

    <<c4 d4 e4>>

Possiamo mettere in sequenza queste due espressioni racchiudendole tra parentesi graffe `{ … }`:

    { f4 <<c4 d4 e4>> }

Anche quella qui sopra è un’espressione, perciò può essere ulteriormente combinata con un’altra espressione simultanea (una minima, in questo caso): `<<`, `\\`, e `>>`:

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

Strutture ricorsive come quelle appena esaminate possono essere specificate in modo pulito e formale in una grammatica indipendente dal contesto, la quale genera anche il codice di analisi. In altre parole, la sintassi di LilyPond è definita in modo chiaro e privo di ambiguità

Interfacce utente e sintassi sono gli elementi immediatamente visibili agli utenti e quelli con cui essi hanno più a che fare. Un po’ sono una questione di gusto, un po’ l’argomento di molte discussioni: non troppo produttive, però, nonostante qualche pregio ce l’abbiano. Nel quadro più ampio di LilyPond, la sintassi di input non è molto importante: inventare una sintassi pulita è facile; molto più difficile, invece, è scrivere un codice di formattazione decente. Contiamo le righe di codice destinate ai due componenti e troveremo la conferma di quanto abbiamo appena affermato: analisi e rappresentazione occupano meno del 10% del codice sorgente.

Nel progettare le strutture usate in LilyPond, abbiamo preso decisioni diverse da quelle che appaiono in altri programmi. Considerate la natura gerarchica della notazione musicale:

In questo caso, abbiamo altezze raggruppate in accordi che appartengono alle misure, le quali appartengono ai righi. La cosa assomiglia a una struttura ordinata di scatole annidate:

Purtroppo, la struttura è ordinata perché si basa su alcuni presupposti troppo restrittivi, il che diventa evidente considerando un esempio musicale più complesso:

In quest’esempio, i righi si interrompono arbitrariamente, le voci saltano dall’uno all’altro e su ciascun pentagramma c’è un’indicazione di tempo diversa. Molti programmi avrebbero del filo da torcere per riprodurlo, proprio perché costruiti con una struttura a scatole annidate. Con LilyPond, d’altronde, abbiamo cercato di mantenere formato di input e struttura il più possibile flessibili.

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