Vai al contenuto

Note e Durate

Questo documento definisce la sintassi e la semantica delle note musicali in neumaRk: altezze (pitch), accidenti, durate, prolungamenti e meccanismi di deduzione implicita.

L’obiettivo è fornire una specifica deterministica, ma compatibile con la scrittura rapida in modalità informale.


1. Evento nota

Un evento nota è l’unità musicale atomica nella riga N) di neumaRk.

Ogni evento nota rappresenta un accadimento musicale puntuale nel tempo e contribuisce alla costruzione della sequenza ritmica e melodica del brano.

Un evento nota può specificare, in forma esplicita o implicita:

  • un’altezza (pitch);
  • una durata;
  • modificatori di durata;
  • modificatori di ottava;
  • annotazioni;
  • legature di valore.

Alcuni di questi elementi possono essere omessi, purché possano essere dedotti in modo deterministico dal contesto musicale persistente, secondo le regole definite in questo documento.

Continuità della deduzione

La deduzione di altezze e durate in neumaRk si basa sull’ultimo valore esplicito incontrato nell’intero documento, e non è limitata al singolo rigo di note o al singolo datapack.

All’inizio di un nuovo datapack musicale, il riferimento per la deduzione delle altezze e delle durate è l’ultimo evento nota del datapack precedente, se presente.

In assenza di qualunque riferimento precedente (ad esempio all’inizio del brano), la deduzione utilizza i valori di default definiti dalla specifica, oppure fallisce nei casi in cui non sia possibile una deduzione deterministica.


1.1 Struttura sintattica dell’evento nota

Un evento nota è costituito da una sequenza ordinata di elementi adiacenti, senza spazi intermedi.

L’ordine degli elementi è fisso e deve essere il seguente:

  1. Legatura alla nota precedente (^), opzionale
  2. Altezza (pitch), opzionale perché deducibile
  3. Forzatura di accidente (!), opzionale
    (ammessa solo se l’altezza è esplicitamente indicata)
  4. Modificatori di ottava, opzionali
    (ottave relative tramite ' o ,, oppure ottava assoluta)
  5. Durata, opzionale
  6. durata esplicita (numero potenza di 2, con eventuali punti o moltiplicatori);
  7. indicatori di tuplet;
  8. oppure ? per durata sconosciuta
  9. Annotazioni, opzionali, fra doppi apici
  10. Legatura alla nota successiva (^), opzionale

Tutti gli elementi che compongono un evento nota devono essere adiacenti. La presenza di uno spazio separa eventi nota distinti.

Gruppi fra parentesi tonde (…). Oltre alla durata esplicita in lista (r(…), suffisso) e al cambio di chiave ((@…), prefisso), un evento nota può portare gruppi (…) aggiuntivi che ne specificano la testa o un glissato ornamentale. Il loro significato si determina per contenuto e posizione: vedi la regola unica in §11. Al massimo per nota: una chiave (prefisso), un glissato-in (prefisso), un notehead (suffisso), un glissato-out (suffisso).

Un evento nota può omettere uno o più elementi secondo le regole di deduzione definite in questo documento, ma l’ordine relativo degli elementi non può mai essere alterato.


Eventi nota costituiti da un singolo simbolo

È ammesso un evento nota costituito esclusivamente da un singolo simbolo, senza indicazione esplicita di pitch o durata, purché esista un contesto musicale precedente valido.

I seguenti simboli possono costituire da soli un evento nota valido:

  • Modificatori di ottava (' o ,)
  • Legatura di valore (^)

In tali casi, l’evento nota:

  • eredita il pitch dall’evento nota precedente;
  • eredita la durata dall’evento nota precedente;
  • applica esclusivamente la semantica del simbolo indicato.

In particolare:

  • un evento costituito da ' o , modifica l’ottava del pitch ereditato;
  • un evento costituito da ^ prolunga la nota precedente dello stesso valore.

Un evento nota costituito da un singolo simbolo è valido solo se pitch e durata possono essere dedotti in modo deterministico dal contesto. In assenza di tale contesto (ad esempio all’inizio del brano), l’evento non è valido.


2. Pitch (altezza)

2.1 Sintassi di base

Un pitch è espresso come:

<nota>[alterazione][ottava]

Dove:

  • nota{a b c d e f g}
  • alterazione{#, b} (opzionale, anche doppi)
  • cambio di ottava (opzionale, vedi il prossimo paragrafo)

Esempi:

c   d#   fb   g##

2.2 Ottave relative

Il calcolo dell'ottava viene fatto in base all'altezza della nota precedente, considerando l'intervallo meno ampio da essa.

Esempi:

f4 bb f c

Il carattere ' subito dopo l'altezza della nota, ne sposta l'ottava in senso ascendente. Il carattere , subito dopo l'altezza della nota, ne sposta l'ottava in senso discendente.

Esempi:

f4 bb, f' c'

Sono permessi più segni consecutivi per il cambio di ottava.

Esempi:

a,4 g''' a,,,

All'inizio del brano (o all'inizio di uno stave, in un datapack multi-rigo) l'altezza di orientamento è la nota marcata dalla chiave di partenza: chiavi in G usano un riferimento g, chiavi in F un riferimento f, chiavi in C un riferimento c.

In dettaglio, per le chiavi previste da neumaRk:

Chiave Notazione Riferimento
violino (@G) g4
violino 8va alta (@G8va) g5
violino 8va bassa (@G8vb) g3
soprano (@C1) c4
mezzo-soprano (@C2) c4
contralto (@C3) c4
tenore (@C4) c4
baritono (variante in do) (@C5) c4
baritono (variante in fa) (@F3) f3
basso (@F) o (@F4) f3
basso 8va bassa (@F8) o (@F8vb) f2

Solo la chiave dichiarata all'inizio (del brano o del rigo) determina il riferimento di orientamento. Un eventuale cambio di chiave successivo (vedi §9) modifica la chiave grafica e la resa visiva delle note, ma non altera il riferimento usato per il calcolo delle ottave relative.


2.3 Ottave assolute

È comunque possibile affermare l'ottava assoluta di una nota aggiungendo il carattere @ seguito dal numero dell'ottava (4 per il do centrale) e dal carattere _. La numerazione è quella scientifica: C-1 è il MIDI 0, C9 è il MIDI 120; il range pratico utile è circa -1..9.

Esempi:

c@4_8. g@3_2

La durata è obbligatoria quando si usa @<n>_: il _ funge da separatore tra il numero d'ottava e il valore di durata, ed è privo di significato senza un valore che lo segua. Una scrittura come c@4_ (senza durata) produce errore E008.

'/, restano ammessi come "nudge" sopra l'ottava assoluta — c@4_' equivale a C5, c@4_,8 equivale a C3 da ottavo. Sono sconsigliati perché ridondanti: usare direttamente c@5_ / c@3_8.

Dopo una nota con ottava assoluta, l'inferenza per gli eventi successivi riparte da quella nota come last_pitch standard (intervallo minimo via DIATONIC_MATRIX, come in §2.2).

Ottava assoluta in chord-stack <…>

Dentro un chord-stack, l'ottava assoluta è ammessa soltanto sulla prima pitch, nella forma:

<a@4_ c>4

Vincoli obbligatori:

  1. il _ che chiude @<n>_ sulla prima pitch è obbligatorio (è il separatore richiesto dalla notazione);
  2. la durata dell'accordo dopo > è obbligatoria (es. >4). La durata vive fuori dalle graffe e si riferisce a tutto l'accordo; omettendola si ricade nello stesso errore E008 del caso monofonico, perché internamente il token viene riformulato come a@4_4 (prima pitch + durata) e quel _ resta senza un valore numerico che lo segua.

Le pitch successive del chord-stack (le "extras") accettano per ora solo notazione relativa: la loro ottava è inferita per intervallo minimo a partire dalla pitch primaria (vedi §2.2). Una scrittura come <a@4_ c@5_>4 non è supportata; vedi backlog per estensione futura agli extras.


2.4 Pitch implicito

Se una nota non specifica un pitch, essa erediterà l'ultimo pitch incontrato nel parsing; se nessun pitch è ancora stato visto, si usa il riferimento di orientamento iniziale definito in §2.2 (g4 per chiave di violino, f3 per chiave di basso, c4 per chiavi in do, ecc.).

Esempio:

f4 8 8 g 4 8

2.5 Accidenti forzati

Il carattere ! immediatamente dopo il pitch forza la visualizzazione dell’accidente, anche se sarebbe implicitamente deducibile dalla tonalità.

Esempio:

f#!8

Questo indica che l’accidente # deve essere mostrato graficamente.

2.5.1 Propagazione degli accidenti entro la misura

Un accidente, una volta mostrato, propaga secondo la convenzione standard fino alla fine della misura. La regola è modellata da una matrice [lettera][ottava] che memorizza l'inflessione attiva per ogni coppia lettera+ottava; la matrice è inizializzata dalla tonalità all'inizio di ogni misura (e di ogni rigo).

  • Una nota mostra il proprio simbolo di accidente solo se la sua inflessione differisce dal valore corrente in matrice per quella lettera+ottava (oppure se forzata con !, §2.5); altrimenti nessun simbolo. Quando il simbolo è mostrato, la matrice viene aggiornata.
  • La propagazione è per-ottava: un accidente su c (ottava 4) non influenza c di un'altra ottava (c5). Ogni coppia lettera+ottava è indipendente.
  • Chord-stack (§2.6): ogni pitch dello stack è valutata singolarmente vs la matrice.
  • Voce 2 (N2): ha matrice di propagazione indipendente dalla voce 1.
  • Grace notes (precedono la main): sono valutate vs la matrice ma non la aggiornano; se una grace devia dalla matrice, rompe la propagazione per quella lettera+ottava → le main successive della stessa misura mostrano un accidente esplicito anche se coincidono con la matrice (così il lettore non è ingannato dall'inflessione introdotta dalla grace). Vedi neumaRk_grace_notes.md §8.

2.6 Accordi impilati (chord-stack) <…>

Più altezze suonate insieme si scrivono fra parentesi angolari come un unico evento: <p1 p2 …> seguito da una durata.

N) <c e g>4 .          do maggiore tenuto per due quarti
N) <f c'> f            bicordo + fa al canto

Sintassi interna. Le pitch dentro <…> sono separate da spazio; ognuna usa la sintassi delle note (lettera + accidente + '/, per le ottave). Le ottave si inferiscono a cascata: la prima pitch dalla nota precedente fuori dallo stack, ciascuna successiva dalla precedente dentro lo stack (intervallo minimo, §2.2). L'ottava assoluta è ammessa solo sulla prima pitch (§2.3).

Durata. Sta fuori dalle angolari, dopo > (<c e g>4), e vale per l'intero accordo. Se omessa, l'evento eredita la durata dal contesto come una nota normale (<c e g> .).

Un solo evento. Il chord-stack conta come un evento nell'allineamento count-based con le righe A)/D)/L).

Legatura ^. Vale per l'intero evento; in resa lega i tasti corrispondenti per indice (<c e>4^ <c e>4 → due legature).

Ancoraggio primario (regola normativa). L'evento successivo allo stack inferisce altezza e ottava dalla prima pitch dello stack, non dall'ultima. Internamente lo stack mantiene la cascata; verso l'esterno conta solo la primaria.

N) <c e g>^ <c e g>     due accordi identici (senza la regola il 2º salirebbe d'ottava)
N) <f c'> f             il 2º f resta all'ottava del primo f della triade
N) <f bb, d> f          triade di Sib con fa al canto; f successivo = primo dello stack

Errori e limiti.

  • <> vuoto o <… non chiuso → E001 (token malformato).
  • Stack attaccato alla nota seguente senza spazio (<c e g>e4) → E001; rimedio: aggiungere lo spazio.
  • r (rest) e s (spacer, §14) non sono validi dentro uno stack; attualmente sono ignorati in silenzio (candidato a un diagnostic futuro).

Il > che chiude uno stack appartiene al token: non è mai una stanghetta né un'anacrusi (§7), anche quando è seguito da una pitch (<c e g> e4). Analogamente la | interna a un polychord [top|bottom] è il separatore del polychord, non una stanghetta (neumaRk_chords.md §7.2).


3. Durata

3.1 Durata esplicita

La durata può essere indicata subito dopo il pitch:

c4   d8   e16

I valori ammessi sono quelli standard della notazione musicale (unità con denominatore basato su potenze del 2): 1 => semibreve 2 => minima 4 => semiminima 8 => croma 16 => semicroma 32 => biscroma


3.2 Gruppi irregolari (tuplet)

Una durata può essere seguita dalla lettera t che indica un valore di tuplet. Se non ci sono altri caratteri a completamento, s'intenderà un a tuplet con rapporto 3:2 (terzina). Se la lettera t è seguita da n:n il gruppo irregolare sarà basato su quel rapporto (es 5:3, 7:8). La seconda parte del rapporto può essere omessa nei casi più frequenti: t4 equivale a t4:3 t5 equivale a t5:4 t7 equivale a t7:4

3.2.1 Eredità della ratio nel gruppo

Una nota senza marcatore di tuplet che segue una nota tuplet, mentre il gruppo è ancora aperto (non ha raggiunto un ciclo completo del rapporto), eredita la ratio del gruppo corrente (t_num:t_den). Solo la prima nota del gruppo deve portare il marcatore; le successive lo ereditano fino a chiusura.

N) c8t d e | …      # d, e ereditano la terzina 3:2 aperta da c8t

3.2.2 Gruppo irregolare incompleto a fine misura

Se a fine misura un gruppo irregolare resta aperto (la somma delle sue unità non raggiunge un ciclo completo del rapporto), l'autofill lo completa con pause della stessa unità di tuplet (lo stesso base_dur dell'ultima nota del gruppo), finché il gruppo si chiude o la misura è piena.

  • Se la chiusura riesce, nessun diagnostic (è il caso tipico del round-trip di una terzina completa il cui rest finale era stato omesso).
  • Se l'autofill non riesce a chiudere il gruppo, viene emesso W002 («Tuplet not closed before measure end; auto-filled with 1/64 rests»).

3.3 Durata implicita

Se una nota non specifica una durata, valgono le seguenti regole, in ordine di priorità:

  1. se è l’unica nota della battuta, essa occupa l’intera durata della battuta;
  2. viene usata l’ultima durata esplicita incontrata nel contesto musicale;
  3. se è all’inizio del brano e non esiste alcun riferimento precedente, la durata è considerata sconosciuta (?).

La regola della nota unica che occupa l’intera battuta ha priorità superiore a tutte le altre forme di deduzione, incluse quelle basate sul contesto musicale persistente.

3.3.1 Riconciliazione con la durata della misura (algoritmo normativo)

Una volta attribuita a ogni evento una durata (esplicita o ereditata), la somma della misura può non coincidere con la durata del metro. La riconciliazione segue un algoritmo deterministico. Ogni evento è prima classificato:

  • esplicito — durata scritta nell'evento. In anacrusi (§7) con più di una nota, tutti gli eventi sono trattati come espliciti (l'anacrusi non riempie la misura, quindi non si redistribuisce);
  • sconosciuto — durata ? (§3.4);
  • implicito — durata ereditata dal contesto. Solo gli impliciti in coda (la sequenza di impliciti dopo l'ultimo esplicito) partecipano alla redistribuzione.

Invariante: le durate esplicite non vengono mai modificate dalla riconciliazione. Si toccano solo gli impliciti in coda, gli ?, o si aggiunge una pausa finale.

Caso A — nessun ? (tutte le durate note). Sia S la somma della misura e M la durata del metro:

  1. S ≈ M (entro tolleranza) → la misura è valida, nessuna azione.
  2. S > M (eccesso):
  3. se esistono impliciti in coda e la durata ricalcolata (M − S + somma_impliciti_coda) / numero_impliciti_coda cade su un valore ritmico rappresentabile (potenza di 2 con da 0 a 3 punti) → redistribuzione silenziosa su quegli impliciti. Idioma tipico: c2 d e in 4/4 → d/e ereditano la minima (totale 1½ semibrevi), vengono compressi a semiminime;
  4. altrimenti è un eccesso reale → errore E005 (durata oltre il metro), misura marcata non valida, troncamento delle note finali finché la misura rientra, più un'eventuale pausa finale di riempimento. Copre sia l'eccesso puramente esplicito (4 4 4 4 4 in 4/4) sia l'eccesso implicito non rappresentabile.
  5. S < M (difetto):
  6. se una tuplet è rimasta aperta, viene prima completata (§3.2.2);
  7. poi la durata residua è riempita con una pausa finale. È autofill standard NRK: nessun diagnostic (il vecchio W001 è stato ritirato).

Caso B — misto (? insieme a durate note). La durata residua M − S è ripartita equamente fra i soli eventi ? (vedi §3.4); non si aggiunge pausa finale (gli ? assorbono il residuo).


3.4 Durata sconosciuta (?)

Indicando ? come durata, il valore è considerato indeterminato.

Il valore mancante per completare la misura viene ripartito equamente fra tutte le note con durata ?.

Esempio:

c? d? e?

in una misura di 4/4 individuerà una terzina di minime.


4. Prolungamenti di durata

N.B.

Il significato del punto (.) è specifico del contesto delle righe di note e non coincide con quello utilizzato nelle righe di accordi. Il carattere punto assume significati differenti a seconda della sua posizione adiacente o distanziata all'evento nota.

4.1 Punto adiacente

Un punto immediatamente adiacente al valore prolunga la durata della metà del valore precedente, come nella notazione standard:

g4.

4.2 Punto distanziato

Un punto separato da spazio prolunga la durata dello stesso valore, e può essere ripetuto:

g8 . .
g8 ..

individuerà una durata di tre crome.

Conta solo lo spazio dopo la nota, non fra i punti: entrambe le forme sono equivalenti.


4.3 Moltiplicatori

Un moltiplicatore esplicito può essere indicato come:

g16*5
g16x5

individuerà una durata pari a 5/16. Entrambe le forme sono equivalenti.


5. Ripetizione (!)

Il punto esclamativo (distanziato dall'evento nota) ripete la stessa nota e la stessa durata:

g8 !!!

Equivale a:

g8 g8 g8 g8

È possibile combinare . e !.


6. Legatura di valore (^)

Il simbolo ^ indica una legatura di valore (tie).

  • se adiacente a un evento nota, subito dopo di esso, esso lega con la nota successiva
  • se adiacente a un evento nota, precedendolo, esso lega con la nota precedente
  • se isolato, equivale a un punto (.)
  • se è l’unico segno nella battuta, lega con una nota che riempie la battuta

Accidenti attraverso la legatura. Una nota legata alla precedente segue due regimi rispetto alla propagazione (§2.5.1):

  • continuazione naturale — stesso spelling (es. eb ^eb): nessun simbolo di accidente (la legatura grafica esprime la continuazione), ma la nota semina comunque la matrice, così che note successive con la stessa lettera+ottava ma inflessione diversa mostrino l'accidente esplicito;
  • respelling enarmonico — lettera/inflessione diverse attraverso la legatura (es. eb ^d#): la seconda nota è trattata come una nota nuova e mostra l'accidente, perché è la prima volta che quella lettera compare nella misura.

7. Anacrusi

L’anacrusi (battuta in levare) è introdotta dal segno > come marcatore di barline iniziale della prima misura:

N) > c8 d | e4 e e e | …      # levare di due crome prima della misura 1

Regole:

  • Dove vale. > è anacrusi solo in una riga di note o accordi (C/N). In A) è accento, in D) decrescendo, in M)/L) testo (vedi neumaRk_datapack.md §3.bis per il filtro di classificazione). Il > è riconosciuto come anacrusi solo se seguito da contenuto (pitch / < / barline), così un > finale d'accento non viene confuso.
  • Misura non contata. La misura d'anacrusi non entra nella numerazione delle misure.
  • Durate esplicite. In una misura d'anacrusi con più di una nota, tutti gli eventi sono trattati come espliciti: l'anacrusi è parziale per definizione, quindi non si redistribuisce per riempirla (§3.3.1). Le durate implicite si calcolano solo in base all'ultimo valore esplicito ricevuto.
  • Pausa di completamento all'inizio. Se la misura d'anacrusi è più corta della misura piena, la pausa di completamento è aggiunta in testa (non in coda), così gli eventi si allineano al tempo forte che segue.

7.1 Anacrusi di sezione (a metà brano)

L'anacrusi non è confinata all'inizio del brano: una sezione interna (tipicamente un Refrain dopo un Verse) può aprirsi in levare. In quel caso l'ultima misura della sezione precedente mostra i propri valori fino alle note del levare escluse, e la sezione nuova inizia con l'anacrusi.

Il caso si esprime con due marcatori distinti, uno per lato:

Marcatore Posizione Riga su cui sta Significato
>>> in coda alla misura nessun contenuto dopo misura aperta: la misura non viene completata con la pausa di coda, perché un levare la completa più avanti
> in testa alla misura seguito da contenuto levare entrante: come §7, ma ammesso come barline iniziale del primo datapack di una sezione, non solo del primo datapack del brano
[Verse]
a b | c d | a2 r8 >>>          # ultima misura del verse, lasciata APERTA

>       || [Refrain]           # Markers: `>` tiene vuota la colonna del levare
> g a b || c1 ...              # Notes:   `>` apre il levare g a b, poi battere c1

Regole:

  • > leading vs > trailing. Lo stesso segno è disambiguato dalla posizione, esattamente come §7 distingue l'anacrusi dall'accento: > seguito da contenuto (pitch / < / |) è levare entrante; >>> non seguito da nulla è misura aperta (uscente). Il sigillo di coda è a forma fissa (>>>): il numero di > non ha significato.

  • >>> esplicito, obbligatorio. La misura aperta richiede il marcatore >>>: senza, una misura corta riceve la normale pausa di completamento di coda (autofill standard). NRK non deduce l'apertura dal datapack successivo — ogni datapack resta auto-descrittivo, e il marcatore sopravvive a riordini/spostamenti delle sezioni.

  • >>> è strutturale (propaga al system). La misura aperta >>> è alla stregua di un segno di misura / barline: è una proprietà del system, non della singola voce. È perciò sufficiente su un rigo del datapack per propagarsi a tutti gli altri, esattamente come le barline condivise (§4.1 di neumaRk_datapack.md). Non va replicato voce per voce.

  • > entrante è per-riga. Il levare entrante > è invece per-riga (come §6.4 di neumaRk_voices.md): ogni voce porta il proprio. Sulle righe senza note (Markers, Chords) il > prenota la colonna del levare lasciandola vuota, così l'etichetta di sezione ([Refrain]) e la barra di battere si allineano alla prima misura reale e non sopra l'anacrusi. La grammatica lo consente già perché | conta come contenuto valido dopo > (> || [Refrain]).

  • Numerazione. Il levare di sezione non è contato (come §7). La misura aperta che lo precede è contata normalmente: è una misura reale della sezione precedente, solo più corta.

  • Niente doppia pausa. A differenza dell'anacrusi iniziale (§7), il levare di sezione non riceve la pausa di completamento in testa: è la misura aperta che lo precede a fornire la rincorsa. La coppia (misura aperta + levare) è temporalmente contigua nel playback. Simmetricamente, la misura aperta non riceve la pausa di completamento in coda.

  • Nessuna validazione metrica. (Misura aperta + levare) sono presi così come scritti, anche se non sommano a una misura piena: nessun warning. Resta responsabilità dell'autore.

  • Senza misura aperta. Se la sezione precedente termina su una misura piena (nessun >>>) ma quella nuova apre con >, il > si comporta come un'anacrusi §7 a sé stante (levare parziale con pausa di completamento in testa). >>> è ciò che lega i due lati; in sua assenza non c'è legame.

  • Barre di sezione. NRK non impone la convenzione tipografica "doppia barra prima del levare": le barline (incluse ||) si collocano dove l'autore le scrive. La forma … || c1 con la doppia barra sul battere è legittima.

Composizione con i lyrics. Il gruppo pickup <…> del blocco LYRICS) (neumaRk_lyrics.md §8.4.1) è la controparte testuale di questo levare: le sillabe pickup si appoggiano alle note del levare di sezione qui definito.


8. Annotazioni

Dopo una nota è possibile aggiungere, ad essa adiacente, un'annotazione testuale in due forme container, semanticamente equivalenti, che differiscono solo per la presenza del box grafico:

  • "<testo>" — forma primaria, senza box;
  • [<testo>] — forma variante, con box.
c4"text"          annotation senza box
c4[text]          annotation con box
c4"$F1"           fingering (prefisso riservato, vedi §8.1)

L'annotation ammette il markup testuale definito in neumaRk_text_markup.md. Lo stile di default è plain, size ridotta, in entrambe le forme.

8.1 Prefissi riservati

Se il primo carattere dopo l'apertura del container è $ seguito da una lettera maiuscola riservata, il markup è disabilitato sull'intera annotation: il contenuto è interpretato come direttiva strutturale.

Prefisso Significato
$F fingering
$S string number

Altri prefissi potranno essere definiti in estensioni future.

8.2 Disambiguazione con grace notes

In note-row il delimitatore […] è condiviso con il blocco grace (vedi neumaRk_grace_notes.md). La disambiguazione è posizionale rispetto al pitch adiacente:

Pattern Interpretazione
[…]MAIN (nessuno spazio dopo ]) grace block
PITCH[…] con whitespace o EOT dopo ] annotation con box
PITCH[…]MAIN (nessuno spazio prima né dopo) grace block (priorità)
[…] orfana (no pitch adiacente) W004 grace senza main

Esempi:

c4[text] d4         annotation con box su c4 (spazio dopo `]`)
c4 [d8/^]e4         grace block ancorato a e4
c4[d8/^]e4          grace block ancorato a e4 (priorità grace)
c4 [text] d4        quadre orfane → W004 (grace ignorato)

Per evitare ambiguità in casi limite, è raccomandato usare la forma primaria c4"text" per le annotation: il delimitatore "…" non collide con il blocco grace.


9. Cambio di chiave

La chiave di default è quella di violino. Si può definire un cambio chiave con le notazioni:

  • (@G) per la chiave di violino
  • (@C1) per la chiave di soprano
  • (@C2) per la chiave di mezzo-soprano
  • (@C3) per la chiave di contralto
  • (@C4) per la chiave di tenore
  • (@F3) oppure (@C5) per la chiave di baritono
  • (@F) oppure (@F4) per la chiave di basso
  • (@G8va) per la chiave di violino all'ottava acuta
  • (@G8vb) per la chiave di violino all'ottava bassa
  • (@F8) oppure (@F8vb) per la chiave di basso all'ottava bassa

Il cambio di chiave si mantiene nel brano fino a una nuova definizione.

Disambiguazione con la tonalità. In un decoratore di battuta (…) (vedi neumaRk_datapack.md §7.1) possono comparire sia un cambio di chiave ((@F)) sia un cambio di tonalità ((F), (Dm)). Il prefisso @ identifica la chiave: la direttiva di chiave è riconosciuta prima della tonalità, così (@F) non viene letto come tonalità di Fa.

In un datapack a più righi (vedi neumaRk_datapack.md §4), la chiave dichiarata come primo token di una riga N) si applica al rigo corrispondente. In assenza di direttiva, ciascun rigo eredita l’ultima chiave definita nel proprio contesto.

10. notazioni non standard

Slash notation

Sul pentagramma, al posto delle note, vengono disegnati degli slash (barre oblique) in numero pari ai movimenti della misura. Esistono due modi per generarla:

1. Implicita (default). In una misura con armonia attiva, se la riga di note è vuota (senza neanche pause), la misura viene resa con slash notation. È armonia attiva: un accordo esplicito, un %, oppure un accordo che persiste da una misura precedente (cella d'accordo vuota, vedi neumaRk_chords.md §1.1). Una misura marcata NC (neumaRk_chords.md §1.2) non è armonia attiva: con riga di note vuota riceve una pausa, non slash.

2. Esplicita, con il costrutto /. Il simbolo / nella riga N) è un evento del linguaggio che genera slash notation. Può essere usato da solo per riempire l'intera misura, oppure mescolato a note: la sua durata è implicita (autofill) e occupa tutto lo spazio non coperto dalle altre note della misura.

Esempi (in 4/4):

N) a b c d  |   /        |  a b c d
Tre misure: la prima e la terza con note, quella centrale tutta in slash notation.

N)   a4  /
Una nota da un quarto + slash sui restanti tre movimenti.

N)   /   a8  b
Slash sui primi tre movimenti + due crome finali.

Regole.

  • Al più un / per misura (più d'uno produce errore E006).
  • Lo slash non accetta una durata: la sua durata è sempre quella residua della misura.
  • Quando la regione slash inizia o finisce a metà di un movimento (es. | a8 / |), viene aggiunta una pausa interna per chiudere il movimento parziale, e gli slash disegnati coprono i movimenti interi restanti (in | a8 / | in 4/4: 1 croma + 1 pausa-croma + 3 slash da un quarto).
  • Se dopo l'allineamento ai movimenti non resta spazio per almeno uno slash, il / viene declassato a pausa (errore E007).
  • Una riga composta solo da / (più barlines/punti/spazi) non richiede il prefisso N): viene riconosciuta automaticamente come riga di note. Es. | / | / | / | / | è già una valida riga di note.


Estensioni dell'evento nota (sigillate 2026-05-24)

Le sezioni §11-§13 sono normative e implementate end-to-end (Fasi 3.2-3.3). Stato/dettagli: neumaRk_changelog.md §0.6. Impatto sulla classificazione basso: N) è il default sink della cascata (neumaRk_datapack.md §3.bis), quindi una riga con (x), (u-)…, {…} o R4 cade in Notes senza toccare gli altri predicati ({ } R non sono in nessun charset; R maiuscola è libera, i pitch sono minuscoli).

11. Teste di nota e glissato di nota (la regola delle parentesi (…))

In N) le parentesi tonde sono sovraccariche. Il significato di (…) legato a una nota si determina per contenuto (e posizione prefisso/suffisso):

Contenuto della parentesi Significato Posizione
@… (es. @G) cambio chiave (§9) prefisso/inline
cifre / lista (es. 4, 16,8,8) ritmo esplicito (§3, anche r(…)) suffisso
notehead-token x d t s /, oppure vuoto testa nota / nota fra parentesi (§11.2) suffisso
direzione+trattino u- d- u-- d-- glissato di nota (§11.3) prefisso = in, suffisso = out

Discrimine operativo: primo carattere + presenza del trattino finale. Caso chiave: (d) = diamante (notehead); (d-) = glissato giù (il trattino marca il glissato). Senza il trattino i due collidono.

Una nota può combinare gruppi-parentesi distinti (uno per concetto): (u-)a2(x) = glissato-in-su corto + a2 + testa a croce; a2(x)(d-) = a2 testa a croce + glissato-out-giù.

11.1 Le tre cose "slash" da non confondere

  • / standalone: slash-region ritmica (1 slash = 1 movimento, beat-aligned), vedi §10.
  • (/): testa slash su una nota, all'altezza reale del pitch (§11.2).
  • {…}: notazione ritmica, slash centrata senza pitch (§12).

11.2 Teste di nota (noteheads)

Implementato end-to-end (Fase 3.2). Stato/dettagli: neumaRk_changelog.md §0.6.

Suffisso (…) su una nota, insieme chiuso:

Forma Testa
(x) croce
(d) diamante
(t) triangolo (orientamento unico; varianti su/giù rinviate)
(s) quadrato
(/) slash (testa rhythm all'altezza del pitch)
() (vuote) nota fra parentesi (editoriale / ghost)
N) a2(x) b2(/) c2() d2(d)
  • Chord-stack: <c e g>(x) applica la testa a tutte le pitch dello stack.
  • Un solo notehead per nota.

Overload posizionale: dentro () la lettera t è triangolo; fuori t è il marcatore tuplet (8t, §3.2); in A) è il gruppetto. Disambigua la posizione dentro/fuori parentesi (regola §11). Idem d (fuori da () non è notehead). Per s: dentro () è la testa quadrata; fuori, come token-pitch a sé, è lo spacer (§14).

11.3 Glissato di singola nota (scoop / fall / doit / plop)

Implementato end-to-end (Fase 3.2b). Stato/dettagli: neumaRk_changelog.md §0.6. Co-locabile con i noteheads (a(x)(d-)).

Glissato ornamentale in entrata o uscita da una nota (diverso dal glissato fra due note, che vive in A) come glneumaRk_articulations.md §9).

  • direzione: u (su) / d (giù); lunghezza: - corto, -- lungo;
  • in/out dalla posizione: prefisso = in, suffisso = out;
  • il trattino marca il glissato (lo distingue dal notehead, §11).
Scrittura Significato Nome jazz
(u-)a gliss IN su, corto scoop
(d-)a / (d--)a gliss IN giù plop / drop
a(u-) gliss OUT su, corto doit / lift
a(d-) / a(d--) gliss OUT giù fall (corto / lungo)
N) (u-)a2 a8 a(d--) | (d-)a a(u-)

12. Notazione ritmica {…}

Implementato end-to-end (Fase 3.2c). Stato/dettagli: neumaRk_changelog.md §0.6.

Un gruppo {…} è reso come notazione ritmica: teste slash centrate sul rigo, senza altezza. { e } sono delimitatori nuovi in NRK.

N) a4 r | b4 {8 8 16 16 8 4}
  • Contenuto: solo durate (niente pitch); rest ammessi ({8 8 r8} → glifi di pausa) e spacer ammessi ({8 8 s8} → posizione ritmica saltata, nessuna testa, §14). L'altezza è sempre centrata.
  • Notehead di default = slash. Override col suffisso notehead di §11.2: {8 8 16}(x) = teste a croce.
  • Solo le note dentro le graffe sono rese come rhythm notation; il resto della misura è normale.
  • Tuplet ammessi dentro {…} (es. {8t 8t 8t}); marcatore tuplet non valido → warning W007.

13. Pausa multi-misura (MMR) RN

Implementato end-to-end (Fase 3.3): parse, validazione span-vuoto (W008), playback ×N, glifo MMR dedicato e rinumerazione +N. Stato/dettagli: neumaRk_changelog.md §0.6.

RN (es. R4) rende una pausa multi-misura di N battute: un'unica cella che vale N misure, col conteggio misure che avanza di N. Resa: glifo MMR standard (barra spessa) col numero N sopra. R è maiuscola (libera in N), dove i pitch sono minuscoli). Richiede N ≥ 2 (R1 = pausa di battuta singola, ridondante → pausa normale). (Forma Rx4 scartata: si usa RN, coerente con %N.)

13.1 Quando si usa (condizione di span vuoto)

Le stanghette sono condivise dal sistema: non si collassa un rigo mentre se ne mostra un altro. Quindi un MMR si rende solo se l'intero span è vuoto a livello di sistema — tutte le voci/stave a riposo e accordi vuoti. È utile esattamente in due casi: (a) singolo staff/voice con span vuoto; (b) più staff/voices tutti RN allineati sullo stesso span (incluso il doppio rigo pianistico a riposo).

C) A |    | B          # accordi vuoti sullo span centrale
N) a | R4 | b          # → MMR di 4 battute; conteggio misure +4

Se sullo span c'è qualsiasi contenuto (accordi, note di un'altra voce, marker), RN non è lo strumento: warning e degrado a N pause per-battuta (si scrivono direttamente pause normali).

Corollario: poiché RN vive solo in span uniformemente vuoti, non esiste mai un'altra parte con contenuto da allineare in quello span → nessuna macchineria "espandi-per-allineare".

13.2 RN ≠ collasso in estrazione

Vanno tenuti separati:

  • RN = "voglio un MMR qui, in questa vista" (notazione esplicita, span vuoto).
  • Collasso in estrazione = automatico: estraendo una parte singola da uno score multi-parte, le battute vuote di quella parte collassano in MMR senza notazione speciale (si scrivono pause normali). È feature futura (arriva con l'estrazione parti); RN su span vuoto è invece implementabile da subito. La scelta "nella parte gli accordi si omettono" è un'impostazione di estrazione, non un marcatore MMR.

13.3 Regole di confine (resa)

  • Solo battute intere: se la parte entra a metà battuta, le battute intere vanno in MMR e il mezzo-tempo ai bordi resta pausa normale.
  • Lo span si spezza a: cambio di sistema (line break), doppia stanghetta, ritornello :|/|:, cambio di tonalità/metro/tempo, lettera di prova. Es. R8 con un cambio di tonalità a metà → due MMR.

14. Spacer — pausa invisibile (s)

Implementato end-to-end (2026-05-27): parser, classificazione, serializer, render (GhostNote) e playback. Vedi neumaRk_changelog.md §0.6. Impatto sulla classificazione basso: come per r, una riga di soli s cade nel default sink N) (neumaRk_datapack.md §3.bis, TB1 esteso a s).

Lo spacer è un evento che occupa durata esattamente come una pausa (r), ma non rende alcun glifo: avanza il tempo metrico senza disegnare nulla sul rigo. È mutuato dal costrutto omonimo di LilyPond. Serve a riservare spazio metrico senza segno grafico: allineare per colonna una seconda voce o le sillabe (L)), lasciare "vuoti" pilotati in una misura, posizionare un'unica annotazione su un punto del tempo senza pausa visibile.

14.1 Sintassi

s è un token-pitch speciale (come r): sostituisce l'altezza e accetta tutta la grammatica di durata di una pausa.

Forma Significato
s spacer di durata implicita (eredita dal contesto, §3.3)
s4 s8 s16 durata esplicita (§3.1)
s4. s2.. punto adiacente (§4.1)
s8 . . punto distanziato (§4.2)
s4t s8t5 dentro un tuplet (§3.2)
s16*5 s16x5 moltiplicatore (§4.3)
s !!! ripetizione (§5)
N) c4 s4 e4 s4        # due eventi reali alternati a due spacer da un quarto
N) s2 g2              # primo tempo "vuoto" (invisibile), poi g da minima

14.2 Semantica

Lo spacer è indistinguibile da r per: durata, conteggio della misura, autofill (§3.3.1) e playback (silenzio — evento non udibile). L'unica differenza è la resa grafica.

r (pausa) s (spacer)
Resa glifo di pausa nessun glifo
Durata / metro conta conta (identico)
Playback silenzio silenzio (identico)
Classificazione riga Notes Notes

Misura interamente di spacer. La misura appare otticamente vuota ma il tempo avanza normalmente. Non si applica la pausa-di-misura di riempimento (whole rest) né la slash notation riservata alle misure armoniche vuote (§10): lo spacer è una scelta esplicita di "niente segno".

14.3 Restrizioni

Lo spacer non ha altezza né presenza grafica, quindi non accetta i modificatori che presuppongono una nota o un ancoraggio visivo. In tutti i casi seguenti il modificatore è ignorato con warning W009:

Scrittura Esito
^s / s^ nessuna legatura: lo spacer non lega (§6). Per prolungare, usa la nota reale o r
s"…" / s[…] nessuna annotazione (§8): manca l'ancora visiva
s(x) (u-)s nessun notehead/glissato (§11): riservati alle note reali

Inoltre, per simmetria con r:

  • Chord-stack <…>: s al suo interno non è valido, ignorato in silenzio (§2.6).
  • Grace block: s non ammesso come evento grace → E013 (come r, neumaRk_grace_notes.md).

14.4 Niente forma multi-misura

Non esiste uno spacer multi-misura (SN non è definito): la S maiuscola è il marcatore d'intestazione Style (neumaRk_header.md), e una MMR (§13) è per definizione una pausa visibile. Per saltare N misure in modo invisibile si ripete s misura per misura.


15. Regole di deduzione (riassunto)

  • pitch o durata omessi vengono dedotti dal contesto
  • la deduzione non deve mai produrre ambiguità semantica
  • in caso di conflitto, prevale sempre la sintassi esplicita

Questo documento definisce il livello atomico della notazione musicale in neumaRk.