Lezione 13
DARMS
Programmazione per la Musica | Prof. Luca A. Ludovico
Rappresentazione alfanumerica della musica
Programmazione per la Musica - Prof. Luca A. Ludovico
13. DARMS
Rappresentazione alfanumerica della musica
• In un formato di rappresentazione alfanumerica della
musica, ogni simbolo musicale è rappresentato da un
carattere ASCII o da un’apposita combinazione. L’idea
originaria era poter usare una comune macchina da
scrivere per creare equivalenti informativi delle
partiture.
• Principali vantaggi: motivi storici, affinità al
linguaggio naturale, compattezza, interoperabilità,
interscambiabilità, formati aperti e niente royalties
• Svantaggi: complessità nel supportare tutti i simboli,
lontananza dall’aspetto grafico della musica.
Programmazione per la Musica - Prof. Luca A. Ludovico
13. DARMS
Finalità della lezione
• Durante la lezione ci si concentrerà su un particolare
formato, il DARMS. Però le finalità sono più generali:
1. Conoscere i linguaggi di codifica alfanumerica della musica,
alcuni dei quali sono ancora in uso e dispongono di librerie di
centinaia di migliaia di brani
2. Convertire informazione simbolica da un formato (ad esempio
quello alfanumerico basato su testo semplice) a un altro
formato (ad esempio una rappresentazione interna basata su
classi)
Piè di pagina: spazio libero per eventuale
nome struttura o altro
Esempi
• Descrizione tramite testo semplice (logica)
– ABC http://abcnotation.com/
– GUIDO http://guidolib.sourceforge.net/doc/GUIDOMusic%20Notation%20Format.html
– Plaine & Easie Code
http://www.iaml.info/en/activities/projects/plain_and_easy_code
• Compilazione di testo semplice (grafica)
– LilyPond http://www.lilypond.org/
• XML musicale
• MusicXML http://www.musicxml.com/
• IEEE 1599 http://emipiu.di.unimi.it/
Programmazione per la Musica - Prof. Luca A. Ludovico
13. DARMS
DARMS
(Digital Alternate Representation of Musical Scores)
• Il formato DARMS (primi anni ‘60) rappresenta elementi
della notazione musicale in formato alfanumerico,
attraverso stringhe di testo semplice.
• La sua sintassi è fortemente orientata all’ordine e alla
funzione dei singoli elementi, giungendo in tal modo a
una significativa eliminazione delle ridondanze.
• Codici che non appaiono nella posizione corretta
potrebbero essere mal interpretati o ignorati, a seconda
delle implementazioni.
Programmazione per la Musica - Prof. Luca A. Ludovico
13. DARMS
Approccio
• DARMS è stato originariamente concepito per la
tipografia musicale, e dunque codifica i simboli anziché
il loro significato.
• Per conoscere il significato di un simbolo (ad esempio
l’altezza di una nota) è necessario avere una conoscenza
più globale di altri simboli (ad esempio la chiave,
l’armatura, le alterazioni precedenti, ecc.): è
necessaria una nozione di “stato”
• Per i caratteri alfabetici, DARMS usa sempre maiuscole
Programmazione per la Musica - Prof. Luca A. Ludovico
13. DARMS
Codifica del pitch
• A differenza di molti altri linguaggi, DARMS non
attribuisce una codifica alle altezze, ma piuttosto alla
posizione sul pentagramma
– Si noti che quindi ricostruire l’altezza richiede quanto meno la
conoscenza della chiave
• La codifica avviene tramite numeri interi detti space
codes. Le linee e gli spazi sono numerati da 21 a 29, e i
tagli addizionali vengono computati di conseguenza
Programmazione per la Musica - Prof. Luca A. Ludovico
13. DARMS
Codifica del pitch
Programmazione per la Musica - Prof. Luca A. Ludovico
13. DARMS
Scorciatoie
• Ai fini di migliorare la compattezza nella scrittura, il
linguaggio introduce numerose scorciatoie. Ad esempio:
1. Soppressione del 2 (two suppression): i codici da 20 a 29
possono essere codificati solo con l’ultima cifra. Per
distinguerli rispetto agli space code 0..9 ammessi per i
tagli addizionali, a questi ultimi si premette
obbligatoriamente lo zero: 00..09.
2. Se una nota ha lo stesso space code della precedente, è
possibile ometterlo (specificando solo la sua durata).
Programmazione per la Musica - Prof. Luca A. Ludovico
13. DARMS
Alterazioni e chiavi
• Le alterazioni si codificano aggiungendo se necessario i
caratteri # (diesis), - (bemolle) e * (bequadro) allo space
code. Mettendo in serie più simboli si codificano doppio
diesis, doppio bemolle, ecc.
• Le chiavi si codificano facendo seguire al ! i simboli G, F
o C per le chiavi di Sol, di Fa e di Do rispettivamente.
Per posizionare in modo non standard le chiavi sul
pentagramma si utilizzano gli space code (vedi esempi
più avanti)
Programmazione per la Musica - Prof. Luca A. Ludovico
13. DARMS
Specchietto riassuntivo
Programmazione per la Musica - Prof. Luca A. Ludovico
13. DARMS
Aspetti ritmici
Per i simboli musicali la durata è specificata dai duration
code, che cercano di richiamare i nomi delle durate (in
inglese) dal punto di vista mnemonico:
WWW
WW
W
H
Q
E
Longa
Breve
Intero (Whole)
Metà (Half)
Quarto (Quarter)
Ottavo (Eighth)
S
T
X
Y
Z
ZZ
Sedicesimo
Trentaduesimo
Sessantaquattresimo
Centoventottesimo
…
…
G
Abbellimento (Grace Note)
.
Punto di valore
Programmazione per la Musica - Prof. Luca A. Ludovico
13. DARMS
Aspetti ritmici
• Il duration code normalmente segue uno space
code, oppure l’alterazione se presente, oppure il
carattere R se si tratta di una pausa. I punti di
valore se presenti seguono il duration code.
• Se la durata è la stessa del simbolo precedente,
può essere omessa.
• Esempio:
R H Q E. 
Programmazione per la Musica - Prof. Luca A. Ludovico
13. DARMS
Travi
• Le travi sono codificate dal numero di parentesi
aperte e chiuse. Per queste note non si usa il
duration code, che può essere inferito (ad
eccezione dei gruppi irregolari)
– L’esempio mostra la codifica completa delle note, ossia travi e
pitch (con two suppression)
Programmazione per la Musica - Prof. Luca A. Ludovico
13. DARMS
Segnatura di tempo
• Codifica standard: !Mxxx
Ad esempio: !M3/4 oppure !M5:8
• Notazioni complesse:
Programmazione per la Musica - Prof. Luca A. Ludovico
13. DARMS
Definizione dei gruppi irregolari
• E’ necessario definire e marchiare univocamente un gruppo irregolare
prima di poterlo utilizzare.
• Notazione: !n1dur1id:n2dur2
Significato: n1 note di valore dur1 occupano lo spazio di n2 note di
valore dur2, e al gruppo si attribuisce l’identificativo id
• Esempio: !3H7:2H
Lettura: 3 metà nello spazio di 2 metà, identificativo 7
• Esempio: !5Q3:4
Lettura: 5 quarti nello spazio di 4, identificativo 3
Programmazione per la Musica - Prof. Luca A. Ludovico
13. DARMS
Utilizzo dei gruppi irregolari
• Notazione: !n1dur1id:n2dur2
Significato: n1 note di valore dur1 occupano lo spazio di n2 note di
valore dur2, e al gruppo si attribuisce l’identificativo id
• Una volta definito il gruppo irregolare, lo si attribuisce alle note
aggiungendo l’identificatore del gruppo al duration code
• Esempio: dopo aver definito !5Q3:4,
la notazione Q3 Q.3 E3 RQ3 Q3 corrisponde a
• Esempio: dopo aver definito !3E4:Q,
la notazione (E.4 (S4) E4) corrisponde a
Programmazione per la Musica - Prof. Luca A. Ludovico
13. DARMS
Delimitatori di battuta e legature di valore
• Delimitatori di battuta (assomigliano graficamente al risultato in
partitura):
• Legature di valore: si fa seguire il duration code dalla lettera J, nella
nota che dà avvio alla legatura. La lettera J può seguire direttamente
lo space code se il duration code è stato soppresso.
–
E’ possibile numerare partenza (n, dispari) e arrivo delle legature (n+1, pari)
• Esempio:
Programmazione per la Musica - Prof. Luca A. Ludovico
13. DARMS
ESEMPIO / ESERCIZIO
DarmsParsingExample.java
Si implementi un convertitore da DARMS a strutture dati interne, con la definizione
di molteplici classi per descrivere i diversi simboli musicali.
L’inserimento della stringa contenente il DARMS ha luogo attraverso il passaggio
parametri iniziale.
Programmazione per la Musica - Prof. Luca A. Ludovico
13. DARMS
Scarica

Presentazione del corso