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