1 / 29

GrooveSlang

Università degli studi di Bologna Facoltà di ingegneria. GrooveSlang. Un linguaggio per la creazione e riproduzione di pattern musicali. Progetto per l’esame di Linguaggi e modelli computazionali L-S. Studente: Altobelli Andrea. Docente: Enrico Denti. Anno Accademico 2012/2013. Scenario.

jadzia
Download Presentation

GrooveSlang

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Università degli studi di Bologna Facoltà di ingegneria GrooveSlang Un linguaggio per la creazione e riproduzione di pattern musicali Progetto per l’esame di Linguaggi e modelli computazionali L-S Studente: Altobelli Andrea Docente: Enrico Denti Anno Accademico 2012/2013

  2. Scenario • Digital Audio Workstation • Hw o Sw • Editing, riproduzione e recording di audio digitale • Standard MIDI • Eventmessages • Strumenti software • Controllers Linguaggi e modelli computazionali LS - A.A. 2012/2013

  3. Obiettivi • Sviluppare un linguaggio che permetta • La creazione e la manipolazione di pattern musicali in modo facile ed intuitivo • L’associazione dei pattern agli strumenti software MIDI destinati a riprodurli • Il controllo dei parametri MIDI associati al brano e agli strumenti software Linguaggi e modelli computazionali LS - A.A. 2012/2013

  4. Esempio.gsl track myTrack; meter 4/4; tempo 140; instrument GUITAR { volume = 16000; portamento = 127; } myGuitar; instrument ACOUSTIC_BASS bass; pattern patt1 = "E5q F5q G5h"; pattern patt2 = ( "A3o C" + patt1 ) * 2 + patt1 * 5; pattern patt3 =patt2; play patt3 with guitar1; play patt2 with bass; • Intestazione: • Nome traccia • Metrica • Tempo • Definizione strumento sw: • Tipo di strumento • Parametri (opzionali) • Identificativo Definizione pattern tramite espressioni.. Associazione dei pattern agli strumenti definiti Linguaggi e modelli computazionali LS - A.A. 2012/2013

  5. Esempio.gsl • Come stringa di note: • "A3" = "La" 3° ottava • "o" = durata 1/64 Valore di un pattern precedentemente definito track myTrack; meter 4/4; tempo 140; instrument GUITAR { volume = 16000; portamento = 127; } myGuitar; instrument ACOUSTIC_BASS bass; pattern patt1 = "E5q F5q G5h"; pattern patt2 = ( "A3o C" + patt1 ) * 2 + patt1 * 5; pattern patt3 =patt2; play patt3 with guitar1; play patt2 with bass; pattern patt2 = ( "A3o C" + patt1 ) * 2 + patt1 * 5; • Ripetizione pattern "n" volte • Prioritario rispetto alla concatenazione Concatenazione tra pattern Linguaggi e modelli computazionali LS - A.A. 2012/2013

  6. La grammatica: skip SKIP : { " " | "\r" | "\t" | "\n" | "\r\n" | <"/*" (~["*"])* "*" ("*" | ~["*","/"] (~["*"])* "*")* "/"> } Ovvero spazi, new line, tabulazioni, e commenti multilinea Linguaggi e modelli computazionali LS - A.A. 2012/2013

  7. La grammatica: token (1) TOKEN : { < TRACK : "track" > | < METER : "meter" > | < TEMPO : "tempo"> | < INSTRUMENT : "instrument" > | < PATTERN : "pattern"> | < PLAY : "play"> | < WITH : "with"> | < PLUS : "+" > | < STAR : "*" > | < ASSIGN : "=" > | < SLASH : "/" > | < SEMICOLON : ";" > | < LBRACE : "{" > | < RBRACE : "}" > | < DQUOTES : "\"" > | < LPAREN : "(" > | < RPAREN : ")" > } Fin qui niente di particolare.. Linguaggi e modelli computazionali LS - A.A. 2012/2013

  8. La grammatica: token (2) La grammatica dei pattern: "A3o G#4 BbqRx" Linguaggi e modelli computazionali LS - A.A. 2012/2013

  9. La grammatica: token (2) La grammatica dei pattern: "A3o G#4 BbqRx" Una nota, eventualmente in diesis o bemolle, oppure una pausa ovvero ( ["A"-"F"] ("#" | "b")? ) | "R" Linguaggi e modelli computazionali LS - A.A. 2012/2013

  10. La grammatica: token (2) La grammatica dei pattern: "A3o G#4BbqRx" L’ottava di riferimento della nota, con valore di default pari a 5 ovvero [ "0" – "9" ]? Linguaggi e modelli computazionali LS - A.A. 2012/2013

  11. La grammatica: token (2) La grammatica dei pattern: "A3o G#4 BbqRx" La durata della nota/pausa (1, ½, ¼, .. 1/64 della battuta), con valore di default pari a q ovvero ("w"| "h"| "q"| "i"| "s"| "t"| "x"| "o")? Linguaggi e modelli computazionali LS - A.A. 2012/2013

  12. La grammatica: token (3) Dal punto di vista semantico sarebbe comodo definire i token separatamente: TOKEN : { < NOTE: ( ["A"-"F"] ("#" | "b")? ) | "R"> | < OCTAVE : [ "0" – "9" ] > | < DURATION: ("w"| "h"| "q"| "i"| "s"| "t"| "x"| "o")> } E predisporre una opportuna produzione a livello di parser: PatternString::= <DQUOTES> ( PatternNote )* <DQUOTES> PatternNote::= <NOTE> <OCTAVE> <DURATION> Con il vantaggio di ottenere le 3 componenti separate in fase di valutazione MA.. Linguaggi e modelli computazionali LS - A.A. 2012/2013

  13. La grammatica: token (4) Nel nostro linguaggio però è necessario definire anche gli identificatori: TOKEN : { < NOTE: (["A"-"F"]("#" | "b")?) | "R" > | < OCTAVE : ["0"–"9"] > | < DURATION: ("w"|"h"|"q"|"i"|"s"|"t"|"x"|"o") > |< IDENTIFIER : <LETTER> ( <LETTER> | ["0"-"9"] )* > | < #LETTER : ["a"-"z", "A"-"Z", "_"] > } CONFLITTO tra i tokenmonolettera e gli identificatori Linguaggi e modelli computazionali LS - A.A. 2012/2013

  14. La grammatica: token (5) Possibili soluzioni: • Definire gli identificatori a livello di parser ->Grammatica complicata • Prevedere un prefisso per gli identificatori (es: “_”) -> Sintassi fastidiosa • Definire unico token per le note come stringa esatta -> Necessaria successiva scomposizione “a mano”, ma possiamo mantenere grammatica semplice e sintassi invariata CONFLITTO tra i tokenmonolettera e gli identificatori String.split(regex) Linguaggi e modelli computazionali LS - A.A. 2012/2013

  15. La grammatica: token (6) Dunque: TOKEN : { < NOTE_LITERAL : (["A"-"G"] (["#", "b"])? | "R") (["0"-"9"])?("w" | "h" | "q" | "i" | "s" | "t" | "x" | "o")? > |< IDENTIFIER : <LETTER> ( <LETTER> | ["0"-"9"] )* > | < #LETTER : ["a"-"z", "A"-"Z", "_"] > | < INTEGER : ["1"-"9"] ( ["0"-"9"] )* > } NB: c’è ancora conflittonel caso in cui identificatore segue sintassi <NOTE_LITERAL> (es: A3o, Fx, R…) -> alcuni identificatori vietati Linguaggi e modelli computazionali LS - A.A. 2012/2013

  16. La grammatica: produzioni (1) Scope::= HeadBody< EOF > Head::= Track( Meter)?( Tempo )? Track::= <TRACK> <IDENTIFIER> <SEMICOLON> Meter::= <METER> <INTEGER> <SLASH> <INTEGER> <SEMICOLON> } Tempo ::= <TEMPO> <INTEGER> <SEMICOLON> Body ::= InstrumentSectionPatternSectionPatternAssignSection track myTrack; meter 4/4; tempo 140; Linguaggi e modelli computazionali LS - A.A. 2012/2013

  17. La grammatica: produzioni (2) InstrumentSection ::= ( InstrumentDecl)+ InstrumentDecl::= <INSTRUMENT> InstrumentType( <LBRACE>( ParameterAssign)+ <RBRACE> )?InstrumentId<SEMICOLON> InstrumentType ::= <IDENTIFIER> ParameterAssign::= ParameterId <ASSIGN> ParameterValue<SEMICOLON> ParameterId ::=<IDENTIFIER> ParameterValue ::= <INTEGER> InstrumentId ::= <IDENTIFIER> instrument GUITAR { volume = 16000; portamento = 127; }myGuitar; Linguaggi e modelli computazionali LS - A.A. 2012/2013

  18. La grammatica: pattern expressions Dalla sintassi astratta: PatternDecl::= <PATTERN> PatternId<ASSIGN> ConcatExp <SEMICOLON> PatternId::= <IDENTIFIER> PatternExp::= PatternExp <PLUS>PatternExp PatternExp::= PatternExp <STAR> <INTEGER> PatternExp::= PatternString | PatternIdValue PatternIdValue::= <IDENTIFIER> PatternString::= <DQUOTES> ( PatternNote() )+ <DQUOTES> PatternNote::= <NOTE_LITERAL> • Ricorsioni sinistre • Non specifica priorità Linguaggi e modelli computazionali LS - A.A. 2012/2013

  19. La grammatica: pattern expressions A quella concreta: PatternSection::= ( PatternDecl)+ PatternDecl::= <PATTERN> PatternId<ASSIGN> ConcatExp <SEMICOLON> PatternId::= <IDENTIFIER> ConcatExp::= RepeatExp ( <PLUS> RepeatExp )* RepeatExp::= SingleExp() ( <STAR> <INTEGER> )? SingleExp::= PatternString| PatternIdValue| <LPAREN> ConcatExp<RPAREN> PatternIdValue ::= <IDENTIFIER> PatternString ::= <DQUOTES> ( PatternNote() )+ <DQUOTES> PatternNote ::= <NOTE_LITERAL> pattern patt2 = ( "A3o C"+patt1 ) * 2 + patt1* 5; Linguaggi e modelli computazionali LS - A.A. 2012/2013

  20. La grammatica: produzioni (3) PatternAssignSection::= ( PatternAssign)+ PatternAssign: <PLAY> PatternId<WITH> InstrumentId<SEMICOLON> playpatt3withguitar1; Linguaggi e modelli computazionali LS - A.A. 2012/2013

  21. Classificazione grammatica • Grammatica di tipo 2 (produzioni A ::= α) • Tutte le produzioni generano un linguaggio di tipo 3, eccetto: ConcatExp::= RepeatExp ( <PLUS> RepeatExp )* RepeatExp::= SingleExp() ( <STAR> <INTEGER> )? SingleExp::= PatternString | PatternIdValue| <LPAREN> ConcatExp <RPAREN> Self Embedding • Il linguaggio generato quindi è di tipo 2 • Il calcolo dei DirectorSymbols dà luogo a insiemi disgiunti -> grammaticaLL(1) Linguaggi e modelli computazionali LS - A.A. 2012/2013

  22. Strumenti • Linguaggio: Java 1.6.0_31 • Ultima rilasciata per Mac OS X • Ambiente di sviluppo: Eclipse IDE 3.6 • Parser e scanner: JavaCC 5.0 • Albero sintattico e visitor: JTB 1.4.6 • Documentazione: JJDOC • Libreria musicale: JFugue 4.0.3 • Testing: JUnit 4.8.1 Linguaggi e modelli computazionali LS - A.A. 2012/2013

  23. Architettura del sistema (1) Generate da JavaCC/JTB … Check Semantico Albero astratto Riproduzione traccia/pattern Rappresentazione tabellare pattern Linguaggi e modelli computazionali LS - A.A. 2012/2013

  24. Check semantico • Metrica valida (4/4, ¾, 2/4, 3/8, 6/8, …) • Tempo > 0 • Tipo di strumento, nomi parametri e valori validi • standard MIDI • Identificatori strumenti e pattern • definiti un’unica volta • usati solo dopo essere stati definiti • Note all’interno di stringhe devono essere valide • Es: Mi# non esiste Linguaggi e modelli computazionali LS - A.A. 2012/2013

  25. Architettura del sistema (2) Pattern MVC Controller coordina i visitor Costanti musicali Splittingtoken <NOTE_LITERAL> Rappresentazione tabellare pattern Linguaggi e modelli computazionali LS - A.A. 2012/2013

  26. GrooveSlangFrame: screenshot Linguaggi e modelli computazionali LS - A.A. 2012/2013

  27. GrooveSlangFrame: screenshot Editor AST Log Staff Table Linguaggi e modelli computazionali LS - A.A. 2012/2013

  28. Conclusioni • Il linguaggio progettato permette di comporre brani in modo semplice e intuitivo Sviluppi futuri • Estendere il linguaggio dei pattern con strutture musicali più complesse (es. accordi) • Permettere l’editing dei pattern a livello grafico tramite staff table • Nuovi operatori sui pattern (es: shift sulla scala musicale) Linguaggi e modelli computazionali LS - A.A. 2012/2013

  29. Demo Linguaggi e modelli computazionali LS - A.A. 2012/2013

More Related