Accordi¶
Questo documento definisce la sintassi e la semantica degli accordi in neumaRk, inclusi:
- dizionario delle sigle ammesse
- normalizzazione delle varianti
- gestione del basso
- ritmo degli accordi (implicito, esplicito, misto)
- accordi opzionali
- polyaccordi (polychord)
Gli accordi sono contenuti nelle righe C) e possono essere utilizzati per determinare sia l'armonia che il suo aspetto ritmico.
1. Evento accordo¶
Un evento accordo è un’unità armonica che può avere:
- una sigla di accordo
- un basso opzionale, oppure solo un basso
- una durata (implicita o esplicita)
- modificatori di durata
Un evento accordo può anche rappresentare:
- una pausa (
r) - un ribattuto (
!) - un polyaccordo (due sigle sovrapposte verticalmente, vedi §6)
Ogni evento accordo in neumaRk è un’entità ritmica autonoma, con durata implicita o esplicita.
Un accordo può includere un basso esplicito nella forma di slash chord
(es. A/B), oppure consistere esclusivamente di un basso (es. /B).
In entrambi i casi, l’evento è soggetto alle stesse regole ritmiche degli altri accordi.
1.1 Persistenza dell’armonia (cella vuota)¶
Una misura di accordi vuota — priva di sigle, di % e del token NC
(§1.2) — non rappresenta un vuoto armonico: l’armonia della misura
precedente persiste. Il contenuto armonico vigente viene ri-realizzato
sul battere della misura vuota (ri-attacco, con la stessa logica di %),
non sostenuto come una legatura.
La persistenza:
- si propaga su più misure vuote consecutive;
- attraversa i confini di datapack, coerentemente col contesto musicale
persistente (
neumaRk_specification.md); - si interrompe su un evento
NC(§1.2) e riprende solo dal successivo accordo esplicito.
C) C | | F
Le misure 1 e 2 suonano C; la misura 3 suona F. Sopra le misure
persistenti non viene disegnato alcun glifo: il rigo accordi resta
pulito.
Resa sul rigo di note. Se la riga
N)di una misura persistente è vuota, la misura è resa in slash notation (c’è armonia attiva da accompagnare): vedineumaRk_notes_and_durations.md §10 → Slash notation.
1.1.1 Continuazione parziale (. iniziale)¶
Quando una misura inizia con un punto . (prima di qualsiasi sigla), il
punto è una continuazione dell’armonia persistente: ri-attacca l’armonia
vigente (§1.1) solo per il proprio slot, lasciando il resto della misura
agli accordi che seguono. È l’estensione, a livello di slot, della
persistenza di cella vuota. (Distinto dal . che segue un accordo nella
stessa misura, che ne prolunga la durata: vedi §4.)
C) A7 DM | | . GM
Nella misura 3 il primo tempo continua DM — l’armonia attiva, ereditata
dalla misura 1 attraverso la cella vuota della misura 2 — e il secondo tempo
suona GM. In playback equivale a A7 DM | DM | DM GM.
Più punti iniziali (. .) estendono la continuazione su più slot. Se
l’armonia non è attiva (inizio del brano, o dopo NC), un . iniziale resta
muto. Sul rigo accordi il punto di continuazione non disegna alcun glifo.
1.2 Assenza di accordo (NC)¶
Il token NC (due lettere maiuscole, senza punti) dichiara
l’assenza di armonia: interrompe la persistenza (§1.1) e indica che in
quella misura non suona alcun accordo.
- occupa l’intera misura ed è l’unico contenuto della sua cella; non
è miscelabile con sigle o durate (
C NC→ errore E128); - in playback è muto (nessun accordo realizzato);
- è renderizzato sul rigo accordi con il glifo dedicato
N.C.(codepoint riservatoU+EFB2dei font BravuraLS/PetalumaLS); - se la riga
N)corrispondente è vuota, la misura non riceve slash notation ma una pausa (non c’è armonia da accompagnare).
C) C | NC | F
La misura 1 suona C; la misura 2 è muta (con N.C. disegnato); la misura
3 suona F. Dopo un NC, una cella vuota resta muta finché non compare
un nuovo accordo esplicito.
2. Sigla di accordo¶
2.1 Struttura generale¶
La forma generale di una sigla è:
<root><quality>[<extensions>][/<bass>]
Dove:
root∈{A B C D E F G}con alterazioni opzionali#ob(massimo un'alterazione)suffixidentifica il suffisso dell'accordobassopzionale, indica un basso differente dalla root
Esempi:
C Dm GM F#7alt BbM13 C7/E
3. Dizionario degli accordi¶
3.1 Triadi¶
| Input ammessi | Normalizzazione |
|---|---|
| C | C |
| Cm, C- | C- |
| Co, Cdim | C° |
| C+, C5+, Caug | Caug |
| Csus2 | Csus2 |
| Csus4 | Csus4 |
3.2 Accordi maggiori (4 o più suoni)¶
| Input ammessi | Normalizzazione |
|---|---|
| C6 | C6 |
| C69 | C69 |
| CM, CM7, CMaj7, Cmaj7, C7M | CΔ |
| CM9, Cmaj9 | CΔ9 |
| CM13, Cmaj13 | CΔ13 |
| CM#11, CM7#11, Cmaj#11 | CΔ#11 |
| CM9#11 | CΔ9#11 |
| CM13#11 | CΔ13#11 |
| CM+, CM#5, CM7#5, C+M7 | CΔ#5 |
3.3 Accordi minori¶
| Input ammessi | Normalizzazione |
|---|---|
| C-b6, Cmb6 | C-b6 |
| C-6, Cm6, C-69, Cm69 | C-6 |
| C-7, Cm7 | C-7 |
| C-9, Cm9 | C-9 |
| C-11, Cm11 | C-11 |
| C-13, Cm13 | C-13 |
| C-M, CmM, C-M7, CmM7 | C-M |
3.4 Accordi di dominante¶
| Input ammessi | Normalizzazione |
|---|---|
| C7 | C7 |
| C9 | C9 |
| C13 | C13 |
| C7#11, C9#11, C13#11, C7b5 | C7#11 |
| C7b9 | C7b9 |
| C7alt | C7alt |
| C7#5, C+7 | C7#5 |
| C7#9 | C7#9 |
| C13b9 | C13b9 |
| C7sus, C9sus, C13sus | C7sus |
| C7susb9 | C7susb9 |
3.5 Accordi diminuiti e semidiminuiti¶
| Input ammessi | Normalizzazione |
|---|---|
| Co7, Cdim7 | C°7 |
| CoM7, CdimM7, CoM | C°M |
| Cm7b5, Ch | Cø |
3.6 Suffissi fuori dizionario¶
Il dizionario (§3.1–§3.5) è l'insieme dei suffissi riconosciuti. Le grafie della
settima maggiore maj/Maj (Cmaj7, Cmaj9, Cmaj#11, …) e il 7 ridondante
(M7/7M) sono canonicalizzate alla forma M (§3.2) — riconosciute, non
warning. Un suffisso davvero fuori dizionario (es. dom7) non rende il documento non
valido: la sigla viene conservata (root + eventuale basso) ma il suffisso non
ha resa significativa, e il parser emette il warning non-bloccante W103
(unrecognized chord suffix). Si tratta di un degrado best-effort, non di un
errore: il flusso di parsing prosegue.
4. Ritmo degli accordi¶
N.B.¶
Il significato del punto (.) è specifico del contesto delle righe di accordi
e non coincide con quello utilizzato nelle righe di note.
Il carattere punto assume significati differenti a seconda della sua posizione distanziata dall'evento accordo o inserita nel contesto di durata.
4.1 Modalità implicita¶
In assenza di durate esplicite, il ritmo degli accordi è dedotto.
Principio:
- gli eventi accordo in una misura sono contati
- la durata della misura è suddivisa equamente
- il punto (
.) prolunga l’accordo della sua stessa durata
Esempi in 4/4:
| C Dm |
| C . . Dm |
| r C . Dm . D#o . Em |
In modalità implicita il ritmo non viene visualizzato, ma serve per l’allineamento.
4.2 Modalità esplicita¶
La durata di un accordo può essere indicata fra parentesi tonde:
C(4) Dm(8.) G7(8t)
La durata può contenere:
- valore della nota (obbligatorio)
- punti (
.), modalità standard, aggiungono la metà del valore tper terzina (tuplet 3:2)- moltiplicatori (
*n)
Simboli speciali:
r→ pausa!→ ribattuto (ripete la durata, non la sigla)
Per l’ultimo accordo della misura, ^ crea una legatura verso la misura successiva.
Con questa modalità di notazione, il ritmo degli accordi viene notato sopra al pentagramma.
4.3 Modalità mista¶
È possibile combinare modalità implicita ed esplicita nella stessa misura.
- solo le durate esplicite vengono visualizzate
- le altre sono dedotte
C Dm(8^)
La pausa r segue le stesse regole di un accordo, sia per la
deduzione del ritmo sia per la visualizzazione:
r(senza parentesi) è implicita: concorre alla deduzione come qualunque altro evento (la durata della misura, sottratte le durate esplicite, è suddivisa equamente fra gli eventi impliciti, considerando anche i punti.) e non viene disegnata nel rhythm-row;r(...)(con parentesi) è esplicita e viene disegnata come pausa visibile sopra al pentagramma.
Esempio — anticipo di croma su misura altrimenti vuota:
r EbM(8^) | EbM
rende solo l'ottava di anticipo legata a EbM della misura successiva,
senza pause visibili a riempire la prima misura. Equivale, per
posizionamento e ritmo, a quanto già si ottiene con un accordo
implicito al posto di r (Gm EbM(8^)), con la differenza che qui non
c'è alcuna sigla all'inizio della misura.
Limitazione attuale. Quando un evento implicito (accordo o
r) cade dentro a una tuplet la soppressione visiva non è attiva e il rest torna disegnato. Non si tratta di una scelta semantica: è un vincolo del renderer che potrà essere rimosso in futuro senza modifiche alla sintassi.
4.4 Lista compatta di durate¶
Quando lo stesso accordo si protrae su più figure ritmiche, invece di
ripetere ! per ogni continuazione si può usare una lista di durate
separate da virgola dentro le parentesi:
D/Eb(16,8,8,16,16,r16,16,16)
è la forma compatta, equivalente a:
D/Eb(16) !(8) !(8) !(16) !(16) r(16) !(16) !(16)
Regole:
- ogni segmento ammette
valore,valore.(puntato),valore..,valore...,valoret(terzina); - un segmento può iniziare con
rper inserire una pausa interna (es.r16): l'accordo si interrompe per quella durata e poi riprende con il segmento successivo; - il primo segmento non può essere
r(la lista deve aprire con l'accordo):D(r16,8)è un errore; *n(moltiplicatore) e^(legatura) non sono ammessi all'interno dei segmenti, solo nella forma single-rhythm(valore*n)o sul segmento finale del gruppo (vedi sotto);- spazi attorno alle virgole sono tollerati:
D(16, 8, 8)è valido.
Legatura ^ su lista compatta. Il ^ finale lega l'ultimo
segmento del gruppo all'evento successivo, come una normale legatura
di valore sull'ultima nota della misura:
D/Eb(16,8,8,16,16,r16,16,16)^ A
↑
ultimo `16` legato ad `A`
Resa visiva. La sigla D/Eb compare una sola volta sopra il
pentagramma (ancorata al primo segmento). Sopra al pentagramma viene
disegnato il ritmo dell'intero gruppo: la prima figura ha il nome
dell'accordo, le successive sono continuazioni mute (nessuna sigla
ripetuta), eventuali r interni sono pause visibili.
Round-trip. Salvando e ricaricando, la forma compatta viene
preservata: il file .nrk torna identico a quanto scritto.
5. Accordi opzionali¶
Una parentesi tonda aperta avvia un gruppo di accordi opzionali:
(C Dm G7)
Il gruppo può estendersi su più misure, includendo barline interne:
(FM F#-7 | B7 EM)
Le parentesi tonde sono renderizzate visivamente intorno al gruppo. Gli accordi al suo interno mantengono normale semantica ritmica e di allineamento con le altre righe del datapack.
Un gruppo opzionale può portare un comment-label (§7) attaccato alla parentesi di chiusura, senza whitespace intermedio:
(FM F#-7 | B7 EM)[Bill Evans changes]
6. Polyaccordi (polychord)¶
Un polyaccordo è un evento accordo costituito da due sigle sovrapposte, lette simultaneamente: una sigla superiore e una sigla inferiore, separate visivamente da una linea orizzontale.
Il polyaccordo è un evento armonico distinto dallo slash chord (§1):
- slash chord (
A/B) → un unico accordoAcon bassoB - polyaccordo (
[A|B]) → due accordi indipendentiAeBsuonati insieme
6.1 Sintassi¶
Un polyaccordo è racchiuso fra parentesi quadre, con il carattere | come separatore interno:
[<top>|<bottom>]
Dove:
topebottomsono sigle di accordo valide secondo §2 (root, qualità, estensioni, basso opzionale)- le parentesi quadre
[ ]sono obbligatorie - il separatore
|è obbligatorio e compare esattamente una volta - non è ammesso whitespace interno
Esempi validi:
[D|EbM] polyaccordo: D maggiore sopra EbM7
[CM7|F#-7] polyaccordo con sigle estese
[D/F#|EbM] top con basso esplicito (slash chord) sopra accordo semplice
[Am|G](8.) polyaccordo con durata esplicita
Esempi non validi:
[D|EbM|F] tre livelli non ammessi
[|EbM] sigla superiore mancante
[D|] sigla inferiore mancante
[D | EbM] whitespace interno non ammesso
6.2 Resa visiva¶
Il polyaccordo viene visualizzato come due sigle impilate verticalmente, separate da una linea orizzontale:
D
───
EbM
La larghezza orizzontale riservata al polyaccordo è pari alla maggiore fra le due sigle.
6.3 Durata e ritmo¶
Il polyaccordo è un singolo evento accordale ai fini del ritmo. Tutte le regole di §4 si applicano al polyaccordo come a qualunque altro evento:
- durata implicita: il polyaccordo conta come un solo evento nella suddivisione della misura
- durata esplicita: la parentesi tonda segue le parentesi quadre, es.
[D|EbM](4) - ribattuto (
!) e ripetizione (.) operano sull’intero polyaccordo
| [D|EbM] . . [F|G7] | polyaccordo ripetuto tre volte, poi cambio
| [D|EbM](2) [F|G7](2) | due polyaccordi, durata esplicita
6.4 Trasposizione¶
In trasposizione, entrambe le sigle del polyaccordo vengono trasposte indipendentemente secondo le regole del singolo accordo.
6.5 Limiti¶
- numero di livelli: esattamente 2 in neumaRk 0.6; estensioni a N livelli sono fuori specifica
- annidamento: un polyaccordo non può contenere a sua volta un altro polyaccordo
- gruppo opzionale: un polyaccordo può comparire dentro un gruppo
( … )di accordi opzionali (§5)
7. Comment-label¶
Un comment-label è una stringa libera fra parentesi quadre, attaccata in postfix a un evento accordale per annotarlo con testo arbitrario.
7.1 Sintassi¶
Un comment-label è espresso 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.
Il testo è una stringa di caratteri stampabili (spazi inclusi) e
ammette il markup testuale definito in neumaRk_text_markup.md.
Il carattere di chiusura del container (" o ]) non può comparire
letteralmente nel testo: usare l'escape \" o \].
Lo stile di default del comment-label è italic, size ridotta, in
entrambe le forme. Il box grafico è applicato solo nella variante
[…].
Tre scope ammessi, distinti per punto di attacco:
- chord-level — attaccato a un chord event (anche polychord), senza whitespace intermedio:
Eb7alt"tritone" no box (primaria)
Eb7alt[tritone] con box (variante)
[A|EbM]"polychord exp."
- group-level — attaccato alla parentesi di chiusura
)di un gruppo di accordi opzionali (§5):
(FM F#-7 | B7 EM)"Bill Evans changes"
(FM F#-7 | B7 EM)[Bill Evans changes]
-
row-level — come primo token utile della chord-row, preceduto solo dal marker di riga
C)/C+. Due forme equivalenti semanticamente: -
senza barlines — label come unico contenuto della riga (la chord-row non contiene eventi musicali):
C+ "solos changes" C+ [solos changes] -
con barlines — label come primo token dentro le bar della riga, prima di qualunque chord-event:
C+ | "solos changes" | Cm7 | F7 | C+ | [solos changes] | Cm7 | F7 |Equivale alla forma senza barlines per il segmento di label, e permette di coesistere con eventi successivi della stessa row.
7.2 Disambiguazione¶
Il delimitatore […] è condiviso con altri costrutti già definiti
nella spec. La disambiguazione è posizionale:
| Costrutto | Forma riconosciuta |
|---|---|
| Polychord (§6) | [<top>\|<bottom>] — contiene \| interno, nessun whitespace |
Volta (flow §3.2) |
attaccato a barline d'inizio misura: \|[1.] |
End-decorator (flow §4.3) |
attaccato a :\| o barline di fine: [xN]:\|, [D.S.] |
| Comment-label (con box) | attaccato a chord / ) di optional group, o primo token della row, nella forma […] |
Il parser riconosce il polychord per primo (vincola la forma a |
interno), gli altri sono distinti per posizione di attacco.
La forma "…" del comment-label non collide con nessuno di questi
costrutti, perché il delimitatore " non è condiviso. La
disambiguazione del comment-label "…" resta posizionale (attaccato a
chord, ) di gruppo opzionale, o primo token della row).
7.3 Resa visiva¶
- chord-level — italic ridotto sopra al chord (sopra l'eventuale
notazione ritmica); box grafico solo nella variante
[…]. - group-level — italic ridotto sopra al gruppo, allineato a
sinistra; box grafico solo nella variante
[…]. Le parentesi degli optional restano invariate in entrambe le forme. - row-level — italic ridotto a inizio riga, allineato col primo
evento musicale; box grafico solo nella variante
[…].
Lo stile di default (italic, size ridotta) è proprietà del costrutto
e si applica in entrambe le forme. Il container ("…" vs […]) decide
solo la presenza del box (vedi neumaRk_text_markup.md).
7.4 Limiti¶
- al massimo un comment-label per evento (errore
E126se duplicato sullo stesso evento), indipendentemente dalla forma container usata ([…]o"…") - il label è puramente annotativo: non influisce su pitch, durata, ritmo, flusso musicale né trasposizione
- ammesso sia su riga base
C)sia su righe alternativeC+ - i container
[…]e"…"sono single-line: il delimitatore di chiusura deve comparire entro fine riga
8. Regole generali di durata¶
- in caso di conflitto prevale la sintassi esplicita
- la normalizzazione non altera la semantica
- il ritmo implicito è deterministico
Questo documento definisce la semantica armonica e ritmica delle righe di accordi in neumaRk.