Vai al contenuto

Grace notes (appoggiature e acciaccature)

Questo documento definisce la sintassi e la semantica delle grace notes in neumaRk: appoggiature e acciaccature, con relativi modificatori grafici e regole di interazione con il contesto musicale.

Le grace notes sono eventi musicali ornamentali: vengono eseguite in prossimità di una nota reale (la main) ma non concorrono al computo ritmico della misura.


1. Definizione

Una grace note è una nota ornamentale racchiusa tra parentesi quadre [ … ] e ancorata, in posizione adiacente a sinistra, a una nota reale detta main.

Una grace note:

  • non occupa tempo: la sua durata è grafica, non ritmica, e non contribuisce al riempimento della misura;
  • ha durata 8 (croma) di default se omessa: la durata esplicita è facoltativa e, in sua assenza, l’evento assume il valore 8 (vedi §3);
  • non aggiorna il contesto musicale persistente: né la pitch né la durata di una grace note vengono memorizzate come riferimento per la deduzione degli eventi successivi (vedi neumaRk_specification.md §2.1).

2. Sintassi

Un blocco grace è costituito da una parentesi quadra aperta, da una sequenza di eventi grace separati da spazi, e da una parentesi quadra chiusa, immediatamente seguita — senza spazi — dalla nota main.

[ <grace> [<grace> …] ] <main>

2.1 Evento grace

Un evento grace è formato da:

  1. Pitch — obbligatorio, con la stessa sintassi delle note ordinarie (vedi neumaRk_notes_and_durations.md §2). È ammessa anche la forma di chord-stack <…>. L'inferenza dell'ottava ha per riferimento la pitch della main a cui il blocco è ancorato (la nota reale che segue ]), non il contesto musicale che precede il blocco — vedi §7.1.
  2. Durata — sempre opzionale. Se omessa sul primo evento grace del blocco assume il default 8 (croma); sugli eventi successivi, se omessa, eredita dal valore precedentemente esplicitato nel blocco (vedi §3).
  3. Modificatori / e/o ^ — opzionali, ammessi solo sull’ultimo evento grace del blocco (vedi §4).

Esempi di eventi grace validi:

f#8        g16        <c e g>8       a16/^       g           f#/^

Negli ultimi due esempi la durata è omessa: viene ereditata dal valore esplicito della grace precedente nel blocco. Se è il primo evento del blocco a omettere la durata, assume il default 8 (vedi §3.1).

Non sono ammessi all’interno di un evento grace:

  • pause (rest) e spaziatori (spacer s) — errore E013;
  • annotazioni "…" e gruppi fra parentesi (…) — errore E009;
  • modificatori ! di forzatura accidente (f#!8), anche su un'altezza di un chord-stack ([<c e!>8]) — errore E004 (E004.grace_force_accidental); il ? di cortesia nello stack ([<c e?>8]) dà E009;
  • gruppi irregolari (t) — errore E009 (§3);
  • prolungamenti distanziati (. separato, ^ distanziato, ripetizione !): un token che non è un'altezza dà E004.

L'evento non ammesso si scarta; il resto del blocco e la main restano.

2.2 Adiacenza con la main

La parentesi quadra di chiusura ] deve essere immediatamente adiacente alla nota main, senza spazi intermedi.

[f#8/^]c4        ✓
[f#8/^] c4       ✗  (spazio tra blocco grace e main)

In assenza di adiacenza, il blocco grace non viene riconosciuto come tale e produce W003 (vedi §10).

A sinistra la [ può invece essere incollata alla nota che precede: c4[d8/^]e4 sono due eventi, c4 e la main e4 con la sua grace. Una ] seguita subito da una nota chiude sempre un blocco grace, non un'annotazione (neumaRk_notes_and_durations.md §8.2).


3. Durate ammesse e ereditarietà

I valori di durata ammessi per una grace note sono esclusivamente:

4    8    16

Non sono ammessi:

  • prolungamenti adiacenti (.);
  • moltiplicatori (* o x);
  • gruppi irregolari (t);
  • durata indeterminata (?).

Una grace note con durata non conforme produce E009 e si scarta.

3.1 Default e ereditarietà locale al blocco

La durata del primo evento grace del blocco è opzionale: se omessa, assume il default 8 (croma, valore tipico dell’acciaccatura). Gli eventi grace successivi, se omettono la cifra di durata, ereditano il valore esplicitato per ultimo all’interno dello stesso blocco (in assenza di qualunque durata esplicita, ereditano il default 8).

[f#8 g a]c4         ≡  [f#8 g8 a8]c4
[f#16 g8 a]c4       ≡  [f#16 g8 a8]c4       (a eredita 8, non 16)
[f# g8]c4           ≡  [f#8 g8]c4           (primo evento: default 8)
[f# g a]c4          ≡  [f#8 g8 a8]c4        (tutto al default 8)

L’ereditarietà è strettamente locale al blocco: non interagisce con il contesto musicale persistente (vedi §7) né attraversa il ]. Due blocchi grace consecutivi non condividono il valore: ognuno riparte dal default 8 finché non compare una durata esplicita.

Come per le note ordinarie, il serializer scrive le durate grace per esteso nelle forme esplicite (default ed extend): [f#] → [f#8]. Solo nella forma compatta la cifra viene omessa quando coincide col valore che la regola implicita ricostruirebbe (default 8 sul primo evento, valore corrente del blocco sui successivi), così [f#8] → [f#] e [d8 e8 f8] → [d e f]. Entrambe le direzioni sono round-trip safe.


4. Modificatori grafici

All’interno della parentesi quadra sono ammessi due modificatori, posti in coda all’ultimo evento grace del blocco, in qualunque ordine:

  • / — barrata: la grace viene resa graficamente con una barra obliqua sulla cediglia (acciaccatura);
  • ^ — legata: la grace è collegata alla main da una legatura grafica (slur). Riusa il simbolo ^ della legatura di valore (vedi neumaRk_notes_and_durations.md §6), in contesto grace. Con più grace nel blocco la legatura parte dalla prima grace e scavalca il gruppo fino alla main (resa).

I due modificatori sono combinabili: /^ o ^/ indicano una grace barrata e legata alla main, forma tipica dell’acciaccatura classica.

4.1 Vincolo di posizione dei modificatori

I modificatori / e ^ sono ammessi soltanto sull’ultimo evento grace del blocco. La loro presenza su un evento grace non finale produce E010.

[f#8 g8 a16/^]c        ✓
[f#8/]c                ✓
[f#8/ g8]c             ✗  (modificatore su grace non finale → E010)
[f#8/ g8/^]c           ✗  (idem)

5. Cardinalità del blocco

Un blocco grace deve contenere almeno un evento grace e al massimo quattro.

  • Blocco vuoto [] → E011.
  • Blocco con più di quattro eventi grace → E012.
[f#8]c                       ✓  (1 grace)
[f#8 g8 a16 b16/^]c          ✓  (4 grace, ultima con modificatori)
[f#8 g8 a16 b16 c16/^]c      ✗  (5 grace → E012)

6. Ancoraggio alla nota main

Il blocco grace deve essere seguito, in posizione adiacente, da una nota reale (pitch o chord-stack), che ne costituisce la main.

La nota main:

  • è una nota ordinaria a tutti gli effetti, soggetta alle normali regole di deduzione di pitch e durata (vedi neumaRk_notes_and_durations.md);
  • è l’evento ritmicamente rilevante al quale la grace è graficamente e musicalmente subordinata.

6.1 Blocco grace senza main

Un blocco grace non seguito da una nota main valida (es. ultimo evento della misura o del datapack, oppure seguito da pausa, spacer, barlinea, marker strutturale) viene ignorato dal parser e produce W004.

| c4 d4 e4 [f#8/^] |       → grace ignorata, W004
| c4 d4 e4 [f#8/^]r |      → grace ignorata, W004 (main non può essere rest)
| c4 d4 e4 [f#8/^] r |     → grace ignorata, W003 (spazio fra `]` e la pausa)

7. Effetto sul contesto musicale

Una grace note non altera il contesto musicale persistente:

  • la pitch di una grace non viene memorizzata come ultima pitch esplicita ai fini della deduzione delle pitch successive;
  • la durata di una grace non viene memorizzata come ultima durata esplicita ai fini della deduzione delle durate successive.

Esempio (in 4/4):

c4 [f#8/^]c [f#8/^]c8 c4.
  • c4 — main esplicita, contesto: pitch=c, durata=4.
  • [f#8/^]c — grace f#8 ignorata ai fini del contesto; main c eredita durata 4 (la durata dell'ultimo evento scritto, la grace non conta).
  • [f#8/^]c8 — main c8 aggiorna il contesto a durata=8.
  • c4. — main aggiorna durata=4. (puntato).

Il contesto al termine della sequenza è coerente come se le grace non fossero mai state scritte.

7.1 Inferenza dell’ottava delle grace

La pitch di una grace deduce l’ottava rispetto alla pitch della main a cui il blocco è ancorato (la nota reale che segue ]), non rispetto al contesto musicale che precede il blocco. Le grace sono ornamentazioni della main e l’ottava più vicina è quella che le rende adiacenti al loro target visivo.

Esempio (treble, 4/4):

N) a [f8/^]g'
  • a — main, pitch a4.
  • g' — main della grace, pitch g5 (intervallo minimo da a4 porterebbe a g4; il modificatore ' aggiunge +1 ottava).
  • [f8/^] — grace f con riferimento g5: la f più vicina a g5 è f5 (un tono sotto), non f4 (che disterebbe una nona). Risultato: grace f5 → main g5, intervallo di seconda maggiore discendente.

All’interno del blocco grace, le ottave dei singoli eventi grace si calcolano in catena: il primo evento grace è ottava-inferito dalla main; i successivi sono ottava-inferiti dall’evento grace precedente nello stesso blocco (inferenza monodica standard intra-blocco). La chain del contesto della linea, invece, non attraversa il blocco: l’evento subito dopo la main eredita il contesto della main, non delle grace (vedi §7).


8. Rendering degli accidenti

Per la resa grafica degli accidenti, una grace note non aggiorna lo stato di propagazione della misura, ma lo influenza. Tre regole.

8.1 Accidente sulla grace

L’accidente viene disegnato sulla grace se e soltanto se la pitch della grace devia dalla matrice corrente della misura (cioè dalla key signature aggiornata dagli accidenti già occorsi nella misura prima del blocco grace).

In altre parole, il criterio è lo stesso che si applica alle main: la grace mostra un accidente quando risulta "inatteso" rispetto allo stato visivo corrente.

Esempi (key signature: G major, F# in chiave; 4/4):

Contesto a sinistra Input grace Resa grafica della grace
(misura nuova) [f#8/^]c nessun accidente (F# coincide con chiave)
f4 (F♮) [f#8/^]g # (matrix=’f’→♮, la grace ne devia)
(misura nuova) [f8/^]c ♮ (F♮ devia da F# in chiave)
(misura nuova) [g8/^]c nessun accidente (G♮ coincide con chiave)
g#4 [g#8/^]c nessun accidente (matrix=’g’→# dopo g#4)

8.2 Rottura della propagazione dopo la grace

Una grace che devia dalla matrice corrente (cioè una grace che ha fatto disegnare un accidente per §8.1) rompe la propagazione degli accidenti per le main successive della misura aventi la stessa pitch-letter e ottava.

Concretamente, dopo una grace di questo tipo, ogni main successiva con stessa (lettera, ottava) deve riportare a video un accidente esplicito (#, b o ♮), anche se la matrice corrente coincide con la pitch.

Esempio (key signature: G major; misura in 4/4):

f4 [f#8/^]g4 f4

Resa grafica:

Evento matrix[‘f’][4] prima Accidente a video
f4 (F♮) 1 (F# da key sig) ♮ (devia dalla matrice). matrix → 0
[f#8/^]g4 0 (dopo f4) # sulla grace (devia, §8.1). matrix → 0
f4 (F♮) 0 ♮ (precauzionale, propagazione rotta)

Nota: la grace non aggiorna la matrice. La main f4 finale legge ancora matrix[‘f’][4] = 0 (lo stato lasciato dal primo f4); senza §8.2 non mostrerebbe alcun accidente. Il ♮ precauzionale è imposto dal "broken propagation" registrato dalla grace.

8.3 Indipendenza interna al blocco

All’interno di un blocco grace, ciascun evento grace è isolato rispetto agli altri ai fini del rendering: poiché nessuna grace aggiorna la matrice (§8.1 / regola implicita), tutte le grace del blocco vedono la stessa matrice di partenza, valutate indipendentemente l’una dall’altra.

Nota. Le regole di §8 riguardano esclusivamente la resa grafica. L’input neumaRk usa sempre pitch assolute: f denota F♮, f# denota F#, indipendentemente da contesto e key signature.


9. Esempi riassuntivi

Acciaccatura classica (barrata, legata):

N) c4 [f#8/^]c [f#8/^]c8 c4.

Appoggiatura semplice (non barrata, non legata):

N) c4 [f#8]c4

Appoggiatura legata, non barrata:

N) c4 [f#8^]c4

Cluster di grace (legatura sull’ultimo):

N) c4 [d8 e8 f8/^]g4

Grace con accordo:

N) c4 [<c e g>8/^]c4

10. Errori e warning

Codice Tipo Condizione
E004 error Evento grace che non è un'altezza (. o ! staccati), o con la forzatura d'accidente ! (f#!8, <c e!>8; E004.grace_force_accidental): evento scartato · pausa, spacer o non-altezza dentro un chord-stack grace ([<c r>8]; E004.stack_rest, E004.stack_pitch_invalid): elemento scartato
E009 error Durata grace esplicita non conforme (ammesse soltanto 4, 8, 16), o elementi non ammessi dopo l'altezza (?, t, ., "…", (…)): evento scartato. Omettere la durata è ammesso: il primo evento assume il default 8
E010 error Modificatore / o ^ su evento grace non finale del blocco
E011 error Blocco grace vuoto []
E012 error Blocco grace con più di quattro eventi grace
E013 error Pause e spaziatori non ammessi come evento grace (es. [r8]c, [s8]c)
E015 error Blocco grace […] non chiuso
E019 error Evento grace privo di pitch o durata
E020 error Chord-stack grace non chiuso (<…)
E021 error Chord-stack grace vuoto <>
W003 warning Blocco grace non adiacente a una nota main (spazio tra ] e main)
W004 warning Blocco grace senza nota main a destra, o seguito da una pausa o da uno spacer (W004.rest_main); il blocco viene ignorato

Ulteriori condizioni di errore generali (pitch non valida, durata malformata, parentesi quadre non bilanciate, ecc.) ricadono sulle diagnostiche già definite per le note ordinarie.


11. Limitazioni note

In questa versione della specifica, le grace notes:

  • non ammettono articolazioni, dinamiche né annotazioni;
  • non ammettono pause (rest) né spaziatori (spacer s) come eventi grace;
  • non sono valide nelle righe di accordi (C)), né nelle righe di chord-rhythm: il costrutto [ … ] è riservato alle righe N).

Estensioni a questi vincoli saranno oggetto di versioni successive.